我在我的一些代码中的两个常用程序之间进行了测试,它找到了 n 个顶点上有多少个图,以查看哪种计算生成列表的元素的方法更快。Sage 有一个生成器 graphs(n),它在 n 个顶点上生成所有图。我创建了两个函数,它们以两种不同的方式获取迭代器获得的列表的长度,并使用 time.time() 函数对它们中的每一个进行计时(平均超过 100 次测试运行)。功能如下:
def test_code_list(n):
l = graphs(n)
return len(list(l))
和
def test_code_sum(n):
S = sum(1 for _ in graphs(n))
return S
现在我为每种方法计时
import time
t0 = time.time()
for i in range(100):
test_code_list(5)
t1 = time.time()
avg_time = (t1-t0)/10
print 'average list method time = %s' % avg_time
t0 = time.time()
for i in range(100):
test_code_sum(5)
t1 = time.time()
avg_time = (t1-t0)/100
print "average sum method time = %s" % avg_time
平均列表方法时间 = 0.0391882109642
平均求和方法时间 = 0.0418473792076
因此,以这种方式计算 n=5 个顶点上的图数,list 方法稍微快一些(尽管 100 次测试运行并不是一个很好的样本量)。但是,当我通过在 n=7 个顶点上尝试图形来增加正在计算的列表的长度时(即将图形(5)更改为图形(7)),结果是这样的:
平均列表方法时间 = 4.14753051996
平均求和方法时间 = 3.96504004002
在这种情况下,sum 方法稍微快一些。总而言之,这两种方法的速度大致相同,但差异可能取决于您列表的长度(也可能只是我平均只进行了 100 多次测试,这不是很高 - 会永远花费除此以外)。