caozuoqilai day4

3.13

回溯的题可以先把二叉树画出来,能帮助思考!!!

Leetcode

组合总和Ⅲ

class Solution {
public:
    vector<vector<int>>ans;
    vector<int>path;
    void backtracing(int k, int n, int index){
        if(path.size() == k && n == 0){
            ans.push_back(path);
            return;
        }
        for(int i = index ; i <= 9 ; i++){
            path.push_back(i);
            backtracing(k, n-i, i+1);
            path.pop_back();
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        backtracing(k, n, 1);
        return ans;
    }
};

优化:

class Solution {
public:
    vector<vector<int>>ans;
    vector<int>path;
    void backtracing(int k, int n, int index){
        if(path.size() == k){
            if(n == 0) ans.push_back(path);
            return;
        }
        for(int i = index ; i <= 9 ; i++){
            path.push_back(i);
            backtracing(k, n-i, i+1);
            path.pop_back();
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        backtracing(k, n, 1);
        return ans;
    }
};

最大子数组和

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int cur = nums[0], prev = nums[0];
        for(int i = 1 ; i < nums.size() ; i++){
            if(prev < 0) prev = 0;
            prev += nums[i];
           cur = max(cur, prev);
        }
        return cur;
    }
};

买卖股票最佳时机2

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int profit = 0, prev = prices[0];
        for(int i = 1 ; i < prices.size() ; i++){
            if(prices[i] > prev)    profit += (prices[i] - prev);
            prev = prices[i];
        }
        return profit;
    }
};

另一种思路:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int profit = 0;
        for(int i = 1 ; i < prices.size() ; i++){
            profit += max(prices[i] - prices[i-1], 0);
        }
        return profit;
    }
};

试试动态规划:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<vector<int>>dp(2, vector<int>(prices.size(), 0));
        dp[0][0] = 0, dp[1][0] = -prices[0];
        for(int i = 1 ; i < prices.size() ; i++){
            dp[1][i] = max(dp[1][i-1], dp[0][i-1] - prices[i]);
            dp[0][i] = max(dp[0][i-1], dp[1][i-1] + prices[i]);
        }
        return dp[0][prices.size()-1];
    }
};

计网

DHE算法

DH算法分为两种实现:static DH 和 DHE(ephemeral)

前者已经不常用了,因为服务器的私钥保持不变,在大量的数据传输中私钥容易被破解,不具备向前安全性

每次通信过程两边随机生成私钥

ECDHE

在DHE的基础上提高了计算性能,引入椭圆曲线

四次握手,但在第四次握手前还没完全建立连接前,就开始了数据传递

第一次握手:client hello,tls协议版本,密码套件列表,随机数

第二次握手:server hello, tls版本,密码套件列表,随机数,选择的椭圆曲线,椭圆曲线G点,椭圆曲线公钥,证书

第三次握手:椭圆曲线公钥,摘要,改变加密算法

第四次握手:改变加密算法,摘要

其他

而我们在0.001处入口处努塞尔数偏大

因为听说雷诺数越大,入口努塞尔数越小

都差了一点,就算把长宽比拉上去,因为想提高Re数,又要保证无量纲长度大于0.1,长宽比就得上去

50 0.53 密度变化大 997-2000

50 0.52不行1900

50 0.51 1600

50 0.505 1500

40 0.505 1601

60 0.505 功成

4核8线程,1个物理核心裂开为2个逻辑核心(超线程技术)

操作系统

cpu cache由多个cpu line组成,cpu line由各种标志(tag) + 数据块组成(data block)

cpu写数据,将数据从CPU Cache里写入到内存中,两种方法:

写直达

不管数据在不在cpu cache中,都要写到内存中

写回

当CPU进行写操作时,若是cpu cache里没有对应的数据,需要检查其是否为脏

若是脏的就先把他的数据写入到内存中,然后再把新数据写入到cpu cache中,把它标记为脏的

若不为脏,就把它写入到cpu cache中,并且把它标记为脏的

若是cpu里有对应数据,就把数据更新到cpu cache中,并把它标记为脏的

cpu的缓存一致性问题

一个cpu把一个数据写回还没同步到内存中,另一个cpu从内存中读到的是错误的数据

办法:

写传播

一个cpu更改了数据要同步到其他cpu

总线嗅探

cpu需要监听总线,若是其他cpu有改变数据,而恰巧该数据也在自己的cpu cache中,那么自身也需要更改。

缺点:负载太大,改进MESI

MESI

M modified 脏标记

E exclusive 一致 只有一个cpu在对数据进行操作,只在一个cpu的cpu cache中

S shared 一致

I invalidated 失效的

当cpu中cache line状态为独享或者已修改时,再改变就不需要同步给其他cpu,减小总线带宽压力

事务的串行化

顺序要一致,A先B后,那么C、D收到的应该都是这个顺序;

须达到两点要求,操作同步;锁,只有拿到了锁才能更改数据

以后吃完饭不要玩手机啦,这么多东西要学西巴

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值