私が最近見たプログラミング課題の一環として、生徒たちはパズルを解くための関数の大きな O 値を見つけるように求められました。退屈だったので、自分でプログラムを書くことにしました。ただし、私のソリューションでは、問題で見たパターンを使用して、計算の大部分をスキップします。
Big O は、スケーリングに基づいて時間がどのように増加するかを示していますが、スケーリングn
としてn
、パターンのリセットに達すると、かかる時間も低い値にリセットされます。私の考えでは、それがO(nlogn % k)
いつk+1
リセットされるかということでした。もう 1 つの考えは、ハード リミットがあるため、値は ですO(1)
。これは、任意の定数の大きな O であるためです。それらの 1 つは正しいですか? そうでない場合、制限はどのように表現されるべきですか?
リセットの例として、k
値は 31336 です。n=31336 では 31336 ステップかかりますが、n=31337 では 1 かかります。
コードは次のとおりです。
def Entry(a1, q):
F = [a1]
lastnum = a1
q1 = q % 31336
rows = (q / 31336)
for i in range(1, q1):
lastnum = (lastnum * 31334) % 31337
F.append(lastnum)
F = MergeSort(F)
print lastnum * rows + F.index(lastnum) + 1
MergeSort
O(nlogn)
複雑な標準マージソートです。