有没有人知道如何在C++的链表上运行插值搜索

Does anyone have any idea how to run an interpolation search on a linked list in C++?

本文关键字:链表 运行 插值 搜索 C++ 没有人知道      更新时间:2023-10-16
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。

首先,你必须找到列表的大小。这将需要遍历列表,可能会否定插值搜索的任何好处,除非您的比较速度很慢。

现在,使用插值算法查找索引。将midlow推进到该点。现在确定目标值是小于还是大于mid,并相应地设置low = midhigh = mid。重复此操作,直到找到目标值。您应该能够跟踪剩余范围的大小,而无需再次遍历它。