私はこの醜いアルゴリズムを持っています(はい、それはコンピュータサイエンスコースなので、目的には醜いです)。その複雑さはさまざまな方法で見つけなければなりません。メソッドの1つは後方への置換です。アルゴリズムを見るだけで、その再帰呼び出しごとにインスタンスサイズが3で割られるので、複雑さはlog(n - m)の範囲のどこかにあることは明らかです。床と天井を持つ再帰的なログアルゴリズムの複雑さを見つける
Function WeirdSort(Array[m..n])
if (m < n) then
if (A[m] > A[n]) then
temp = A[m]
A[m] = A[n]
A[n] = temp
end if
if (m + 1 < n) then
index = floor((n - m + 1)/3)
WeirdSort(A[m..n - index])
WeirdSort(A[m + index..n])
WeirdSort(A[m..n - index])
end if
end if
end Function
しかし、私はどのように後方の置換方法を通じてこの答えに到達できるかを理解しようとしています。具体的には、配列のサイズの表示を開始する多数のfloor()とceiling()に対処しようとしています。どのように対処するのですか?
私の本能は、彼らは脇に磨かれていることはできないと言いますが、それは私がやるべきことかもしれません。
また、アレイが既にソートされている場合、アルゴリズムが先に終了しないという事実を考慮すると、最悪の場合と最良の場合が同じだと思いますが、それも間違っている可能性があります。
使用
T(n) = 3*T(2n/3) + 1
は、ご入力いただきありがとうございます。一方、あなたは実際に、逆方向置換方法を使ってその答えに到達するプロセスに関する質問には答えませんでした。あなたはそれについて何か知っていますか? –
@KaitoKidは本当にありません。私はこの方法に慣れていません。 –