摘要:
今天翻电脑时突然发现有个存了很多照片和视频的文件夹,想起来是去年换手机(流行的小5)时拷出来的。看了几张照片,往事又一幕幕的浮现在脑海,好吧,我是个感性的人。所以就想把这些照片翻着看一遍,可是拷出来的照片手机里是按时间自动分文件夹的,一个一个文件夹拷很是麻烦,于是打算写个python小脚本来完成这个工作(扯这么多,终于到主题了,囧)这是待拷贝的文件夹根目录,每个子目录下都有若干照片。废话少说,上代码:# -*- coding: utf-8 -*-#!/usr/bin/python#Filename:copyfile.pyimport os,shutildef mycopy(srcpath,ds 阅读全文
摘要:
代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗 80% 的工作量。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。改进算法,选择合适的数据结构一个良好的算法能够对性能起到关键作用,因此性能改进的首要点是对算法的改进。在算法的时间复杂度排序上依次是:O(1) -> O(lg n) -> O(n lg n) -> O(n^2) -> O(n^3) -> O(n^k) -> O(k^n) -> O(n!)因此如果能够在时间复杂度 阅读全文
摘要:
第二章开头提出了三个非常好的问题:1.给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数。在内存足够的情况下,可以用位图来解决这个问题,位图中标记为0对应的数就是所要找的。当内存不足时,此时采用分治的思想: 按最高位(也可按低位)的值对所有整数分类,高位为0的一组,记为A,高位为1的一组,记为 B,分别统计A,B组元素的个数。此时若len(A)<2^31,则A组中必有漏掉的数(此时缺失的 数高位一定为0);同理可判断B中是否有遗漏。选择一个有遗漏的分组,再对它的次高位进行分类, 一直递归下去直到对最低位也进行了分类。此时缺失的数每一位... 阅读全文
摘要:
第一章比较好的问题总结如下:1.如何生成位于0到n-1之间的k个不同的随机顺序的随机整数?这在前一篇文章中已经给出了解答2.若代码需要1.25MB的空间,而系统只能提供1MB的空间,该如何处理?思路:此时可分别两次读入数据来处理。3.每个整数不只出现一次,而是最多出现10次,如何处理?思路:前面的问题每个数字只出现一次,所以选择用一个bit位来表示这个数字是否出现; 而现在最多出现10次,就不能用一位来表示了,至少需要4bit来表示这个数字出现了 多少次。所以位图的长度也就扩大了四倍。此时若对内存大小有严格限制,则可以 多次读入数据来解决问题4.免费电话区号不只是800,还包... 阅读全文
摘要:
最近打算研究一下《编程珠玑》这本神器,第一章主要讲了利用位图这种结构来方便地解决一些问题。在看用位图排序的算法时,有几个小问题总结一下:1.如何生成位于0到n-1之间的k个不同的随机顺序的随机整数要求生成的k个随机数不重复,且每个随机数是小于n的。这个问题当n,k值比较小时,比较容易解决,但当n值比较大时,比如10000000,不得不考虑算法的效率。现给出两种解法(Python实现):'''Created on 2012-7-31@author: wanglei'''import randomdef rand1(n,k): numlist=[i 阅读全文
摘要:
6–17.方法.实现一个叫myPop()的函数,功能类似于列表的pop()方法,用一个列表作为输入,移除列表的最新一个元素,并返回它.解答:# -*- coding:utf-8 -*- #!/usr/bin/python#Filename:6-17.py'''Created on 2012-7-30@author: wanglei'''def mypop(alist): list_len=len(alist) if list_len==0: print "列表为空!" return popitem=alist[list_len 阅读全文
摘要:
6–15.转换(a)给出两个可识别格式的日期,比如 MM/DD/YY 或者 DD/MM/YY 格式,计算出两个日期间的天数.(b)给出一个人的生日,计算从此人出生到现在的天数,包括所有的闰月.(c)还是上面的例子,计算出到此人下次过生日还有多少天.解答:# -*- coding:utf-8 -*- #!/usr/bin/python#Filename:6-15.py'''Created on 2012-7-27@author: wanglei'''def isleapyear(year): if (year %4==0 and year%100! 阅读全文
摘要:
6–14.随机数.设计一个"石头,剪子,布"游戏,有时又叫"Rochambeau",你小时候可能玩过,下面是规则.你和你的对手,在同一时间做出特定的手势,必须是下面一种手势:石头,剪子,布.胜利者从下面的规则中产生,这个规则本身是个悖论.(a) the paper covers the rock,布包石头.(b)石头砸剪子,(c)剪子剪破布.在你的计算机版本中,用户输入她/他的选项,计算机找一个随机选项,然后由你的程序来决定一个胜利者或者平手.注意:最好的算法是尽量少的使用if 语句.解答如下:# -*- coding:utf-8 -*- #!/usr/ 阅读全文
摘要:
6–10.字符串.写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转.比如,输入"Mr.Ed",应该返回"mR.eD"作为输出.解答:#!/usr/bin/python#Filename:6-10.py'''Created on 2012-7-25@author: wanglei'''def charreverse(str): slist=list(str) for i in range(0,len(slist)): if ord(slist[i]) in range(65,91): sl 阅读全文
摘要:
6–6. 字符串.创建一个string.strip()的替代函数:接受一个字符串,去掉它前面和后面的空格(如果使用string.*strip()函数那本练习就没有意义了)解答:#/usr/bin/python#!Filename:6-6.py'''Created on 2012-7-24@author: wanglei'''def mystrip(astring): alist=list(astring) list_len=len(alist) while alist[0]==" ": del alist[0] while a 阅读全文