最大ヒープは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を返す
- nums [i]> =nums [2 * i + 2]が真でない場合、
- nums [i]> =nums [2 * i + 1]が真でない場合、
- 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
-
Pythonでヒープが最大ヒープを形成しているかどうかを確認するプログラム
ヒープツリーを表すリストがあるとします。私たちが知っているように、ヒープは完全な二分木です。要素が最大ヒープを形成しているかどうかを確認する必要があります。最大ヒープについて知っているように、すべての要素はその子の両方よりも大きくなります。 したがって、入力がnums =[8、6、4、2、0、3]のような場合、すべての要素が子よりも大きいため、出力はTrueになります。 これを解決するには、次の手順に従います- n:=numsのサイズ 0からn-1の範囲のiの場合、do m:=i * 2 num:=nums [i] m + 1
-
ヒープソート用のPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、ヒープソートの概念を使用して配列を並べ替える必要があります。 ここでは、最大の要素を最後に配置します。これは、配列がソートされるまで繰り返されます。 それでは、以下の実装のソリューションを見てみましょう- 例 # heapify def heapify(arr, n, i): largest = i # largest value l = 2 * i + 1 # left r = 2 * i + 2 #