シーケンスハフマンツリー(ブルーブリッジカップパイソン)

問題の説明
  ハフマンツリーには、コーディングに幅広い用途があります。ここでは、ハフマンツリーの構築プロセスのみを考慮します。
  列番号{pi} = {p0、p1、…、pn-1}が与えられた場合、この列番号でハフマンツリーを構築するプロセスは次のとおりです
  。1。{pi}で最小の2つの番号を見つけ、それらをpaとpbとして設定します。 {pi}からpaとpbを削除し、それらの合計を{pi}に追加します。このプロセスのコストは、pa + pbとして記録されます。
  2. {pi}に番号が1つだけ残るまで、手順1を繰り返します。
  上記の操作では、すべてのコストを合計すると、ハフマンツリーを構築するための合計コストが得られます。
  この質問のタスク:与えられたシーケンスについて、シーケンスを使用してハフマンツリーを構築するための総コストを見つけてください。

たとえば、シーケンス{pi} = {5、3、8、2、9}の場合、ハフマンツリーの構築プロセスは次のようになります
  。1。{5、3、8、2、9}で最小の2つの数値を見つけます。 2と3を{pi}から削除し、合計5を加算して{5、8、9、5}を取得します。コストは5です。
  2. {5、8、9、5}で5と5の2つの最小数を見つけ、それらを{pi}から削除し、合計10を{8、9、10}に追加します。コストは10です。 。
  3. {8、9、10}で最小の2つの数値(8と9)を見つけ、それらを{pi}から削除し、合計17を{10、17}に追加します。コストは17です。
  4. {10、17}で最小の2つの数値である10と17を見つけ、それらを{pi}から削除し、合計27を{27}に追加すると、コストは27になります。
  5.これで、シーケンスに残っている番号27は1つだけです。構築プロセスは終了し、合計コストは5 + 10 + 17 + 27 = 59になります。
与えられたシーケンスについて、そのシーケンスでハフマンツリーを構築するための総コストを見つけます

答えは次のとおりです。

n = int(input())
x = [int(i) for i in input().split()]
price=[0 for i in range(0,n-1)]   #创建一个全0的列表,存储每步相加的和
for i in range(0,n-1):
    x.sort()
    price_1 = x.pop(0)   #将排序后最小的数取出来
    price_2 = x.pop(0)
    price[i] = price_1+price_2
    x.append(price[i])  #将和加入列表,继续循环
print(sum(price))

おすすめ

転載: blog.csdn.net/qq_45701131/article/details/105590925