【问题标题】:Scalability of simple algorithms简单算法的可扩展性
【发布时间】:2015-08-18 11:25:50
【问题描述】:

我希望测试 Python 中算法(潜在狄利克雷分配)的两种实现的可扩展性 - gensimlda。大多数谷歌搜索结果都在谈论网站和基于 Web 的应用程序的可扩展性。

如何测试简单算法(不是整个系统)的可扩展性?要牢记哪些最佳做法?

【问题讨论】:

    标签: python algorithm scalability lda


    【解决方案1】:

    算法的可扩展性由其时间复杂度决定,对于简单的算法,只需计算最大操作数即可。遍历 n 个元素的循环具有 O(n) 的时间复杂度,这意味着它将像任何线性函数一样缩放,依此类推。带有嵌套循环的循环将是 O(n^2)。

    更深入的解释:http://en.wikipedia.org/wiki/Time_complexity

    【讨论】:

      【解决方案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)

      在您的情况下,用您自己的算法替换算法并运行不同的参数以查看时间复杂度。

      【讨论】:

      • 因此,在潜在狄利克雷分配的情况下,我需要编写脚本以在不同的语料库上测试这两种算法以及改变参数。但是我要测量什么 - 只是时间、准确性还是其他什么?
      • 尝试改变编号。提供给每个算法的文档,看看代码是如何扩展的。我认为准确性与可扩展性无关。只是时间和空间的问题
      猜你喜欢
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多