3
这里是我的二进制搜索代码:为什么我的二进制搜索运行速度比我在MATLAB中的线性搜索慢?
function result = binarySearch(a, key)
binaryFound = false;
halfIndex = fix(length(a)/2) + 1;
if a(halfIndex) == key
binaryFound = true;
elseif length(a)==1 && a(1)~=key
binaryFound = false;
elseif key > a(halfIndex)
newHalfArray = a(halfIndex+1:end);
binaryFound = binarySearch(newHalfArray, key);
else
newHalfArray = a(1:halfIndex-1);
binaryFound = binarySearch(newHalfArray, key);
end
result = binaryFound;
,这里是我的线性搜索:
function linearFound = linearSearch(a, key)
linearFound = false;
for j=1:length(a)
if a(j) == key
linearFound = true;
end
end
在这两种情况下,“A”是排序的整数数组和“钥匙”是我正在寻找的价值。 在运行多个测试时,使用一系列数组大小和运行时间平均值,我始终发现我的线性搜索比我的二进制搜索更快。我从理论上知道二进制搜索应该更快。我究竟做错了什么?
你可以使用'profile'工具来检查Matlab花费的时间,看看它是算法还是你的实现问题。我想,就你而言,它与内存处理和创建这些'半'阵列有关,但profiler可以更好地告诉你 –