タグ付けされた質問 「selection-problem」

4
5つの小さい整数のうち最大の2つをできるだけ早く見つける
小さな組み込みシステムの画像データに5クロスメディアンフィルターのバリエーションを使用します。 x x x x x アルゴリズムは本当にシンプルです。5つの符号なし整数値を読み取り、最高の2を取得し、それらについていくつかの計算を行い、符号なし整数の結果を書き戻します。 5つの整数入力値がすべて0〜20の範囲にあるのはすばらしいことです。計算された整数値も0〜20の範囲です。 プロファイリングを通じて、最大の2つの数値を取得することがボトルネックであることを理解したので、この部分を高速化したいと思います。この選択を実行する最も速い方法は何ですか? 現在のアルゴリズムは、5つの数値とHWがサポートするCLZ関数によって指定された位置に1を持つ32ビットマスクを使用します。 CPUは専有のCPUであり、社外では利用できません。私のコンパイラはGCCですが、このCPU用にカスタマイズされています。 ルックアップテーブルを使用できるかどうかを確認しようとしましたが、使用できるキーを生成できませんでした。 入力には組み合わせがありますが、順序は重要ではありません。つまり、と同じです。21521521^5[5,0,0,0,5][5,5,0,0,0] 以下のハッシュ関数が衝突することなく完全なハッシュを生成することが起こります! def hash(x): h = 0 for i in x: h = 33*h+i return h しかし、ハッシュは巨大であり、それを使用するのに十分なメモリがありません。 私が使用できるより良いアルゴリズムはありますか?ルックアップテーブルを使用してキーを生成することで問題を解決できますか?

2
AVLの中央値。AVLを活用する方法?
これが私の質問の出典です。 自己均衡ツリー(AVL)を指定して、中央値を返すメソッドをコーディングします。 (中央値:データサンプルの上半分と下半分を区切る数値。例:系列が 2、7、4、9、1、5、8、3、6 中央値は5です。) 私は次の解決策を提供できます: 指定されたツリーをトラバースし、要素の数を返します。 木をトラバース n / 2 + 1(n奇数の場合)して、順番にツリーウォークを適用します。値n / 2 + 1番目の要素は、中央値です。 しかし、二分探索木でそれを行うことができますか?AVLに適したアルゴリズムはありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.