【问题标题】:Scalability in computer algorithm计算机算法的可扩展性
【发布时间】:2019-02-23 06:53:51
【问题描述】:

在计算机编程方面定义可扩展性的因素是什么?如果我的程序正在处理越来越小的数据库,那么我可以说我的程序是可扩展的吗?可伸缩性是否仅根据执行某个程序所需的时间和成本来定义?

【问题讨论】:

  • 在数据挖掘领域,查询的复杂性很重要。如果您在每个数据项之间执行成对比较,则不会扩展,因为比较次数会随着数据集大小的平方而增加。

标签: algorithm computer-science data-mining


【解决方案1】:

可扩展性总是与其他东西相关。所以说一个程序是“可扩展的”是一个草率的术语。

  • 程序可以随着数据库的大小而扩展

  • 程序可以随着(并发)用户的数量而扩展

  • 程序可以根据输入的大小进行缩放

  • ...

“尺度”的含义也没有明确定义。这可能意味着在某些情况下是线性增长,在其他情况下几乎不会增加处理时间......

通常它只是意味着:即使在高负载或用户数量大幅增加的情况下,用户体验也是可以接受的。

因此,如果有人说程序可扩展。 如果情况并不意味着确切的含义,您应该始终询问我的确切含义。

【讨论】:

    【解决方案2】:

    “可扩展性”这个词通常不适用于算法。它适用于系统或应用程序,是指扩展该应用程序或系统的部署以处理不断增加的负载的实用性。

    例如,如果您有一个计费系统在计算机集群上运行,那么当您的客户群扩展 x2、x5、 x10 等,如果您需要的计算机数量与客户数量成正比。

    这样的系统可能具有可扩展性,例如,如果它由 SQL 数据库支持并且事务之间存在大量争用。在这种情况下,您可能无法处理更多用户,只需添加更多计算机,因为他们最终会一直互相等待。

    【讨论】:

    • 谢谢马特。这意味着对计算机程序使用“sacalbility”这个词是完全错误的。
    【解决方案3】:

    您应该能够提供一些明确的关于运行时如何随着更多数据/处理节点而演变的估计。通常,这种增加应该与数据量呈线性关系或至多为 O(n log n),以使算法具有可扩展性。随着节点的数量,您希望在使用 m 个节点时能够将运行时间减少 m。

    基于以上:

    • 插入排序不可用 - O(n²)
    • 合并排序可用 - O(n log n)

    【讨论】: