有没有人知道如何在C++的链表上运行插值搜索
Does anyone have any idea how to run an interpolation search on a linked list in C++?
void List::searchInterpolation(int id){
Node* low = head;
Node* mid;
Node* high = tail;
int lowest = 0;
int middle;
int highest = getLength()-1;
int counter = 0;
while (low->getDato()->getId() <= id && high->getData()->getId() >= id){
middle = lowest + (id - low->getData()->getId()) * (highest - lowest) /
(high->getData()->getId() - low->getData()->getId());
while (middle != counter){
mid = low->getNext();
counter++;
if (mid->getData()->getId() < id){
low = mid;
} else if (mid->getData()->getId() > id){
high = mid;
} else{
cout <<"1"<<endl;
}
if (low->getData()->getId() == id){
cout<<"1"<<endl;
} else{
cout<<"-1"<<endl;
}
}
}
}
嗯,这就是我想出的。我已经测试过了,似乎有一个无限循环。它开始在任何地方给我 -1 和 1。
首先,你必须找到列表的大小。这将需要遍历列表,可能会否定插值搜索的任何好处,除非您的比较速度很慢。
现在,使用插值算法查找索引。将mid
从low
推进到该点。现在确定目标值是小于还是大于mid
,并相应地设置low = mid
或high = mid
。重复此操作,直到找到目标值。您应该能够跟踪剩余范围的大小,而无需再次遍历它。
相关文章:
- 对单向链表进行排序时出现运行时错误
- 合并两个排序链表时运行时出错
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- 插入无限循环运行的单向链表
- 双链表的运行时错误
- 对双向链表进行排序会产生运行时错误
- 使用数组的单向链表:它在运行时崩溃
- 尝试打印链表时出现运行时错误
- 第一次运行程序时出现损坏的双链表错误,后续运行正常
- 在链表运行时插入节点错误
- 尝试拆分循环链表.显示输出但崩溃.在 IDEone 中显示运行时错误
- 第15次循环后出现链表运行时错误
- C++链表/多态性未运行列表函数
- 我想在我的代码中实现一个双重循环链表 - 运行时错误
- 从链表中删除节点会运行,但不会删除任何内容
- 为什么这个简单的链表程序无法正常运行
- 链表重载运算符 = 运行时错误
- 有没有人知道如何在C++的链表上运行插值搜索
- 在C++中实现链表时的运行时(或逻辑)错误
- 在展开的链表上运行大约需要40%的代码运行时间——有什么明显的方法可以优化它吗