私はいくつかのオブジェクトのリストを持っており、次の関数によって返される特定の番号の特定のシーケンスで繰り返し処理したいと思います。次のことは、ハッシュ番号のモジュロに基づいて各数値をリストサイズに削除し、シーケンスを生成します。このアルゴリズムを最適化できますか?
def genSeq(hash,n):
l = range(n)
seq = []
while l:
ind = hash % len(l)
seq.append(l[ind])
del l[ind]
return seq
例:私は理解を容易にするためのpythonでアルゴを提示しています[3, 1, 4, 2, 0]
genSeq(53,5)が返されます。私はC++でコードを作成することになっています。 O(n^2)におけるこの形式の複雑さは、ベクトルとリストの両方にあります。 (私達は削除またはアクセスのために支払う)。これはどんなに良くできますか?
あなたの 'l'に適切なデータ構造を使用すると、理論的に' log n'性能が可能になり、 'n log n'となるでしょう。それにもかかわらず、あなたの「n」が本当に大きい場合を除いて、このパフォーマンスの向上は大きいとは思えません。 – Howard
だから、n個の数字をシャッフルしたいのですが? – Zonko
どのデータ構造が適切でしょうか?それはどのようにログに記録されますか? – balki