折半查詢:先確定待查記錄的所在的範圍,然後逐步縮小範圍直到找到或找不到該記錄為止
**實現:
/**
* @name 線性表查詢
* @use 從線性表中查詢乙個元素
* @param list 線性表
* @param aim 目標元素
* @type order_01|order_02|not_order 線性表為公升序序|線性表為降序|線性表為無序
* @return index 目標元素的下標
*/public static function linerfind($list, $aim, $type)
}return false;
}$low = 0;
$height = count($list) - 1;
if ($type == self::$order_up)
if ($aim > $list[$index]) else
} return false;
}if ($type == self::$order_desc)
if ($aim > $list[$index]) else
} return false;}}
斐波那契查詢:按照斐波那契數列來確定分割點,假設表中記錄個數比某個斐波那契數小於1,即n=fu-1,則查詢分割點為斐波那契數f(u-1)的值,如此將表中記錄分為了n1和n2兩部分,其中n1中元素數目等於斐波那契數f(u-1) - 1 的值,而n2中元素的個數為斐波那契數f(u-2) - 1的值。如果給定值等於n則查詢成功,如果給定值大於n則在n2中進行斐波那契查詢,如果跟定值小於n則在n1中進行斐波那契查詢。
**實現:
/**
* @name 斐波那契查詢
* @use 使用斐波那契查詢法從有序陣列中找目標元素
* @param arr 陣列
* @param aim 目標元素
* @return index|false 目標元素下標|未找到
*/public static function findfibonacci($arr, $aim)
$low = 0;
$height = $num;
$count = 0;
while ($low <= $height)
if ($value >= $num)
}if ($aim == $arr[$index]) else if ($aim > $arr[$index]) else
}return false;
}
演算法 查詢 斐波那契查詢
相對於二分查詢和差值查詢,斐波那契查詢的實現略顯複雜。但是在明白它的主體思想之後,掌握起來也並不太難。既然叫斐波那契查詢,首先得弄明白什麼是斐波那契數列。相信大家對這個著名的數列也並不陌生,無論是c語言的迴圈 遞迴,還是高數的數列,斐波那契數列都是乙個重要的存在。而此處主要是用到了它的一條性質 前乙...
斐波那契查詢演算法
與二分查詢相比,斐波那契查詢演算法的明顯優點在於它只涉及加法和減法運算,而不用除法。因為除法比加減法要占去更多的機時,因此,斐波那契查詢的平均效能要比折半查詢好。include void fibonacci int f int fibonacci search int a,int key,int n...
斐波那契查詢演算法
斐波那契查詢的核心是 1 當key a mid 時,查詢成功 2 當keya mid 時,新的查詢範圍是第mid 1個到第high個,此時範圍個數為f k 2 1個,即陣列右邊的長度,所以要在 f k 2 1 範圍內查詢。如下 1 include2 include 3 include4 includ...