编程珠玑学习笔记
PYB不开心
这个作者很懒,什么都没留下…
展开
-
编程珠玑学习笔记(第一章)
本章主要讲述了磁盘排序算法和针对特殊数据我们可以作出的特殊算法.习题2:主要思路就是将整数进行映射,a[i<<5] <->1<<(i&31)。这样就实现了将一个整数数组当作位向量来使用了.习题4:def fast_generate(N,k): random_list = [] x = [i for i in range(0,N)] for i in range(0,k):原创 2016-03-31 23:55:21 · 400 阅读 · 0 评论 -
编程珠玑第二章总结:
[0]:问题A:给出一个顺序文件,它最多包含40亿个随机排列的32位整数。找出一个不在文件中的32位整数。分析:如果内存足够的话,可以采取第一章的位图排序法,以O(n)的效率就可以解决。如果内存不足的话,但是有几个外部文件可以存储数据,那么就可以采用二分查找的思想来解决问题!!!这里的思路比较巧妙,它不是通常意义上的二分查找,但是思维模式很相似.我们可以通过扫描输入文件,将第一位是0的写入一个文件,原创 2016-04-26 14:15:47 · 509 阅读 · 0 评论 -
编程珠玑第三章总结
第二题:直接用两个数组就解决了。def const_recursion(k,a,c,m): def get(n): if n <= len(a):return a[n-1] next = 0 kase = 0 for i in range(n-k-1,n-1): next += a[i]*c[kase]原创 2016-06-08 14:15:24 · 568 阅读 · 0 评论 -
编程珠玑第四章总结
第二题:用来用二分搜索法返回所搜寻元素出现的第一个位置。def bin_search_first(array,t): n = len(array) if n == 0 :return -1 l = 0;u = n-1 p = -1 while l <= u: m = (l+u)//2 if array[m] == t:原创 2016-06-26 10:05:50 · 543 阅读 · 0 评论 -
编程珠玑第8章总结
第八章主要讲了几个基本算法设计技术,引入了一个累加数组的思路,这个思路很有意思。习题4习题4 这个题目从数学上我是不会做的E(max)=limN→∞∫N0p(max)∗max∗dmaxN.....(1)E(max)=\lim_{N\to\infty}\frac{\int_0^N p(max)*max*dmax}{N}.....(1) P(max≤x)=∫x0p(max)∗dmax=?...原创 2016-07-09 18:18:56 · 623 阅读 · 0 评论 -
编程珠玑第九|十章学习总结
前面的习题没有什么太多讲得,主要是循环展开,预处理,查表等技巧。习题7习题7查表对0—2m2^m进行预处理,计算它们的1的位数。另外答案给出了比较trick的一招:b &=b-1 b &=b-1 这样可以对为1的位进行迭代。习题12习题12多项式计算的更快算法:def f(a,x): if x==0:return a[0] y = a[0] for a_k in a[1:]:原创 2016-07-15 22:46:28 · 454 阅读 · 0 评论 -
编程珠玑第6章
习题6.2:大整数分解:首先可以利用筛法计算出一部分较小素数(2-m),然后存储起来。然后利用这些素数对大整数进行分解,将大整数变成一个相对较小的数。然后继续利用筛法和已有的素数计算新的素数序列(m-km),不断重复上面的过程,直到该数自己小于下一个素数。伪代码如下:compute the base_primes def f(n) for each in base_primes:原创 2016-07-08 13:20:54 · 628 阅读 · 0 评论