摘要: 场景:提供了很多个文件,需要对文件分析,如果每次读取多个文件,造成很多麻烦,所以需要对源文件进行合并预处理。支持两种用法:(1)合并某一文件夹下的所有文件(忽略文件夹等非文件条目) (2)显示的合并多文件。 1 import sys 2 import os 3 4 ''' 5 usage(1): merge_files pathname 6 pathname is directory and merge files in pathname directory 7 usage(2): merge_files file1 file2 [file3[..... 阅读全文
posted @ 2013-08-08 11:22 lonelytree 阅读(610) 评论(0) 推荐(0) 编辑
摘要: 一、使用python自带的hash库hashlib 对于大文件,不能简单的一次载入内存,需要对文件分片不断的update完成(代码中如果文件超过100M,就需要分片了)。具体代码如下: 1 import os 2 import sys 3 import hashlib 4 5 _FILE_SLIM = (100*1024*1024) # 100MB 6 7 8 def file_md5(filename): 9 calltimes = 010 hmd5 = hashlib.md5()11 fp = open(filename,"rb")12 f_size ... 阅读全文
posted @ 2013-08-05 16:15 lonelytree 阅读(4153) 评论(1) 推荐(0) 编辑
摘要: 问题描述:有个同事让我求x=[0,10^7]中满足xmod100和mod101的x有哪些。 思路: 1、刚开始想都没想,x%100 == x%101,遍历所有的x。 2、写完之后想了想如何优化下(纯属闲的蛋疼),首先转换成数学公式: x=k1*100+r1,x=k2*101+r2,因为要r1和r2相等。那么显然r=min(r1,r2),即r最大为99. 那么k1*100+r = k2*101+r,消除r为:k1*100=k2*101,要使得这个成立,那么k1满足n*101,k2同理。 那么此时x可以转换为:x=n*101*100+r,我们知道x最大值为10^7,r最... 阅读全文
posted @ 2013-07-16 15:41 lonelytree 阅读(595) 评论(0) 推荐(1) 编辑
摘要: Redis的数据结构非常丰富,比如实现了内存紧凑型的数据结构:intset、ziplist等. Redis 2.3.16版本只提供了数据升级功能(比如16bit->32bit等)。然而这种存在一个问题就,增加1个大数据,然后删除此大数据后,那么可能存在内存浪费现象,比如:ADD N 个16bit的数据,再ADD 1个64bit的数据,再删除此64bit的数据,那么浪费的空间大小为:N*(64-16)bits。不知道redis里面为什么没有增加降级功能,而且代码量和复杂度都不高,也许intset的使用都是在数据规模小的时候才用吧。所以我增加了降级功能(degrade)。思路:类似于升级功能 阅读全文
posted @ 2013-05-30 21:09 lonelytree 阅读(1055) 评论(0) 推荐(0) 编辑
摘要: Redis的里面的sort-set(有序集)就是采用skiplist来实现的。skiplist的性能和Red-black差不多。算法实现比RBT要简单许多,改动的节点少,不涉及Re-Balance.先形象的观察下skiplist的结构: 观察上图,可知skiplist的最高有4层,每层有序,第1层包含所有的节点。通过概率算法,可以控制层数越高的节点个数越来越少。那么跳表是如何来搜索的呢?比如在上图搜索17.为了加快搜索,需要从最高层4开始搜索(因为最高层的节点少,容易定位),首先查看6节点,发现17比其大,向后搜索,发现6后面的节点指向了Nil(第4层),那么搜索的层数降低1层,从此节点的.. 阅读全文
posted @ 2013-05-30 17:37 lonelytree 阅读(1088) 评论(0) 推荐(0) 编辑