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

予想される線形時間でリストからn番目に大きい要素を選択するPythonプログラム


線形時間計算量でリストからn番目に大きい要素を選択する必要がある場合、2つの方法が必要です。最大の要素を見つける1つの方法と、リストを2つの部分に分割する別の方法。この区分は、ユーザーが指定した「i」の値によって異なります。この値に基づいてリストが分割され、最大の要素が決定されます。

以下は同じのデモンストレーションです-

def select_largest(my_list, beg, end, i):
   if end - beg <= 1:
      return my_list[beg]
   pivot_val = start_partition(my_list, beg, end)

   k = end - pivot_val

   if i < k:
      return select_largest(my_list, pivot_val + 1, end, i)
   elif i > k:
      return select_largest(my_list, beg, pivot_val, i - k)

   return my_list[pivot_val]

def start_partition(my_list, beg, end):
   pivot_val = my_list[beg]
   i = beg + 1
   j = end - 1

   while True:
      while (i <= j and my_list[i] <= pivot_val):
         i = i + 1
      while (i <= j and my_list[j] >= pivot_val):
         j = j - 1

      if i <= j:
         my_list[i], my_list[j] = my_list[j], my_list[i]
      else:
         my_list[beg], my_list[j] = my_list[j], my_list[beg]
         return j

my_list = input('Enter the list of numbers.. ')
my_list = my_list.split()
my_list = [int(x) for x in my_list]
i = int(input('Enter the value for i.. '))

ith_largest = select_largest(my_list, 0, len(my_list), i)
print('The result is {}.'.format(ith_largest))

出力

Enter the list of numbers.. 34 67 12 0 999
Enter the value for i.. 1
The result is 999.

説明

  • 「select_largest」という名前のメソッドが定義されています。このメソッドは、リスト、開始、終了を取得し、「i」値がパラメーターとして取得されます。

  • 「i」の値に応じてリストを2つの部分に分割する、「start_partition」という名前の別のメソッドが定義されています。

  • このメソッドは「select_largest」メソッドで呼び出されます。

  • 「select_largest」も同じ関数内で再度呼び出されます。これが再帰の仕組みです。

  • 数字はユーザーからの入力として取得されます。

  • デフォルト値に基づいて分割されます。

  • 繰り返されます。

  • 「i」の値はユーザーから取得されます。

  • この「i」の値に基づいて、リストは2つの部分に分けられます。

  • 「select_largest」メソッドは、リストの1つで呼び出されます。

  • 出力はコンソールに表示されます。


  1. 配列内の最大の要素を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、配列の最大要素を計算する必要があります。 ここでは、ループ全体をトラバースして最大の要素を計算し、要素を取得するブルートフォースアプローチを使用します。 以下の実装を観察できます。 例 # largest function def largest(arr,n):    #maximum element    max = arr[0]    # traverse the whole loop    for

  2. 最大値を持つPythonリストから要素を見つける方法は?

    最大値の要素を見つけるには、リストを引数としてmax()関数を呼び出す必要があります。 max関数は、リストを繰り返し処理して、最後に到達するまで検出した最大値を追跡します。次に、この値を返します。 例 my_list = [2, 3, 1, 5, -1] print(max(my_list)) 出力 これにより、出力が得られます- 5 インデックスとmax要素が発生したすべての場所も必要な場合は、enumerateメソッドを使用できます。 enumerateメソッドは、最初のインデックスにインデックスがあり、2番目にオブジェクトがあるオブジェクトのタプルを作成します。 例 my_list