随笔分类 -  算法相关

积累一些算法,解决问题的思路等吧
摘要:# -*- coding: utf-8 -*-"""一致性哈希算法 python实现参考http://weblogs.java.net/blog/2007/11/27/consistent-hashinghttp://code.google.com/p/flexihash/http://www.codinglabs.org/html/consistent-hashing.html"""import hashlibclass ConsistentHash(object): def __init__(self, hasher=None, 阅读全文

posted @ 2013-01-17 12:03 蛇小狼 阅读(1048) 评论(0) 推荐(0)

摘要:大素数的生成基于之前一篇素数的检测,原理是随机一个奇数,然后检测是否是素数。可以先用50以内或者100以内的素数先做验证,然后再用Miller-Rabin检测。 效率感觉还可以,1000位的素数检测10次生成要平均1秒时间。def make_a_big_prime(n): base_primes = imouren_primes3(50) random_num = random.randrange(2**n+1, 2**(n+1)+1, 2) while 1: is_prime = True for i in base_primes: ... 阅读全文

posted @ 2013-01-16 17:29 蛇小狼 阅读(323) 评论(0) 推荐(0)

摘要:因子检测"""检测因子,时间复杂度O(n^(1/2))"""def is_prime(n): if n < 2: return False for i in xrange(2, int(n**0.5+1)): if n%i == 0: return False return True费马小定理"""费马小定理如果n是一个素数,a是小于n的任意正整数,那么a的n次方与a模n同余实现方法选择一个底数(例如2),对于大整数p,如果2^(p-1)与1不是模p同余数,则p一定不是素数;否则,则p很可能是一个素 阅读全文

posted @ 2013-01-15 01:34 蛇小狼 阅读(354) 评论(0) 推荐(0)

摘要:基础思路"""一个简单的筛素数的过程:n=30。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30第 1 步过后2 4 ... 28 30这15个单元被标成false,其余为true。第 2 步开始: i=3; 由于prime[3]=true, 把prime[6], [9], [12], [15], [18], [21], [24], [27], [30]标为false. i=4; 由于prime[4]=false,不在继续筛法步骤。 i=5; 由于pri 阅读全文

posted @ 2013-01-13 23:49 蛇小狼 阅读(240) 评论(0) 推荐(0)

摘要:#!/usr/bin/env python# -*- coding=utf-8 -*- # Implementation of Charikar simhashes in Python# See: http://dsrg.mff.cuni.cz/~holub/sw/shash/#a1 class simhash(): def __init__(self, tokens='', hashbits=128): self.hashbits = hashbits self.hash = self.simhash(tokens) def __str__(self... 阅读全文

posted @ 2013-01-07 20:54 蛇小狼 阅读(373) 评论(0) 推荐(0)

摘要:http://www.yixieshi.com/it/11295.html参考下 阅读全文

posted @ 2013-01-04 17:18 蛇小狼 阅读(120) 评论(0) 推荐(0)

摘要:1)素数 数学类的基本算法大多数属于初等数论范畴,相当大一部分与素数有直接关系,因此 素数是一个很基本又很重要的内容。 我们先来看看怎么判断一个数是否素数。素数的定义为:如果一个数的正因子只有1 和这个数本身,那么这个数就是素数。根据定义,我们立即能得到判断一个数N(大于 1)是否素数的简单的算法:枚举2到N-1之间的整数,判断是否能整除N。 如果n很大,那么上面的程序就要运行比较长的一段时间,那么有没有更快一点的算 法呢?回答是肯定的!因为如果n含有不为1和自身的因子,那么这些因子中必定有不大于 sqrt(n)的(假设n有因子p,1<p<n,如果p<=sqrt(n),那么p 阅读全文

posted @ 2011-11-27 22:17 蛇小狼 阅读(480) 评论(0) 推荐(1)

摘要:很多问题可以分解为简单的迭代,迭代过程中回重复计算一些已经计算过的值,可以把原来计算过的值存放到一个字典中,这样可以大大提高迭代的效率这里以斐波那契数列和背包问题来展现动态编程的应用# MIT600《计算机科学及编程导论》(2008年秋季)样码# 第十三讲# 翻译制作:ocourse.org# 课程讨论版:http://ocourse.org/bbs/forum.php?mod=forumdisplay&fid=29# by yoeo24def fib(n): global numCalls numCalls +=1 #print 'fib调用', n if n< 阅读全文

posted @ 2011-11-26 00:21 蛇小狼 阅读(256) 评论(0) 推荐(0)

摘要:一种是二分查找的使用二分法,在很多排序,查找等问题中经常使用def squareRootBi(x, epsilon): """Assume x >= 0 and epsilon > 0 Return y s.t. y*y is within epsilon of x""" #假设x>=0且ε>0,返回y,使得y*y在x的ε内 assert x >= 0, 'x必须为非负数,而不是' + str(x) assert epsilon > 0, 'ε必须为正数,而不是' + 阅读全文

posted @ 2011-11-26 00:12 蛇小狼 阅读(240) 评论(0) 推荐(0)

摘要:#从一列表中,生成不重复的随机值#算法实现import randomtotal = 100li = [i for i in range(total)]res = []num = 20for i in range(num): t = random.randint(i,total-1) res.append(li[t]) li[t], li[i] = li[i], li[t]print res#python 已经实现这样的方法print random.sample(li, num) 阅读全文

posted @ 2011-06-28 14:55 蛇小狼 阅读(701) 评论(0) 推荐(0)

摘要:#单个字符替换s = 'abcd'a = ["a", "b", "c"]b = ["c", "d", "e"]import strings.translate(string.maketrans(''.join(a),''.join(b)))print s#字符串,改善版s = "hello, i'm mouren, hehe~~,hehe~~mourenmouren"a = ["mouren 阅读全文

posted @ 2011-06-28 14:51 蛇小狼 阅读(284) 评论(0) 推荐(0)