如何使用回答是和否的 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
个查询进行此二分查找。
一个数组有 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
个查询进行此二分查找。