扁平树作为展开链接列表快速二进制搜索
我有一个树型数据结构,我变成一个排序的扁平列表(展开链接列表数据结构)。现在我想做一个快速的二分搜索,我想到的想法是:每个列表元素存储一个指向另一个元素的指针,该元素是来自原始树结构的MID子元素。为了快速删除,每个元素也可以指向它的“父”。扁平树作为展开链接列表快速二进制搜索
问题:
- 这是已命名的数据结构?它的“官方”名称是什么?
- 关键字aka搜索对于排序插入,删除和随机访问的时间复杂度O(?)是多少?
[编辑]这是这样的结构的半图解表示:
此树(写在JSON表示法):
{ "abc": {
"a": 42,
"b": 43,
"c": 44
},
"d": 45,
"e": {
"f": {
"g": 46,
"h": 47
}
}
}
被整平到该列表: (该“ - > x”表示元素指向索引x处元素的地址) (每个元素存储来自原始树的键和值,如果有的话)
[0] "abc": nil -> 2 [1] "a": 42 -> nil
[2] "b": 43 -> nil
[3] "c": 44 -> nil
[4] "d": 45 -> nil
[5] "e": nil -> 6
[6] "f": nil -> 7
[7] "g": 46 -> nil
[8] "h": 47 -> nil
传说:
[INDEX] "KEY": VALUE -> ADDRESS OF MID CHILD ELEMENT
回答:
如果我理解正确的话,你想一个linked list(或双向链表,如果你还链接到以前的元素)。
关于插入,链接列表的搜索时间为O(n),插入时间为O(1),树的搜索时间和访问时间范围从O(n)到O(log n),具体取决于关于他们如何排序,我会让你see for yourself。最后,如果你使用的是一个O(log n)搜索时间的树,你最好直接使用它,否则它取决于将树变成排序链接需要多长时间列表(可能是O(n))。另外,作为奖励,阅读树的“中”孩子的科学术语被称为“顺序遍历”,而不是预顺序和后顺序遍历。
以上是 扁平树作为展开链接列表快速二进制搜索 的全部内容, 来源链接: utcz.com/qa/265922.html