C++ 设计了一个基于双键的搜索系统
在一次采访中,我被要求设计一个系统,支持“插入/删除/搜索”由两个键构建的数据:C++ 设计了一个基于双键的搜索系统,c++,algorithm,search,tree,key,C++,Algorithm,Search,Tree,Key,在一次采访中,我被要求设计一个系统,支持“插入/删除/搜索”由两个键构建的数据: k1(`float`) & k2(`uint`) 以上所有操作(插入/删除/搜索)都是基于k1完成的。此外,他们要求我实施: boolsearch2(浮点k1_1,浮点k1_2) 如果存在具有以下内容的元素,则返回true: k1_1=100。所以所有的操作都取O(logn) 这是正确的方法吗?将很高兴听到您的设计。听起来您的解决方案不会在O(log n)中运行search2。例如,如果k1_1是最小值,
k1(`float`) & k2(`uint`)
以上所有操作(插入/删除/搜索)都是基于k1
完成的。此外,他们要求我实施:
boolsearch2(浮点k1_1,浮点k1_2)
如果存在具有以下内容的元素,则返回true:
k1_1=100
。所以所有的操作都取O(logn)
这是正确的方法吗?将很高兴听到您的设计。听起来您的解决方案不会在
O(log n)
中运行search2
。例如,如果k1_1
是最小值,而k1_2
是最大值,则您的解决方案需要在整个树中搜索k2>=100
的条目
在我脑海中,我要做的是创建两个独立的树,其中一个包含
k2=100
的条目。搜索将需要搜索两棵树,但仍然是O(logn)
,因为这只是一个常数因子。然后,只需搜索第二棵树,就可以在O(logn)
中实现search2
。LCA在树中,每个节点都有指向其父节点的指针是O(h)
,其中h
是树的高度。对,但在LCA根目录下的子树中搜索k2>=100的节点是O(n)。