《编程珠玑》笔记二
2008年8月14日
(昨晚将昨天的笔记通过讯飞输入法这样记录备忘录,然后又通过人工修正,最后发布到CSDN的博客上,此过程,大概共花费了我约一个小时的时间,其中语音录入20分钟,人工修正20分钟,重新排版30分钟。)
现在继续来看第三题。
第三题
题目是要我来比较不同的方法的运行时效率。方法包括:
1. 自己系统上实现的位图排序。(嗯,因为昨天没有实现,所以这个暂时不能)
2. 系统排序的运行时间;
3. 习题一中排序的运行时间及潘盛内置函数的排序时间。
且Jon先生规定输入文件为一千万个,每个数不大于一千万。
第四题
吉先生很调皮,他说习题三中有一个小问题,如何生成小于n,且没有重复的k个整数?
至此,我吸取昨日的教训,决定从多个角度来回答这个问题。
解法一
可用攀升的内置函数生成随机数,即random.randint()因为这方法每次只能生成一个水技术,所以我们要将其稍微加工一下,使之成为深沉宿主的答案以下是我的潘神代码。
(由于忘记了Python的随机数生成的函数名,所以我搜索了一下,查到了random的模块,同时有了意外的发现这便是方法二。)
解法二
先上代码
” import numpy
”
arr = numpy.arange(10)
numpy.random.shuffle(arr)
print(arr)
[7 4 8 3 2 9 0 1 5 6]
摘自CSDN christianashannon先生的博客https://blog.csdn.net/christianashannon/article/details/78867204
首先我是听说过numpy这个库的该库是由cpp实现的用来多用来实现科学计算(矩阵,向量),其中函数的性能较Python自带的同功能函数而言是提高了不少。(我目前没有考证,但是我同意该说法,因为是cpp的性能还是毋庸置疑的)
以下是我的解读:
经我猜测arange()函数便是生成数组0-n的函数。而np.random.shuffle(arr)便是将arr数列打乱,不知其原理为何?其效果如何?待我回去一检验,现在我还不知道如何查看python函数的源码,中午可以查一下。
经查:
import random
random.__file__
Out: '/Users/mrzhang/anaconda3/lib/python3.6/random.py'
即在ipyhton交互环境下使用 函数名.file (双下滑线)的方法即可查看文件位置
感谢Google-boy先生
https://www.cnblogs.com/ylHe/p/8621786.html
同时,这位先生还提供了另一种方法,看起来相当简洁。
print (numpy.random.permutation(10))
Out: [6 7 5 3 0 4 1 9 8 2]
(牛皮牛皮numpy不愧是作为科学计算用的,可能是因为科学计算也是常常用到随机数列这个功能,所以python的numpy库对其支持的如此人性化,我决定晚上要看一下这个numpy的函数的源码。)
以上两个方法便是库函数的方法。明天再来说说我自己的想法。