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可以更好地告訴你 –