【发布时间】:2010-06-18 22:37:16
【问题描述】:
基本上,我有大量的 C 结构要跟踪,它们基本上是:
struct Data {
int key;
... // More data
};
我需要定期访问其中的很多(数百个),并且它们必须从最低到最高 key 值排序。密钥不是唯一的,它们将在程序过程中更改。更有趣的是,大多数结构将在排序之前从池中剔除(基于与键值完全无关的标准),但我仍然需要保留对它们的引用。
我研究过使用二叉搜索树来存储它们,但不能保证键是唯一的,而且我不完全确定如何在更改键后重新构建树或如何剔除特定结构。
回顾一下上面不清楚的情况,我需要:
- 存储大量具有非唯一键和动态键的结构。
- 剔除大部分结构(但不要完全释放它们,因为每次都会剔除不同的结构)。
- 将剩余的结构按键值从高到低排序。
您会使用什么数据结构/算法来解决这个问题?该方法需要尽可能快和/或内存效率高,因为这是一个实时应用程序。
编辑:剔除是通过遍历所有对象并为每个对象做出决定来完成的。剔除/分类运行之间的键会发生变化。我应该说它们没有太大变化,但它们确实发生了变化,并且它们可以在剔除/排序运行之间多次更改。 (如果有帮助,每个结构的关键实际上是 Sprite 的 z 顺序。它们需要在每个绘图循环之前进行排序,以便首先绘制 z 顺序较低的 Sprite。)
【问题讨论】:
-
了解键更改的频率会有所帮助:在剔除/排序运行之间的时间里,键的更改比例是多少?他们会改变不止一次吗?
-
另外,剔除是如何完成的?您是否遍历所有对象并对每个对象做出决定?
-
您当然可以实现一棵二叉树,其中键被保证是唯一的。插入时,无论如何您都必须将树向下移动,因此当您到达新密钥所在的位置时,请确保插入点处的密钥与您要插入的密钥不相等。
标签: data-structures