我希望测试Python中两种算法实现(Latent Dirichlet Allocation)的可伸缩性 - gensim 和 lda 。大多数谷歌搜索结果都谈到了网站和基于网络的应用程序的可扩展性。
如何测试简单算法(不是整个系统)的可扩展性?要记住哪些最佳做法?
答案 0 :(得分:1)
看下面的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)
在您的情况下,将算法替换为您自己的算法并运行不同的参数以查看时间复杂度。
答案 1 :(得分:0)
算法的可扩展性由其时间复杂度决定,对于简单算法,它只是计算最大操作数。迭代n个元素的循环具有时间复杂度O(n),这意味着它将像任何线性函数一样缩放,等等。具有嵌套循环的循环将是O(n ^ 2)。