当我想根据两个键排序时,如何获得O(logn)
How do I get a O(log n) when I want to sort according to two keys?
我有一堆节点,按照数据的字母顺序排列在红黑树中。
struct node {
int counter = 1;
string data = nullptr;
int red = 0;
};
我使用了一个平衡的二叉树,因为它有一个大的O(logn)。
如果我尝试插入一个节点,并且数据与任何一个子节点和/或根节点匹配(并且节点没有插入),则节点的计数器会增加。
我想打印出从计数器开始按降序(从高到低)排列的前n(比如说10个)节点。但是,由于节点是根据数据按字母顺序排序的,而不是按计数器排序的,所以我能想到的在未排序列表中搜索的最佳情况是O(n),最坏的情况是使用选择或顺序搜索。
这将使我的大O变成O(n+logn),本质上是一个大O(n)——我希望更快地实现一些目标。
我的问题是,我如何才能实现我想要的大O,也就是说,任何事情,比O(n)更快?
在二叉树中按data
排序的数据就像在一个数组中对基于count
的查询没有特定顺序一样。因此,对于单个查询,您不能做任何比线性更好的事情。如果您计划多次执行查询,那么按计数器排序一个替代结构可能是值得的。如果您所需要支持的只是查询前10名,那么二进制堆将非常有用。如果您计划只执行几个查询,那么性能不会提高太多。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 如何从C++中的依赖类型中获得它所依赖的类型
- 二叉排序树无法编译
- 欧拉项目#8答案是大以获得有效答案
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 如何使用C/C++在MacOSX中获得键盘布局
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何在不产生任何垃圾的情况下获得C中的像素
- 排序算法c++
- 如果我将索引变量更改为零,并且合并函数中的k = 0,则获得合并排序的错误结果
- 提升ASIO-获得排序的端点(首先是IPv4,然后是IPv6)
- 在头文件中移动函数以获得干净的排序
- C# 与 C/C++:我是否需要手动对结构字段进行排序以获得最佳性能
- 在Windows和Linux中运行时获得不同的输出,以便在C++中进行冒泡排序
- 全局排序和每原子变量排序有何不同
- 如何在c++中获得一个自适应排序的整数集合
- 当我想根据两个键排序时,如何获得O(logn)