与排序的键值对数组相比,平衡搜索树有什么好处?
What benefit does a balanced search tree provide over a sorted key-value pair array?
public class Entry{
int key;
String value;
}
如果你有一个 Entry 数组。
Entry[]
您可以对该数组进行二进制搜索,以在 O(Log(n)) 中查找、插入或删除条目。我也可以在 O(log(n)).
中进行范围搜索
这很简单。
像红黑平衡搜索树这样比较复杂的数据结构,给我一个简单的排序键值数组有什么用?
如果数据不可变,树就没有任何好处。
数组的唯一好处是参考位置,例如数据靠得很近,CPU 可以缓存它。
因为数组是排序的,查找是O(log n)
如果您添加/删除项目,事情就会发生变化。
对于少量元素,数组更好(更快),这是因为引用的局部性。
对于更多的项目,红黑树(或其他自平衡树)会表现更好,因为数组需要移动元素。
例如插入和删除将花费 O(log n) + huge n/2 进行转换。
public class Entry{
int key;
String value;
}
如果你有一个 Entry 数组。
Entry[]
您可以对该数组进行二进制搜索,以在 O(Log(n)) 中查找、插入或删除条目。我也可以在 O(log(n)).
中进行范围搜索这很简单。
像红黑平衡搜索树这样比较复杂的数据结构,给我一个简单的排序键值数组有什么用?
如果数据不可变,树就没有任何好处。
数组的唯一好处是参考位置,例如数据靠得很近,CPU 可以缓存它。
因为数组是排序的,查找是O(log n)
如果您添加/删除项目,事情就会发生变化。
对于少量元素,数组更好(更快),这是因为引用的局部性。
对于更多的项目,红黑树(或其他自平衡树)会表现更好,因为数组需要移动元素。
例如插入和删除将花费 O(log n) + huge n/2 进行转换。