コード例 #1
0
function binarySearch($array, $key, $low, $high)
{
    if ($low > $high) {
        return -1;
    }
    $middle = (int) (($high + $low) / 2);
    if ($array[$middle] == $key) {
        return $middle;
    } elseif ($array[$middle] > $key) {
        return binarySearch($array, $key, $low, $middle - 1);
    } elseif ($array[$middle] < $key) {
        return binarySearch($array, $key, $middle + 1, $high);
    }
}
コード例 #2
0
function array2DBunarysearch($arr2D, $needle)
{
    $len = count($arr2D);
    $currentMin;
    for ($i = 0; $i < $len; $i++) {
        $currentMin = $arr2D[$i][0];
        if ($currentMin > $needle) {
            continue;
        }
        $j = binarySearch($arr2D[$i], $needle, 0, count($arr2D[$i]) - 1);
        if ($j != -1) {
            return $i . ' ' . $j;
        }
    }
}
コード例 #3
0
ファイル: binary.php プロジェクト: jimmyZRone/test-ssh-key
function binarySearch($arr, $findVal, $leftIndext, $rightIndext)
{
    if ($rightIndext < $leftIndext) {
        echo "查询不到";
        return;
    }
    $middleIndext = round(($leftIndext + $rightIndext) / 2);
    if ($findVal < $arr[$middleIndext]) {
        binarySearch($arr, $findVal, $leftIndext, $middleIndext - 1);
    } else {
        if ($findVal > $arr[$middleIndext]) {
            binarySearch($arr, $findVal, $middleIndext + 1, $rightIndext);
        } else {
            echo "已查询到了 {$middleIndext}";
        }
    }
}
コード例 #4
0
ファイル: binary_search.php プロジェクト: LiosWang/algorithm
function binarySearch($arr, $n, $m1, $n1, $m2, $n2)
{
    $start_row = $m1;
    $start_col = $n1;
    $end_row = $m2;
    $end_col = $n2;
    $i = intval(($m1 + $m2) / 2);
    $j = intval(($n1 + $n2) / 2);
    if (!isset($arr)) {
        return false;
    }
    if ($n < $arr[$m1][$n1] || $n > $arr[$m2][$n2]) {
        return false;
    } elseif ($n == $arr[$m1][$n1] || $n == $arr[$m2][$n2]) {
        return true;
    }
    while (($i != $m1 || $j != $n1) && ($i != $m2 || $j != $n2)) {
        if ($n == $arr[$i][$j]) {
            return true;
        } elseif ($n < $arr[$i][$j]) {
            $m2 = $i;
            $n2 = $j;
            $i = intval(($i + $m1) / 2);
            $j = intval(($j + $n1) / 2);
        } else {
            $m1 = $i;
            $n1 = $j;
            $i = intval(($i + $m2) / 2);
            $j = intval(($j + $n2) / 2);
        }
    }
    //search right
    if ($i < $end_row) {
        $left_result = binarySearch($arr, $n, $i + 1, $start_col, $end_row, $j);
    }
    //search left
    if ($j < $end_col) {
        $right_result = binarySearch($arr, $n, $start_row, $j + 1, $i, $end_col);
    }
    if ($left_result || $right_result) {
        return true;
    } else {
        return false;
    }
}
コード例 #5
0
ファイル: binary1.php プロジェクト: jimmyZRone/test-ssh-key
function binarySearch($arr, $findVal, $leftIndex, $rightIndex)
{
    if ($rightIndex < $leftIndex) {
        echo "查询不到";
        return;
    }
    $middleIndext = round(($leftIndex + $rightIndex) / 2);
    if ($findVal < $arr[$middleIndext]) {
        //函数参数位置不能换   并且参数不能写错了
        binarySearch($arr, $findVal, $leftIndex, $middleIndext - 1);
    } else {
        if ($findVal > $arr[$middleIndext]) {
            binarySearch($arr, $findVal, $middleIndext + 1, $rightIndex);
        } else {
            echo "已查询到了 {$middleIndext}";
        }
    }
}
コード例 #6
0
function binarySearch($arr, $val, $start, $end)
{
    $num = $end - $start;
    if ($num > 1) {
        $average = ceil($num / 2);
        if ($arr[$start + $average] == $val) {
            return $start + $average;
        }
        if ($arr[$start + $average] > $val) {
            return binarySearch($arr, $val, $start, $start + $average - 1);
        }
        return binarySearch($arr, $val, $start + $average, $end);
    }
    if ($arr[$end] >= $val && $arr[$start] < $val) {
        return $end;
    }
    return $start;
}
コード例 #7
0
ファイル: ai-bolit.php プロジェクト: AlexeyManikin/aibolit
function check_whitelist($list, &$snum)
{
    if (empty($list)) {
        return array();
    }
    $file = dirname(__FILE__) . '/AIBOLIT-WHITELIST.db';
    $snum = max(0, @filesize($file) - 1024) / 20;
    echo "\nLoaded " . ceil($snum) . " known files\n";
    sort($list);
    $hash = reset($list);
    $fp = @fopen($file, 'rb');
    if (false === $fp) {
        return array();
    }
    $header = unpack('V256', fread($fp, 1024));
    $result = array();
    foreach ($header as $chunk_id => $chunk_size) {
        if ($chunk_size > 0) {
            $str = fread($fp, $chunk_size);
            do {
                $raw = pack("H*", $hash);
                $id = ord($raw[0]) + 1;
                if ($chunk_id == $id and binarySearch($str, $raw)) {
                    $result[] = $hash;
                }
            } while ($chunk_id >= $id and $hash = next($list));
            if ($hash === false) {
                break;
            }
        }
    }
    fclose($fp);
    return $result;
}
コード例 #8
0
ファイル: algorithm.php プロジェクト: Gliulei/own
            return $mid;
        }
        #中元素比目标大,查找左部
        if ($arr[$mid] > $target) {
            $high = $mid - 1;
        }
        #重元素比目标小,查找右部
        if ($arr[$mid] < $target) {
            $low = $mid + 1;
        }
    }
    #查找失败
    return false;
}
$arr = array(1, 3, 5, 7, 9, 11);
$inx = binarySearch($arr, 1);
var_dump($inx);
function php_explode($delim, $str)
{
    if (!$delim) {
        return false;
    }
    $delim = strval($delim);
    $str = strval($str);
    if (!$delim || !$str) {
        return false;
    }
    $delim_len = strlen($delim);
    $str_len = strlen($str);
    if ($delim_len > $str_len) {
        return false;
コード例 #9
0
ファイル: binarysearch.php プロジェクト: biroa/php_algorithms
 */
/**
 * @param       $x
 * @param array $list
 *
 * @return float|int
 */
function binarySearch($x, array $list)
{
    $left = 0;
    $right = count($list) - 1;
    while ($left <= $right) {
        $mid = floor(($left + $right) / 2);
        echo $mid . ',';
        if ($list[$mid] == $x) {
            return $mid;
        } elseif ($list[$mid] > $x) {
            $right = $mid - 1;
        } elseif ($list[$mid] < $x) {
            $left = $mid + 1;
        }
    }
    return -1;
}
$arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
$find = 8;
var_dump($arr);
echo 'We look for number:' . $find . '<br>';
echo '<b>Binary Search with iteration: </b><br>';
echo '<br>' . binarySearch($find, $arr);
コード例 #10
0
ファイル: note.php プロジェクト: aigouzz/phpExamples
function binarySearch(&$arr, $findVal, $left, $right)
{
    if ($left > $right) {
        return;
    }
    $midIndex = round(($left + $right) / 2);
    if ($arr[$midIndex] > $findVal) {
        binarySearch($arr, $findVal, $left, $midIndex - 1);
    } else {
        if ($arr[$midIndex] < $findVal) {
            binarySearch($arr, $findVal, $midIndex + 1, $right);
        } else {
            return $midIndex;
        }
    }
}
コード例 #11
0
ファイル: test.php プロジェクト: Gliulei/own
/**
 * Created by PhpStorm.
 * User: liulei
 * Date: 16/9/21
 * Time: 下午11:50
 */
function binarySearch($arr = [], $target)
{
    $length = count($arr);
    $low = 0;
    $high = $length - 1;
    while ($low <= $high) {
        $mid = floor(($low + $high) / 2);
        if ($arr[$mid] == $target) {
            return '元素的位置是:' . $mid;
        }
        if ($arr[$mid] > $target) {
            $high = $mid - 1;
        }
        if ($arr[$mid] < $target) {
            $low = $mid + 1;
        }
    }
    return 'Not Found';
}
$arr = [1, 3, 5, 7, 9, 10, 15, 18];
echo binarySearch($arr, 9) . PHP_EOL;
echo binarySearch($arr, 18) . PHP_EOL;
echo binarySearch($arr, 14);