Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでk個のマージソート呼び出しを含む配列を検索する


2つの数値aとbがあるとすると、範囲[1、a]の値を含む配列を見つける必要があり、再帰マージソート関数の呼び出しを正確にb回行う必要があります。

したがって、入力がa =10、b =15の場合、出力は[3,1,4,6,2,8,5,9,10,7]

になります。

これを解決するには、次の手順に従います-

  • 関数solve()を定義します。これは、左、右、配列、bを取ります
  • b<1または左+1が右と同じ場合、
    • 戻る
  • b:=b-2
  • mid:=(左+右)/ 2
  • temp:=array [mid-1]
  • array [mid-1]:=array [mid]
  • array [mid]:=temp
  • solve(左、中央、配列、b)
  • solve(mid、right、array、b)
  • メインメソッドから次の手順を実行します-
  • b mod 2が0と同じ場合、
    • 「なし」を表示
    • 戻る
  • array:=サイズn + 1の配列で、0で埋めます
  • array [0]:=1
  • 1からaの範囲のiについては、
    • array [i]:=i + 1
  • b:=b-1
  • resolve(0、a、array、b)
  • 戻り配列、a

理解を深めるために、次の実装を見てみましょう-

def solve(left,right,array,b):
   if (b < 1 or left + 1 == right):
      return
   b -= 2
   mid = (left + right) // 2
   temp = array[mid - 1]
   array[mid-1] = array[mid]
   array[mid] = temp
   solve(left, mid, array, b)
   solve(mid, right, array, b)
def find_arr(a,b):
   if (b % 2 == 0):
      print("None")
      return
   array = [0 for i in range(a + 2)]
   array[0] = 1
   for i in range(1, a):
      array[i] = i + 1
   b -=1
   solve(0, a, array, b)
return array, a
a = 10
b = 15
array, size = find_arr(a, b)
print(array[:size])

入力

10,15

出力

[3, 1, 4, 6, 2, 8, 5, 9, 10, 7]

  1. Pythonでのマージソートについて説明する

    マージソートはソート手法です。これは、時間計算量が( n logn )の効率的な並べ替えアルゴリズムです。 )ここで、nはソートされる配列の長さです。 マージソートは、DivideandConquersパラダイムに従うアルゴリズムです。配列を2つの等しい半分に連続的に分割します。その後、それぞれが1つの要素を持つリストの並べ替えを開始し、並べ替えられたリストを継続的にマージして、完全な並べ替えリストを形成します。 したがって、ソートされた配列を取得します。 例 紫色のボックスと黒い矢印は、リストが2つに分割されていることを示しています。 緑色のボックスと赤い矢印は、並べ替え

  2. マージソート用のPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、マージソートの概念を使用して配列をソートする必要があります ここでは、最大の要素を最後に配置します。これは、配列がソートされるまで繰り返されます。 次に、以下の実装のソリューションを見てみましょう- 例 #merge function def merge(arr, l, m, r):    n1 = m - l + 1    n2 = r- m    # create arrays    L = [0]