この質問とこの質問は私に少し考えさせられました。長さの配列をソートするためと中のユニークな要素、我々は、配列内の値の数を格納できるようにする必要があります。いくつかの提案がありますが、最悪の場合線形時間でこれを行う方法を探しています。すなわち:
リストの指定されたのを有する要素別個の要素、タプルのリストを決定すべての固有の要素よう要素の数であるで。
私がこれまでに提案してきた(失敗した)アイデアの一部を以下に示します。
- 平衡型二分探索木 -これを使用すると、をツリーに挿入して値を増やす必要があります。挿入後、でツリートラバーサルを実行できます。したがって、合計時間がこれは遅すぎます。
- ハッシュマップ -これにより、 予想される挿入、つまり 予想される時間を取得できます。ただし、これはまだ最悪のケースではありません。
- 空の空間マッピング最小要素と最大要素を見つけます。この範囲をカバーするのに十分なメモリを割り当てます(ただし、初期化しません)。このメモリを基本的にハッシュマップとして使用し、ランダムハッシュを含めて、破損したメモリにアクセスしないようにします。この戦略には問題があります。(1)失敗する可能性が非常に低い確率論的ですが、保証されていません。このようなメモリを使用すると、浮動小数点または整数の制約に制限されます。
- 連想配列 - ハッシュマップやBSTと同様に、使用できる他の多くの連想配列がありますが、これらの制約に一致するものは見つかりません。
たぶん私が見逃している明らかな方法があるかもしれませんが、それは潜在的に不可能かもしれないと私は思います。あなたの考えは何ですか?