我想生成一个表,输出dna字母的频率和码字。我应该得到的输出是:
Symbol: T Codeword: 000 Freq: 10
Symbol: T Codeword: 001 Freq: 15
Symbol: T Codeword: 01 Freq: 25
Symbol: T Codeword: 1 Freq: 50
Average VLC codeword length: 1.75 bits per symbol
Average fixed length codeword length: 2 bits per symbol然而,对于平均VLC码字长度,我得到了一个很长的十进制数,对于固定的码字长度也是如此。加上固定长度应该大于VLC,但我的正好相反。我想我实现的日志代码是错误的,但是我到底做错了什么呢?代码如下:
def main():
dnaData = readFile()
dataSymbol = symbol(dnaData)
node = symNode(dataSymbol)
heap = mkHeap(len(node), compareFunc)
dataCollectNode(node, heap)
while heap.size > 1:
n1 = removeMin(heap)
n2 = removeMin(heap)
for element in n1.symbol:
element.code = ('0' + element.code)
for element in n2.symbol:
element.code = ('1' + element.code)
newNode = mkNode((n1.cumFreq+n2.cumFreq),(n1.symbol + n2.symbol))
add(heap, newNode)
print("Variable length code output...")
print("---------------------------------------")
total_different_symbols = 0
heapNode = top(heap)
for element in heapNode.symbol:
print("Symbol: %2s " % element.name, end ='')
print("Codeword: %8s " % element.code, end ='')
print("Frequency: %5d " % element.freq)
temp = int(element.freq)*len(element.code)
total_different_symbols += temp
total_different_symbols = total_different_symbols / heapNode.cumFreq
print("Average VLC codeword length: ", total_different_symbols, " bits per symbols")
average_fixed_length_codeword = log(total_different_symbols)
print("Average fixed length codeword length: ", average_fixed_length_codeword, " bits per symbol")有什么提示吗?
发布于 2014-04-30 09:36:09
明白了,我必须把它改成log(total_different_symbols, 2)
https://stackoverflow.com/questions/23378174
复制相似问题