【发布时间】:2015-08-18 11:25:50
【问题描述】:
我希望测试 Python 中算法(潜在狄利克雷分配)的两种实现的可扩展性 - gensim 和 lda。大多数谷歌搜索结果都在谈论网站和基于 Web 的应用程序的可扩展性。
如何测试简单算法(不是整个系统)的可扩展性?要牢记哪些最佳做法?
【问题讨论】:
标签: python algorithm scalability lda
我希望测试 Python 中算法(潜在狄利克雷分配)的两种实现的可扩展性 - gensim 和 lda。大多数谷歌搜索结果都在谈论网站和基于 Web 的应用程序的可扩展性。
如何测试简单算法(不是整个系统)的可扩展性?要牢记哪些最佳做法?
【问题讨论】:
标签: python algorithm scalability lda
算法的可扩展性由其时间复杂度决定,对于简单的算法,只需计算最大操作数即可。遍历 n 个元素的循环具有 O(n) 的时间复杂度,这意味着它将像任何线性函数一样缩放,依此类推。带有嵌套循环的循环将是 O(n^2)。
【讨论】:
看下面的python代码,
import datetime;
s=0
VALUES = [1,10,100,1000,2000,8000]
for VALUE in VALUES:
timebefore = datetime.datetime.now()
#Algorithm starts
for i in range(VALUE):
for j in range(VALUE):
s+=i*j
#Algorithm ends
timeafter = datetime.datetime.now()
print('time taken for parameter:'+str(VALUE)+" is " + str(timeafter - timebefore))
上述程序的输出是
time taken for parameter:1 is 0:00:00
time taken for parameter:10 is 0:00:00
time taken for parameter:100 is 0:00:00
time taken for parameter:1000 is 0:00:00.327280
time taken for parameter:2000 is 0:00:01.285746
time taken for parameter:8000 is 0:00:21.250825
当 n 从 1000 变为 2000(因数 2)时,所用时间大约增加了 4 倍 (1.285746/0.327280)
当 n 从 2000 变为 8000(因数 4)时,所用时间大约增加了 16 倍 (21.250825/1.285746)
所以对于输入参数的n个变化,所花费的时间变化了n^2,因此可以推导出算法的复杂度为O(n^2)
在您的情况下,用您自己的算法替换算法并运行不同的参数以查看时间复杂度。
【讨论】: