算法:有没有一种解决比较的好方法?

时间:2010-02-19 05:43:09

标签: algorithm language-agnostic

我有一组要比较的数字。假设我必须从用户那里得到这个比较。我可以选择问他一个由2个数字组成的问题或者3个数字的4个数字。例如,我可以问以下任何一个问题:

  • 哪个数字更大? 2 OR 4
  • 哪个数字更大? 2 OR 3 OR 4
  • 哪个数字更大? 2 OR 3或4或5

我的目标是尽量减少我在一些组合中询问用户的问题数量,这些问题最终会让我对集合中的所有数字进行排序...例如,如果只有4个数字{2,3, 4,5},我可以问他第三种问题,我给他4个数字进行比较。但是在我为此设计的生态系统中,用户对长期问题感到恼火,所以我想尽量减少这类问题的数量。因此,如果每个问题都有一个特定的权重,我试图找到一种方法来最终获得所有数字的排序,但同时给用户带来最小的麻烦。

有解决这个问题的好方法吗?有没有人认为这属于一般类问题,或者我只是把它变得太复杂了?有什么建议吗?

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:2)

如果要对数组进行排序,则通常按O(n log(n))时间排序。这意味着您有时会多次比较数字对。如果您经常询问4个问题,那么您将获得可以存储的额外信息。

当你到达你要求a> b的那个点时,你也可以问{b,c,d,e,...}中最大的一个。这样你就不必问一个> c,a> d等。如果你把这些已知的比较存储在一个表中,那么你再也不用了。至于挑选什么样的比较设置给用户我不确定,这肯定是个好问题。

我对于向用户用户提出问题的集合的直觉是看快速排序的工作原理。它将数据分成两部分,并且永远不会比较不在同一组中的数字,这样您就可以知道什么不能放入集合中来询问用户。尽可能长时间使用4个数字,直到快速排序进入少于4个数字的组。

答案 2 :(得分:1)

您可以执行合并排序或快速排序算法,其中比较函数向用户询问问题的两个数字版本,然后他们必须回答的大多数问题是n log n。

那么问题就在于,问问哪个是3或4中最大的能力会减少你要问的问题的数量。我的直觉说没有,但我很难证明它。

答案 3 :(得分:0)

您可以通过quicksortmergesort的算法提出问题。最大限度地减少比较次数并保证正确的结果。