ここで非常に醜いの答えだ:検索が最もlogloglogK(loglogK要素にログオン)に取り、K回繰り返すので、2,3のために使用される時間は、O(K * logloglogK)である
1. Take the first interval;
2. Since logK should be small, we allocate logK binary tree nodes, and we place the first element in the middle;
3. For the rest of the elements, we use method similar to binary search to search if it is already included, or we add this element;
4. Produce a sorted list with all the values in the interval;
5. Use Counting Sort with this list on the interval;
6. Do this for all the intervals.
。 4多くの場合、O(loglogK)時間を使用して、値を持つすべてのノードを処理します。 5は、カウントソートと同様にO(K)時間を要します。したがって、合計時間はO(nlogloglogK)にする必要があります。
私は本当に眠くて、私がまっすぐ考えていることを保証することができないので、どんな質問も歓迎されます。
あなたの現在のアプローチでは、バイナリ検索ツリーの深さをソートするためにO(log(log log k))以下であるため、O(n logloglog(k) (k log log log k)と私はこのアプローチが十分に速いと思います。また、n * Xをg(n)* Xに改善するために、あなたの間隔に特定の関係はありません。 n。 –
'n \ k'では、' n/k'を意味しますか?つまり、「nをkで割ったもの」ですか? – Svante
@Svante:ええ、これは私が言ったことです – Numerator