n
相当の要素(数字や文字列など)のリストが与えられた場合、i
番目の要素を見つける最適なアルゴリズムはO(n)
時間かかります。Pythonのi番目の統計量
PythonはネイティブにO(n)
のリスト、ディクテーション、セットの時間順序統計を実装していますか?
n
相当の要素(数字や文字列など)のリストが与えられた場合、i
番目の要素を見つける最適なアルゴリズムはO(n)
時間かかります。Pythonのi番目の統計量
PythonはネイティブにO(n)
のリスト、ディクテーション、セットの時間順序統計を実装していますか?
Pythonが言及したデータ構造のどれも、i番目の順序統計アルゴリズムをネイティブに実装していません。
実際には、その要素の順序については何も仮定していないことを前提にして、辞書やセットにはあまり意味がないかもしれません。リストについては、O(n)の実行時間を提供するselection algorithmを実装するのは難しいことではありません。
場合、私< < nはあなたが(あなたの問題を解決し、より高速なソートとi番目の要素を取るよりもしていない)http://docs.python.org/library/heapq.html#heapq.nlargestとhttp://docs.python.org/library/heapq.html#heapq.nsmallestを見て与えることができます。
これはネイティブな解決策ではありませんが、NumPyのpartitionを使用すると、O(n)時間のリストのk番目の統計を見つけることができます。
import numpy as np
x = [2, 4, 0, 3, 1]
k = 2
print('The k-th order statistic is:', np.partition(np.asarray(x), k)[k])
EDIT:これは上記ゼロ割り出し、すなわち「ゼロ次統計が」0
であると仮定します。
これは正確ではありません。パーティショニング後、最大値を見つける必要があります。このnp.partition(np.asarray(x)、k)[:k] .max() ' – piRSquared
@ piRSquared、ありがとう。私はそれを1インデックスと解釈したと思いますので、今私はそれを明確にしました。 – Garrett
私のポイントは、 'np.partition'はソートされていないということです。それがそのポイントであり、それがなぜより良いのかです。つまり、ソートされていないため、k番目の順序統計がk番目の位置にあるという保証はありません。私はゼロまたは1つのインデックスに基づいていません。私は時にはあなたのソリューションが間違った答えを出すという事実を指しています。無作為にシャッフルされた整数の集合から0次から36までの5次統計量を求めていたとします。私の例では答えは '1'です。' np.random.seed(0); np.partition(np.random.permutation(np.arange(37))、5)[4] '。答えは「4」でなければなりません。 – piRSquared
downvoterとclosevoterからのコメントをいただければ幸いです。 – Randomblue