C++二进制搜索以查找不动点的索引

标签 c++ algorithm binary-search-tree binary-search

我正在实现一个函数,用于查找 A[i] = i 处的不动点。

size_t find_fixed_point(const vector<int>& list)
{
    auto lower = list.begin();
    auto upper = list.end() - 1;

    while (lower < upper)
    {
        auto mid = lower + (upper-lower)/2;

        if ( *mid <= (mid - list.begin()) )
        {
            // keep searching on left side
            upper = mid;
        }
        else
        {
            // keep searching on right side
            lower = mid + 1;
        }
    }

    return lower - list.begin();
}

所以如果我将其应用于以下 vector

    vector<int> numbers = {-10, -5, 1, 3, 13, 13, 50, 70};

auto temp = find_fixed_point(numbers);
cout << numbers[temp];

它应该给出 3 作为固定点,但只给出 -10 是行不通的。

该算法看起来不错,但它不起作用。有人有想法吗?谢谢,

最佳答案

我认为您的比较运算符用错了方式:

size_t find_fixed_point(const vector<int>& list)
{
    auto lower = list.begin();
    auto upper = list.end() - 1;

    while (lower < upper)
    {
        auto mid = lower + (upper-lower)/2;

        if ( *mid >= (mid - list.begin()) )
        {
            // keep searching on left side
            upper = mid;
        }
        else
        {
            // keep searching on right side
            lower = mid + 1;
        }
    }

    return lower - list.begin();
}

关于C++二进制搜索以查找不动点的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18416855/

相关文章:

c++ - 无法打印所有整数值

c++ - std::function 的工作原理

php - Levenshtein - 分组酒店名称

c++ - 当分子和分母都具有受限范围时找到实数的有理近似

java - 在 Java 中展平迭代器的迭代器

data-structures - 哈希表 - 使用二叉搜索树实现

algorithm - 我们是否可以简单地通过将前序遍历中的元素按顺序插入到空树中来从前序遍历构造BST?

c++ - SendMessage 无法将自定义消息发送到主窗口

c++ - Xcode 预处理器宏以包含系统样式 header

linked-list - 将 BST 转换为前序链表和后序链表