如何使用回答是和否的 oracle 对每个整数都属于集合 {1,2,3,k} 的 N 个元素的数组进行排序?

How to sort an array of N elements where each integer belongs to the set {1,2,3,,,k} by using an oracle that answers in yes and no?

一个数组有 n 个元素,每个元素都是集合 {1,2,3,k} 中的一个整数。有一个 oracle 以是或否的形式回答关于数组的任何事情。您只能访问 oracle 而不能访问数组。显示数组最多可以按 O(klog(n)) 次查询排序。

由于您知道数组中所有可能的值,因此找出每个可能值的频率就足够了。然后输出正确的1个数,正确的2个数等

您可以在 Theta(k log n) 查询中实现此目的,所有形式为:

  • “元素x的频率是否大于c?”

这相当于对每个 k 频率进行二进制搜索。由于每个元素的频率是 [0, n] 中的整数,因此您最多可以使用 log_2(n+1)+1 个查询进行此二分查找。