“21 天好习惯”第一期-13

目录

离散数学:

数据库知识点:

leetcode每日一题:


离散数学:

第 7 章 : 二元关系.

        有序对与笛卡尔积: 

                定义: 集合 A x 集合 B (相互映射 , 元素个数为 n * m) . 得到的集合中的元素称为 "有序对" (我更喜欢叫它 : 键值对.

                性质: 定义 集合 A 和 集合 B.

                        1. 集合 A 与 空集 的笛卡尔积 是空集 (空集 与 集合 A 的笛卡尔积 是空集).

                        2.笛卡尔积 不满足 交换律 ( A x B != B x A.

                        3.笛卡尔积 不满足 结合律 ( (A x B) x C != A x (B x C).

                        4.笛卡尔积运算对并 和 交运算满足分配律. (不论前后分配.

                        5.A\subseteq C\wedge B\subseteq D\Rightarrow A\bowtie B\subseteq C\bowtie D 

                幂集: P(A) 的元素是 A中元素的子集 所构成的集合.

        二元关系:

                定义: 空集 或者 元素都是有序对.

                性质:

                        A x B的任何子集所定义的二元关系称作 从A到B的二元关系. 当 A = B 时称为A上的二元关系.

                        全域关系: E_{A} = \left \{ <x,y>| x\epsilon A\wedge y\epsilon A \right \} = A \bowtie A.

                        恒等关系: I_{A} = \left \{ <x,y> |x\epsilon A\right \}

        关系运算:

                domR: 前键构成的集合.

                ranR:后键构成的集合.

                fldR: 元素的集合.

                逆关系(R^{-1}): 前后键调换位置.

                右复合(F\circ G): <x , t> 与 <t , y> -> <x , y>. (从左往右传导.

                限制(R\dagger A): 将前键的元素限制在集合A中.

                (R[A]): 在限制的基础上取后键为答案. 

数据库知识点:

数据更新:

        插入元组:

insert into "表名" (col ~ 列名)
values (对应列名赋值)

--eg: 将学生张成名的信息插入到student表中
insert into student
values('201215126' , '张成名' , '男' , 18 , 'CS')

         插入子查询结果:

insert into "表名1" (col ~)
select col ~ --一一对应
from "表名2"
--where
--group by

        修改元组:

updata "表名"
set col1 = any
--were col2

--将符合where条件的元素的 col1 改为 any (col1可以等于col2)

where col2 in (
    select
    from
    where
)

--where可以蕴含子查询

        删除元组:

delete from "表名"
where col = any

--删除该表中col值为any的元组
--同样可以没有where子句(即删除表) , where可以蕴含子查询

视图:

        基本概念: 建立一个可以使用的(组合)表 , 修改视图就是在修改基本表.

        建立视图:

create view "取名" (视图的col名)
as
--查询部分 , 查询的结果就是视图
select col ~ --(与视图的col名一一对应
from (可以是存在的基本表,也可以是已经建立的视图
where
--with check option (效果: 在插入,修改,删除操作时,使where条件依然满足.

        视图的查询和基本表一致.        

        视图的更新: 更新方式和更新基本表一样 , 但是并不是所有的视图都可以更新. (不存在基本表中的不可更新.

leetcode每日一题:

次元门

一道简单题 , but 一题多解 , 思维发散.

解法一: 调用函数库 sqrt .

class Solution {
public:
    bool isPerfectSquare(int num) {
        int x = sqrt(num);
        return x * x == num;
    }
};

解法二: 纯暴力 (不会还有人不会暴力吧

class Solution {
public:
    bool isPerfectSquare(int num) {
        long long ide = 1;

        while(ide * ide <= num){
            if(ide * ide == num) return true;

            ide ++;
        }

        return false;
    }
};

解法三: 二分找符合的数 , 毕竟1 到 num 是线性关系 , 所以二分寻找符合的数是一定可以的.


class Solution {
public:
    bool isPerfectSquare(int num) {
        long long left = 1 , right = num;

        while(left <= right){
            long long mid = (left + right) >> 1;
            if(mid * mid == num) return true;
            if(mid * mid > num) right = mid - 1;
            if(mid * mid < num) left = mid + 1;
        }

        return false;
    }
};

解法四: 分解质因数 , 判断分解出的质因数是否都为偶数 , 若为偶数则是平方数 , 反之不是 (这很好理解的吧?? 偶数的质因数可以均分成两部分 , 进而构造成两个相同的数.

class Solution {
public:
    bool isPerfectSquare(int num) {
        map<int , int>nums;

        for(long long i = 2;i * i <= num;i ++) {  
            while(!(num % i)) nums[i] ++ , num /= i;
        }

        if(num > 1) nums[num] ++;

        for(auto ao : nums) if(ao.second & 1) return false;

        return true;
    }
};

解法五: 数学知识解题 -> 平方数满足首项为 1 , 差值为 2 的等差数列的前n项和. ( ide 的平方 就是前n项和的 第ide项

class Solution {
public:
    bool isPerfectSquare(int num) {
        int ide = 1;

        while(num > 0) num -= ide , ide += 2;

        return !num;
    }
};

儿时凿壁偷光 宿昔不梳一苦十年寒窗.Day Thirteen -- 青山檐下雨.

猜你喜欢

转载自blog.csdn.net/EX_fish/article/details/121149899