【问题标题】:PHP sorting array on insert插入时的PHP排序数组
【发布时间】:2017-04-05 14:55:18
【问题描述】:

我正在运行一个使用大量小查询来收集数据的进程。然后我对结果进行排序并输出一个 CSV 文件。

出于多线程的考虑,我想在收集数据时对其进行排序。然后当收集完成后,我可以用 O(1) 读取数据。

PHP 是否有支持这一点的数据结构?

【问题讨论】:

  • 嗯,不是 100% 确定你在问什么。如果 PHP 可以进行多线程处理,那么我认为它不是开箱即用的。这是一个关于这个主题的好问题。 stackoverflow.com/questions/70855/…
  • 为了一些假设的O(1),你想用N排序替换单个排序。当然,这不是优化。
  • 此时,我想说不,我认为使用 php 可以做到 O(n)。但是需要研究并在研究为什么不尝试 JAVA 的同时,也有一些 Python 库。如果您有任何解决方案,请在此处发布,以供参考。
  • 也许最好将所有内容聚合到数据库中的新/临时表中,然后对其进行排序。

标签: php algorithm sorting


【解决方案1】:

您要查找的数据结构是二叉树,其中左孩子小于父节点,右孩子大于父节点。然后一个简单的中序遍历将在O(n) 时间为您提供最后的排序列表,这是最佳的。 (或 O(1) 每个元素。)

您不需要最小堆,因为每次从堆中检索最小值时,您都需要花费 O(log(n)) 时间才能检索下一个最小值,这导致总时间为 O(nlog(n)),你试图避免的。

使用二叉树的困难在于必须确保树保持平衡。否则,每次插入的最坏情况时间复杂度为O(n)O(log(n)) 最坏情况时间算法以在每次插入后保持树平衡而闻名,但不是最简单的算法实现。我在 Google 上进行了快速搜索,似乎 PHP 中已经存在二叉树实现。

这就是所谓的Tree sort 背后的总体思路。

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    相关资源
    最近更新 更多