[英]Fenwick tree(BIT). Find the smallest index with given cumulative frequency in O(logN)
[英]O(klogn) time algorithm to find kth smallest element from a Fenwick-Tree
我的意思是在O(k log(n))
时间内在Fenwick树中找到第kth
最小的实际频率。
如果我的数据是:
Tree = [1,3,1,10,3]
Actual frequency = [1,2,1,6,3]
因此,第二小的元素将在索引1处。
您需要第k个最小实际频率,我认为如果不对实际频率进行排序就无法确定。 如果只有Fenwick树,则可以计算O(n * log(n))时间中的实际频率序列(因为可以计算O(log(n))中的每个实际频率)(请参阅这里 ),您有n个频率)。 通过quicksort对实际频率序列进行排序需要O(n * log(n)) ,而找到已排序序列的第k个元素需要O(n) (可能存在具有相同实际频率的条目,因此您不能在O(1);但您可以使用线性搜索)。 因此,整个搜索可以在O(n * log(n))中完成。
希望这可以帮助。 我不知道如何在O(k * log(n))中完成此操作。
好吧,我想到了一个可能的解决方案,
while(start<=end){
int mid=(start+end)>>1;
if(read(mid)>=k)end=mid-1; // read(mid) returns the cummulative frequency.
else start=mid+1;
}
开始必须是答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.