在O(n)时间从Python Iterable中随机均匀地选择n个项目

时间:2014-12-12 04:13:01

标签: python random

我知道这与How do I pick 2 random items from a Python set?

类似

说你有迭代s,random.sample(s,n) 可能会完成这项工作。

是运行时间O(| s |)还是O(n)?

# my investigation Code

import random, time

a = range(100)
c = range(25)
b = map(lambda x: (1, x), a)
print a
print b

N = 1000000

def sampleIterable(items, n):
    t1 = time.clock()
    for _ in xrange(N):
        random.sample(items, n)
    t2 = time.clock()
    print "Time Elapsed = %s sec" % (t2 - t1)
    print

print "====== sampling ======"
sampleIterable(a, 5)
sampleIterable(b, 5)
sampleIterable(c, 5)
print "-----------"
sampleIterable(a, 20)
sampleIterable(b, 20)
sampleIterable(c, 20)
print "-----------"
sampleIterable(set(a), 20)
sampleIterable(set(b), 20)
sampleIterable(set(c), 20)

结果: ======抽样====== 经过的时间= 4.014588秒

经过的时间= 3.56045秒

经过的时间= 3.619019秒


经过的时间= 10.594099秒

经过的时间= 10.277008秒

经过的时间= 9.707444秒


经过的时间= 19.782511秒

经过的时间= 19.71995秒

经过的时间= 10.212379秒

猜测结论是: 是的,它是O(n)而不是O(| S |) 和 从列表中采样比设置更快。

一般情况下,如何查看各种python方法的运行时间?

0 个答案:

没有答案