【问题标题】:How do I know how long will an algorithm (e.g. k-means) take to run?我怎么知道算法(例如 k-means)需要运行多长时间?
【发布时间】:2014-12-10 11:41:40
【问题描述】:

例如,我在 100 万个数据点上运行 k-means 算法。每个点都是 128 维的,我想要 1000 个簇。 Wikipedia 告诉我它的复杂度是 n^(dk+1)log(n),其中 d 是维数,k 个簇和 n 个实例。 知道了这一点,我如何才能估计它在我的 8-Gb RAM、2.6GHz Intel Core i5 MacBook Pro 上运行多长时间?计算这个估计值的最佳方法是什么?有没有办法从理论上计算它,或者我应该在较小的集合上做一些实验,看看需要多长时间?
我真的很想在花费数小时或数天而不知道何时停止之前进行粗略估计。 非常感谢你的帮助!我真的很感激:)。

附言。我正在使用 python 的 scipy kmeans

【问题讨论】:

  • 1M^128k 大约是10^768000。与宇宙年龄<10^27 纳秒相比。显然,找到最佳解决方案是遥不可及的。你必须接受一些近似值。
  • scipy 是一个实用的库,它可能不使用引用复杂度的算法。在这种情况下,实验可能是可行的方法。

标签: performance algorithm k-means


【解决方案1】:

big-O 常数中隐藏着太多与机器相关和算法相关的细节,以至于理论上无法估计(对于您的机器和您的 SciPy)。

但是,没有什么能阻止您通过实验找到常数 - 正如您所说:“在较小的集合上做一些实验”。

【讨论】:

  • 感谢您的回答。好的,我会做一些实验。但是,我希望能够得到一个非常粗略的估计,不仅适用于 kmeans 算法,而且适用于我知道其复杂性的任何算法。我可以说由于我的处理器每秒可以执行 2.6e9 个周期(假设保守地每个周期执行 1 个操作),我的算法将采用 big-O 除以 2.6e9 吗?再次感谢您的帮助:)
  • 每个周期一次操作 - 过于乐观。看看“en.wikipedia.org/wiki/Cycles_per_instruction”……还有内存访问——有一个多级缓存(L1/L2/L3),速度很快,但访问主内存可能需要数百个周期。
【解决方案2】:

做一些实验。 k-means 之所以受欢迎,只是因为它的运行速度通常比渐近界所暗示的要快得多。

【讨论】:

    猜你喜欢
    • 2015-12-30
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    相关资源
    最近更新 更多