Python二分查找不同数据规模耗时异常排查:仅返回2097152结果
关于二分查找耗时统计问题的分析与建议
嗨,作为Python新手遇到这种问题太正常啦~首先,缩进错误确实有可能是元凶,但也存在其他可能性,咱们一步步拆解来看:
一、缩进错误的典型场景
如果你的代码里,处理不同数据规模的核心逻辑(比如生成数据集、调用二分查找、计时统计)缩进不对,就会导致只有某一个规模的数据被执行。举个常见的错误例子:
# 错误示例:只有最后一个规模会被处理 import time import random def binary_search(arr, target): left, right = 0, len(arr)-1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 sizes = [1024, 2048, 2097152] for size in sizes: data = list(range(size)) # 这里缩进错了!下面的计时代码不在循环体内 start_time = time.time() binary_search(data, random.randint(0, size-1)) end_time = time.time() print(f"Size {size}: {end_time - start_time}s")
这种情况下,只有最后一个size(也就是2097152)对应的代码会被执行,前面的规模根本没走到计时和打印的步骤。
二、其他可能的原因
除了缩进,还有几种常见情况会导致类似问题:
- 小规模数据耗时极短:比如1024、2048规模的查找耗时可能只有0.0秒,你可能误以为没输出;
- 循环逻辑错误:比如你定义的规模列表里只有2097152这一个有效元素,或者循环的终止条件写错了,导致只遍历到这一个规模;
- 数据生成异常:某些规模的数据生成失败(比如内存不足?不过小规模一般不会),导致后续代码没执行。
三、快速排查建议
- 先查缩进:确保生成数据、调用二分查找、计时、打印结果的所有代码,都在
for size in sizes:的循环体内部(也就是和data = list(range(size))保持同一缩进层级); - 打印中间标记:在循环内先打印一句
print(f"正在处理规模:{size}"),确认所有规模都被遍历到了; - 单独测试小规模:把规模列表改成只有1024,看代码能不能正常输出耗时,排除二分查找本身的问题。
如果能把你的代码片段贴出来,就能更精准定位问题啦~
内容的提问来源于stack exchange,提问作者Muhtasim Ahmed
相关产品推荐
相关产品推荐

