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

最大ヒープはPythonですか?


numsと呼ばれる数値のリストがあるとすると、それがmaxheapを表すかどうかを確認する必要があります。これらのルールに従います-

  • nums [i] =nums [2 * i + 1](2 * i + 1が範囲内にある場合)
  • nums [i] =nums [2 * i + 2](2 * i + 2が範囲内にある場合)

したがって、入力が[5、3、4、1、2]の場合、出力はTrueになります

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

  • 0から(numsのサイズ)/ 2の範囲のiの場合、do
    • nums [i]> =nums [2 * i + 1]が真でない場合、
      • Falseを返す
    • if i * 2 + 2 <=(numsのサイズ)-1、then
      • nums [i]> =nums [2 * i + 2]が真でない場合、
        • Falseを返す
  • Trueを返す

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

class Solution:
   def solve(self, nums):
      for i in range(len(nums)//2):
         if not nums[i] >= nums[2*i+1]:
            return False
         if i*2+2 <= len(nums)-1:
            if not nums[i] >= nums[2*i+2]:
               return False
      return True
ob = Solution()
nums = [5, 3, 4, 1, 2]
print(ob.solve(nums))

入力

[5, 3, 4, 1, 2]

出力

True

  1. Pythonでヒープが最大ヒープを形成しているかどうかを確認するプログラム

    ヒープツリーを表すリストがあるとします。私たちが知っているように、ヒープは完全な二分木です。要素が最大ヒープを形成しているかどうかを確認する必要があります。最大ヒープについて知っているように、すべての要素はその子の両方よりも大きくなります。 したがって、入力がnums =[8、6、4、2、0、3]のような場合、すべての要素が子よりも大きいため、出力はTrueになります。 これを解決するには、次の手順に従います- n:=numsのサイズ 0からn-1の範囲のiの場合、do m:=i * 2 num:=nums [i] m + 1

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

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、ヒープソートの概念を使用して配列を並べ替える必要があります。 ここでは、最大の要素を最後に配置します。これは、配列がソートされるまで繰り返されます。 それでは、以下の実装のソリューションを見てみましょう- 例 # heapify def heapify(arr, n, i):    largest = i # largest value    l = 2 * i + 1 # left    r = 2 * i + 2 #