给出一个有种字符组成的字符串,其中第种字符出现的次数为。请你对该字符串应用哈夫曼编码,使得该字符串的长度尽可能短,求编码后的字符串的最短长度。
区块链毕设网qklbishe.com为您提供问题的解答
给出一个有种字符组成的字符串,其中第种字符出现的次数为。请你对该字符串应用哈夫曼编码,使得该字符串的长度尽可能短,求编码后的字符串的最短长度。
def solution():
lines=sys.stdin.readlines()
for i in range(len(lines)):
lines[i]=lines[i].strip().split(" ")
lines[i]=[int(j) for j in lines[i]]
num=lines[0][0]
lines[1].sort()
data=lines[1]
node=[]
for i in data:
n=Node(i)
n.assign_weight()
node.append(n)
while(len(node)>1):
l=node[0]
r=node[1]
n=Node(0)
n.lchild=l
n.rchild=r
n.assign_weight()
node=node[2:]
node.insert(0,n)
node.sort(key=lambda x:x.weight)
wpl=calc_wpl(node[0],level=1)
print(wpl)
def calc_wpl(n,level):
wpl=0
for i in [n.lchild,n.rchild]:
if(Node.is_leaf(i)):
wpl+=i.weight*level
else:
wpl+=calc_wpl(i,level+1)
return(wpl)
class Node():
def __init__(self,weight):
self.lchild=None
self.rchild=None
self.weight=weight
self.parent=None
def assign_weight(self):
for i in [self.lchild,self.rchild]:
if(i is not None):
self.weight+=i.weight
def is_leaf(self):
return(True if self.lchild is None and self.rchild is None else False)
solution()
以上就是关于问题给出一个有种字符组成的字符串,其中第种字符出现的次数为。请你对该字符串应用哈夫曼编码,使得该字符串的长度尽可能短,求编码后的字符串的最短长度。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训