gpt4 book ai didi

c - 没有排序的霍夫曼实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:28:24 24 4
gpt4 key购买 nike

我想在没有排序的情况下实现霍夫曼。这个想法是我添加前两个元素并添加在数组的最后一个获得的结果。例如。

(1) 数据[256]= {1 2 3 4 5}。我们添加前两个元素,我们得到“3”,我们把它放在数组的最后,就像这样 {1 2 3 4 5 3}。这是第一次处决。我的逻辑data[data_size].freq=data[f].freq+data[s].freq; data_size++; 做好。

(2) 现在在第二次执行中,我想将上一次加法获得的结果(位于 locataion data_size)和数组的下一个元素相加。所以这样做的逻辑必须是这样的:data[data_size].freq=data[data_size].freq+data[s].freq;现在结果将是 {1 2 3 4 5 3 **6**}我不需要排序,这必须在没有任何排序的情况下实现。添加的元素必须留在数组的最后一个位置。但是加法必须始终在 data[data_size].freq 处的元素之间(这是通过在第一次执行时将前两个元素相加获得的,并且在第一次执行之后它必须是最后一个元素相加的结果通过添加两个元素中的第一个和奇数位置的元素获得,我的意思是“s”)和data[s].freq(它是“s”位置的元素)。

我有这个想法,但问题是如果我在前两个位置添加(对于第一次执行,我通过在索引 0 和 1 处添加元素来获得数组索引最后一个元素获得的第一个元素),例如:

newItem.freq = data[i].freq + data[j].freq; data[dataSize++]=newItem;

现在我要做的是:

 newItem.freq = data[dataSize].freq + data[j].freq;
here i have problem in writting it's code.

最佳答案

你应该使用优先队列。所有的元素都排在优先队列的第一位。然后,在每一步中,取两个最小的元素,将其合并,并将结果推回队列。

关于c - 没有排序的霍夫曼实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21378703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com