不精确比较的不完整排名算法

时间:2017-03-31 18:51:29

标签: algorithm sorting graph-algorithm

概要

我正在寻找一种算法来对象进行排名。可以比较两个对象。然而,比较是真实世界的比较,可能是有缺陷的。此外,我更关心的是找出最好的对象而不是最差的对象。

动员:

认为我在科学上评估材料。我结合了两种材料。我想找到最好的工作材料进行深入测试。所以,我并不关心那些没有希望的材料。但是,每个测试都可能是假阳性,或者在这两种材料之间存在异常。

精确问题:

  1. 有无限的对象池。
  2. 可以将两个对象相互比较。比较两个对象是非常昂贵的资源。
  3. 考虑其他对象需要花费很多资源。因此,如果一个对象可以完全排名,那么它只应该包含在评估中。
  4. 在测试池中找到最佳对象非常重要。如果一个物体位于下半部分,那么找出它下半部分的位置并不重要。找出确切排名的重要性是一个梯度,顶部更重要。
  5. 大部分时间,如果A> B和B> C,可以安全地假设A> C.有时,有误报。有时A> B和B> C和C>答:这不是一个抽象的数学空间,而是现实世界的测量。
  6. 一开始,不知道允许进行多少次比较。该算法被授予进行另一次比较的许可,直到它不是。因此,必须做出包含其他对象或测试更多已测试对象的决定。
  7. 激励更深层次:

    想象一下,你的任务是聘请一支拳击手团队。你对评估拳击手一无所知,但可以让两个拳击手互相争斗。世界上有无限数量的拳击手。但是飞行它们的成本很高。理想情况下,你想雇用最好的拳击手。实际上,你不知道拳击手是否会接受你的报价。另外,你不知道其他拳击俱乐部竞标的竞争力。你将只向最好的n名拳击手提供优惠,但必须准备好知道接下来会有哪些n名拳击手发送优惠。你只能得到最差的拳击手是不太可能。

    一些方法

    我能想到以下方法。但是,它们都有缺点。我觉得应该有更好的方法。

    1. 使用传统的分类算法
    2. 可以使用传统的排序算法。

      缺点:   - 误报可能会严重影响算法的正确性。   - 排序算法将花费一半时间对包的下半部分进行排序,这是不重要的。   - 排序算法从所有项目开始。有了这个问题,我们可以进行第一次测试,不知道是否允许我们进行第二次测试。我们最终可能只允许做两次测试。或者我们可以被允许进行一百万次测试。

      1. 使用锦标赛算法 有锦标赛的算法。例如,每个人都获得第一场比赛。第一场比赛的胜利者将进入下一轮比赛。有各种比赛策略可以解释人们在第一场比赛中遇到糟糕的一天或与冠军搭档的问题。
      2. 缺点:   - 这似乎很有希望。困难在于找到允许一次添加一个玩家的一个,因为我们可以进行更多的比较。似乎应该有一个高度专业化的解决方案,比标准的锦标赛算法更好。

        1. 二元搜索 我们可以从两个对象开始。每次添加对象时,我们都可以使用二进制搜索在排名中找到它的位置。因为顶部更重要,我们可以使用加权二进制搜索。例如。而不是测试中点,它测试顶部1/3处的点。
        2. 缺点:   - 该算法不能纠正误报。如果早期出现误报,则可能会使整个测试结果出现偏差。

          1. COUNT胜负 可以计算胜负。该算法将通过最少损失的优先级和最多获胜的第二优先级来选择测试对象。这将专注于测试最佳对象。如果一个物体没有损失,它将成为测试的焦点。它会很快得到损失并降低优先级,或者会得到更多的测试,因为它可能是最佳候选人。
          2. 缺点:   - 这种方法非常好,因为它可以纠正误报。它还允许轻松地向测试池添加更多对象。但是,它并不认为对顶级对象的胜利比对底对象的胜利要重要得多。因此,比较被浪费了。

            1. GRAPH 可以将所有对象添加到图形中。图表可以展平。
            2. 缺点:   - 我不知道如何压扁这样一个杂乱的图形,它可能有周期和模糊的终端节点。可能有多个不败的对象。如何在如此凌乱的图表中挑选一名获胜者?如何知道哪种比较最有价值?

              1. SCORING 胜利取决于失败者的等级,胜利可以得分。说A> B,意味着A获得1分。如果C> A,C获得2分,因为A有1分。最后,对象按其拥有的点数进行排名。
              2. 缺点   - 这种方法看起来很有希望,因为很容易将新对象添加到测试对象池中。它还考虑到对顶级对象的胜利应该算得更多。我无法想出确定要点的好方法。第一次比较,获得1分。一旦10,000个对象进入池中,平均获胜将达到5,000点。两项测试的奖励应大致相等。后来的比较压倒了早期的比较,并在不应该被忽略时被忽略。

                有没有人对解决这个问题有好主意?

2 个答案:

答案 0 :(得分:0)

我会搜索一个易于计算的对象值,可以在对象之间进行比较,以提供足够好的近似顺序。您可以准确地将每个新对象与当前最佳对象进行比较,然后使用其计算值将输入符号排序到其余列表中。

最好的总是准确的。其余的顺序取决于您的"值"。

答案 1 :(得分:0)

我建议研究Elo Rating系统及其衍生产品。 (例如Glicko,BayesElo,WHR,TrueSkill等)

因此,您为每个对象分配了初步的评分,然后根据您进行的匹配/比较来更新该值。 (评分的变化越大,结果越出乎意料)

这仍然悬而未决,即如何决定将哪个对象与哪个其他对象进行比较以获取最多信息的问题。为此,我建议研究锦标赛系统和季后赛格式。尽管我怀疑最佳解决方案肯定比这更临时。