【发布时间】:2019-12-02 01:59:33
【问题描述】:
我很难弄清楚我的算法的时间复杂度。我知道算法的“for”部分将在 O(n) 中运行,但我不确定我的 while 循环。该问题涉及从给定向量创建二叉树。每个节点都根据其值及其在向量中的索引进行评估,因此,基本上,每个后续节点都必须位于前一个节点的右侧,并且根据其值是更大还是更小,它将是子节点或父节点。父节点的子节点的值必须更小。
对于子节点小于要放置的下一个节点的情况,我使用了 while 循环,并且我通过父节点跟进,直到找到要放置新节点的位置。我相信这会在最坏的情况下运行 k-1 次,k 是树的深度,但是我如何将其表示为时间复杂度? O(kn)?那是线性的吗?
for(int i = 0; i < vecteur_source.size(); i++){
if( i == 0){
do bla....
}else if((vecteur_source.at(i) > vecteur_source.at(i-1)) && (m_map_index_noeud.at(i-1)->parent)){
int v = m_map_index_noeud.at(i-1)->parent->index;
while ((vecteur_source.at(i) >= vecteur_source.at(v))){
v = m_map_index_noeud.at(v)->parent->index;
}
}
}
【问题讨论】: