c - 通过重复存储单词的最佳树型

标签 c data-structures tree

我需要在 c 中实现一个数据结构来按顺序重复存储单词(一个包含单词和重复次数的结构),其中单词的重复可以递增或递减。

我需要找到改变它们重复次数的单词,并将其移动到适当的位置(可以有更多重复次数相同的单词)。

我想不出什么是最好的数据结构。我在树上思考,但我需要能够通过重复来改变单词的位置。那么这种问题有树吗?我什么也找不到。

关于如何有效地执行此操作的任何建议或想法?

如有任何帮助,我将不胜感激。谢谢。

最佳答案

我的建议是根本不要使用树。相反,请使用您保持排序的排序数组。保持排序很简单:每当你递增/递减一个重复计数时,你只需要在正确的位置重新插入该元素,这只需要与你需要移动字符串的地方一样多的操作(与在插入排序中)。为了增加计数,这与

//pos is the index of the string within the array
struct node temp = array[pos];
for(; pos + 1 < stringCount && temp.repCount > array[pos + 1].repCount; pos++) {
    array[pos] = array[pos + 1];
}
array[pos] = temp;

只要预期的位置调整平均较小,这可能比任何基于树的方法都快:它避免构建/维护需要大量代码且对缓存不友好的树结构。上面的循环只接触连续的内存,因此尽可能地对缓存友好。

关于c - 通过重复存储单词的最佳树型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30155989/

相关文章:

c - 如何在 linux 中使用 windows sockets 编译程序?

algorithm - 具有相同权重树的霍夫曼编码合并顺序

java - 如何使用 JUNG 绘制树层次结构?

c - 在 C 编程中制作一个 Do-While 循环来询问用户是否希望程序再次运行

java - 将 java 变量数据映射到 C 结构并编写一个 c 兼容文件

c - 字符串未打印

c# - 将 3D 数组的体积展平为 1D 对象数组

data-structures - 什么是树中的节点?

c++ - 编译器找不到结构,我应该包括什么

Python - 如何将二叉树转换为 N 叉树并保持相同的信息