我使用这个二进制搜索函数得到一个较大数据集的索引错误。当我输入一个较小的数据集时,即[1,2,3,4,5]搜索5。算法按预期运行。但是,当我获取下面的文本时,使用空参数列表(delimeter char为“”)调用string对象的split方法,并将字符串拆分为列表值,其中每个元素都是字符串,然后搜索单词“culpa”,我最终会出现以下错误:
索引错误:列表索引超出范围
非常感谢你的帮助。非常感谢。
字符串:1。知识产权是一种权利,是一种精英的权利,是劳动和财富的暂时性权利。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡。
代码:http://ideone.com/TXVfQA
def binary_search(l,skey,start,stop):
length = (stop - start) + 1 # length of search space
middle = start + (length / 2)
mid_val = l[middle]
if skey == mid_val:
return middle
elif skey > middle:
return binary_search(l,skey,(middle + 1),stop)
else:
return binary_search(l,skey,start,(middle - 1))
您从不检查stop
是否小于start
。递归调用将很容易创建该条件。
这个算法有几个问题。
首先,如果您请求的项目小于列表中最小的(skey)
对于列表中未显示元素的情况,您并没有适当的行为。例如,如果未找到元素,则可以返回
None
。您的代码可以这样修复:
def binary_search(l, skey, start, stop):
# possible answer is always in interval [start, stop)
while start + 1 != stop:
middle = (start + stop) // 2
mid_val = l[middle]
if skey < mid_val:
stop = middle
else:
start = middle
return start if l[start] == skey else None
它将发现元素的最后一次出现等于
skey
。它还使用循环而不是递归,从而节省了执行函数所需的时间。
我有一个二进制搜索树,它的每个节点都有两个值。 所以它的节点是这样的。 我已经根据节点的“name”变量的升序在BST中插入了值。所以树的顺序遍历将按“name”的升序返回节点。 现在我想根据“值”变量的升序显示树节点。无需更改原始树。哪种算法/方法对此最有效?
我正在尝试实现一个二叉查找树,但是“搜索”函数对于除了根之外的每个条目都返回了错误的值。 该函数应返回其值与键参数匹配的节点的地址,如果节点不存在,则返回 NULL。 当我运行代码时,我得到以下内容: 我知道每个节点的“左”和“右”指针链接正确,因为“delAll”函数成功删除了所有节点。 将“cout”语句添加到“search”函数表明该函数似乎返回了正确的地址。为什么从主主调用时会打印错误的地
这是理解分而治之算法的练习题。 给你一个N个排序整数的数组。所有元素都是不同的,除了一个元素重复两次。设计一个O(log N)算法来找到那个元素。 我得到这个数组需要被划分,看看下一个索引中是否找到了一个相等的对应项,我相信这是二进制搜索的一种变体。但我找不到任何解决方案或指导。
我和我的搭档正在为数据结构实现二进制搜索树 在我们的测试案例中,我们没有得到我们预期的结果。我们最初创建了一个空的BinarySearchTree,并调用add方法。从这里,我们将一个整数对象(10)传递给该方法。完成此操作后,应该调用递归addItem方法。thisRoot当前应该引用null(因为我们创建了一个空的BinarySearchTree),因此thisRoot现在应该引用新的Bina
问题内容: 我正在编写一个使用二进制搜索树存储数据的程序。在以前的程序中(无关),我能够使用Java SE6随附的实现来实现链表。二进制搜索树是否有类似的东西,还是我需要“从头开始”? 问题答案: 您可以使用。被实现为一棵红黑树,这是一个自平衡二进制搜索树。
问题内容: 有什么方法可以在具有对象的ArrayList中实现二进制搜索?在此示例中,ArrayList将使用字段“ id”进行排序。 如果我应该使用二进制搜索返回具有指定ID的用户,“ User getUserById(ArrayList users,int userid)”将如何?这有可能吗? 问题答案: Java教程的对象排序文章中有一个示例,您可以编写自己的示例以对自定义类型进行比较。 然