【问题标题】:Multi-variate maximization over a table表上的多变量最大化
【发布时间】:2012-10-22 09:57:25
【问题描述】:

我正在寻找一种简单的实现算法,该算法可以找到表中某一列上具有最大值的行。然后,它应该在该特定列上找到值接近最大值的所有行(这两个步骤可以组合吗?)。然后,在选定的行中,我需要找到另一列中具有最小值的行。

奖励:如果有多个这样的条目,我需要在另一列中找到具有最小值的行。

是的,我知道使用 SQL(ite) 很容易做到这一点,但我不想浪费时间将文本文件中的数据解析到数据库表中...

我对如何做到这一点的简单想法感兴趣(伪代码很好),现在,我只能想到这些方面相当复杂的东西:

  • 遍历所有行并找到最大值
  • 遍历所有行并在列表中插入“接近”最大值的行
  • 在新的行列表中找到最小值

【问题讨论】:

    标签: algorithm pseudocode max minimum


    【解决方案1】:

    其实你在做正确的事。除非您的行值已经排序,否则您无法避免在第 1 步中遍历所有值,因此您最终将在那里花费O(R) 时间,其中R 是行数.

    对于第二步,它的成本也是O(R),所以它不会降低算法的复杂性。

    如果我们认为相对于R,“接近最大值”的值的数量是O(1),那么第三步是O(C),其中C 是列数。 如果你的值没有排序,你不能做得比这更好,因为你需要测试所有值才能找到最小值。

    您的算法具有您将获得的最佳复杂性

    【讨论】:

    • 是的,我害怕那个。我并不担心复杂性,因为最多有 30k 行左右,但我必须重新设计我目前正在使用的愚蠢脚本:(
    【解决方案2】:

    我对此的看法:

    • 按行对第一列的表格进行排序
    • 最大值是该排序列中的第一个或最后一个值
    • 所有接近的值都尽可能接近排序列中的最大值
    • 提取这些行
    • 在第二列再次排序
    • 像上面一样找到最小值...
    • 如果有多个这样的条目,请使用第三列再次排序...

    这个速度由使用的排序算法决定。

    【讨论】:

    • 好的,我刚刚意识到你根本不想解析你的数据。如果您仍然想使用数组或其他类似的数据结构,请尝试一下 :)
    • 似乎我无法避免解析它并在内存中再检查一次,所以,是的,解析它并将其插入到有序列表中似乎是一种不错的方法。谢谢!
    • 这个速度是O(nlogn),只有在同一列至少log(n)次进行相同查询时才值得痛苦。这实际上是个坏主意。
    • @alestanis 我讨厌我不得不匆忙做这些事情。感谢您指出复杂性。
    猜你喜欢
    • 2017-02-16
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多