随笔

1.生成器

     def triangles(k):
     a = [1, 1]
    for i in range(2, k):
        b = [a[j - 2] + a[j-1] if j != 1 and j != i  else 1 for j in range(1,i+1)]

        yield b
        a = b

f=triangles(10)
for n in f:
    print(n)
对于所求的值只与上一个值有关,而且一次不关心所有的结果,所得的结果类型形式不一致时,
用yield很方便,不用考虑如何存储所得的结果,而且调用一次函数后,从yield出退出并返回值,下一次再进入函数时仍从该处开始.最后在获取结果时虽然可以用next,单需要考虑可能抛出错误,但直接用for循环则不会.用列表生成式使代码更整洁.

2.Multithread 多线程
多线程不一定会节省时间,emmmm,可能是我理解的不到位,感觉大部分时候效率还不如不用多线程,也不是真正的同时运行多项任务,感觉可以用的是并行的这个特点?不至于非得等到把一个任务处理完了再去处理另一个.
2.multiprocessing 多进程

import multiprocessing as mp
import Queue
import time
t0=time.time()
q = Queue.Queue()


def job():
    res = 0
    for i in range(1000000000):
        res += i + i ** 2 + i ** 3
    q.put(res)

def multiprocess():
    p1 = mp.Process(target=job)
    p2 = mp.Process(target=job)
    p1.start()
    p2.start()
    p1.join()
    p2.join()
multiprocess()
t=time.time()-t0
print("multiprocesssing cost %f"%t)

在运算量较大时有较明显的优势,在电脑不崩的前提下,计算量越大优势越明显
4.C++的位操作符
嗯,算法才是最难想的部分,太烧脑子了,汉明距离的简化求法让我…到底还是太垃圾

  #include<iostream>
using namespace std;
template <class Type>
class Solution{
public:
    int count=0;
    Solution(Type a,Type b){
        x=a;
        y=b;

  


}
    int hamDist(){
        k=x^y;
        while(k!=0){
        k&=(k-1);
        count+=1;
            }
    }
    
private:
    Type x;
    Type y;
    int k;
     
};
int main(){
/*int a,b;
cout<<"please enter two numbers"<<endl;
cin>>a;
cin>>b;
*/
Solution <int> ham(20,30)  ;
ham.hamDist();
cout<<"the answer is"<<ham.count<<endl;
return 0;
    

觉得比较难想的是k&=(k-1);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值