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);