(Binary Search) PHP ਵਿੱਚ ਬਾਈਨਰੀ ਖੋਜ ਐਲਗੋਰਿਦਮ: ਵਿਆਖਿਆ, ਕਦਮ ਅਤੇ ਉਦਾਹਰਨ

ਬਾਈਨਰੀ ਖੋਜ ਐਲਗੋਰਿਦਮ ਇੱਕ ਕ੍ਰਮਬੱਧ ਐਰੇ ਵਿੱਚ ਇੱਕ ਖਾਸ ਮੁੱਲ ਲੱਭਣ ਲਈ ਇੱਕ ਕੁਸ਼ਲ ਢੰਗ ਹੈ। ਇਹ ਪਹੁੰਚ ਐਰੇ ਨੂੰ ਛੋਟੇ ਭਾਗਾਂ ਵਿੱਚ ਵੰਡਦੀ ਹੈ ਅਤੇ ਲਗਾਤਾਰ ਖੋਜ ਰੇਂਜ ਦੀ ਮੱਧ ਸਥਿਤੀ 'ਤੇ ਮੁੱਲ ਦੀ ਟੀਚਾ ਮੁੱਲ ਨਾਲ ਤੁਲਨਾ ਕਰਦੀ ਹੈ। ਜੇਕਰ ਮੁੱਲ ਮੇਲ ਖਾਂਦੇ ਹਨ, ਤਾਂ ਲੋੜੀਦਾ ਮੁੱਲ ਪਾਇਆ ਜਾਂਦਾ ਹੈ; ਨਹੀਂ ਤਾਂ, ਐਲਗੋਰਿਦਮ ਖੋਜ ਰੇਂਜ ਨੂੰ ਸੰਕੁਚਿਤ ਕਰਨਾ ਜਾਰੀ ਰੱਖਦਾ ਹੈ ਅਤੇ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਉਦੋਂ ਤੱਕ ਦੁਹਰਾਉਂਦਾ ਹੈ ਜਦੋਂ ਤੱਕ ਮੁੱਲ ਨਹੀਂ ਮਿਲ ਜਾਂਦਾ ਜਾਂ ਕੋਈ ਹੋਰ ਤੱਤ ਜਾਂਚਣ ਲਈ ਨਹੀਂ ਬਚਦਾ ਹੈ।

ਕਦਮ:

  1. ਖੋਜ ਰੇਂਜ ਨੂੰ ਸ਼ੁਰੂ ਕਰੋ:  ਐਰੇ ਦੀ ਪਹਿਲੀ ਸਥਿਤੀ ਤੋਂ left  ਆਖਰੀ ਸਥਿਤੀ ਤੱਕ ਖੋਜ ਰੇਂਜ ਨੂੰ ਚੁਣ ਕੇ ਸ਼ੁਰੂ ਕਰੋ । right
  2. ਮੱਧ ਬਿੰਦੂ ਲੱਭੋ: ਔਸਤ left ਅਤੇ ਸਹੀ ਸਥਿਤੀਆਂ ਦੁਆਰਾ ਮੱਧ ਬਿੰਦੂ ਦੀ ਗਣਨਾ ਕਰੋ; ਇਹ ਖੋਜ ਰੇਂਜ ਦਾ ਮੱਧ ਬਿੰਦੂ ਹੈ।
  3. ਮੁੱਲਾਂ ਦੀ ਤੁਲਨਾ ਕਰੋ: ਮਿਡਲ ਪੁਆਇੰਟ 'ਤੇ ਮੁੱਲ ਦੀ ਟੀਚਾ ਮੁੱਲ ਨਾਲ ਤੁਲਨਾ ਕਰੋ।
  4. ਹੈਂਡਲ ਤੁਲਨਾ ਨਤੀਜੇ: ਜੇਕਰ ਮੱਧ ਬਿੰਦੂ 'ਤੇ ਮੁੱਲ ਟੀਚੇ ਦੇ ਮੁੱਲ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ, ਤਾਂ ਇਸ ਸਥਿਤੀ ਨੂੰ ਵਾਪਸ ਕਰੋ। ਜੇਕਰ ਮੱਧ ਬਿੰਦੂ 'ਤੇ ਮੁੱਲ ਟੀਚਾ ਮੁੱਲ ਤੋਂ ਘੱਟ ਹੈ, ਤਾਂ ਸੱਜੇ ਅੱਧ ਨੂੰ ਖੋਜਣ ਲਈ ਖੱਬੀ ਸਥਿਤੀ ਨੂੰ ਮੱਧ + 1 'ਤੇ ਅੱਪਡੇਟ ਕਰੋ। ਜੇਕਰ ਮੱਧ ਬਿੰਦੂ 'ਤੇ ਮੁੱਲ ਟੀਚਾ ਮੁੱਲ ਤੋਂ ਵੱਧ ਹੈ, ਤਾਂ ਖੱਬੇ ਅੱਧ ਨੂੰ ਖੋਜਣ ਲਈ ਮੱਧ- 1 'ਤੇ ਸਹੀ ਸਥਿਤੀ ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ।
  5. ਦੁਹਰਾਓ: ਕਦਮ 2 ਤੋਂ 4 ਤੱਕ ਦੁਹਰਾਓ ਜਦੋਂ ਤੱਕ ਮੁੱਲ ਨਹੀਂ ਮਿਲਦਾ ਜਾਂ ਜਾਂਚ ਕਰਨ ਲਈ ਕੋਈ ਹੋਰ ਤੱਤ ਨਹੀਂ ਹਨ left > right

ਫਾਇਦੇ ਅਤੇ ਨੁਕਸਾਨ

ਲਾਭ:

  • ਕੁਸ਼ਲ ਪ੍ਰਦਰਸ਼ਨ: ਐਲਗੋਰਿਦਮ ਦੀ ਸਮਾਂ ਗੁੰਝਲਤਾ O(log n) ਹੈ, ਜਿਸ ਨਾਲ ਇਹ ਵੱਡੇ ਡੇਟਾਸੇਟਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਬਹੁਤ ਕੁਸ਼ਲ ਬਣਾਉਂਦਾ ਹੈ।
  • ਵੱਡੇ ਡੇਟਾਸੈਟਾਂ ਲਈ ਪ੍ਰਭਾਵੀ: ਬਾਈਨਰੀ ਖੋਜ ਵੱਡੇ ਡੇਟਾਸੈਟਾਂ ਲਈ ਤੇਜ਼ੀ ਨਾਲ ਜਾਂਚ ਕਰਨ ਲਈ ਤੱਤਾਂ ਦੀ ਸੰਖਿਆ ਨੂੰ ਘਟਾਉਣ ਵਿੱਚ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਹੈ।

ਨੁਕਸਾਨ:

  • ਸਿਰਫ਼ ਕ੍ਰਮਬੱਧ ਐਰੇ 'ਤੇ ਲਾਗੂ: ਐਲਗੋਰਿਦਮ ਸਿਰਫ਼ ਕ੍ਰਮਬੱਧ ਐਰੇ 'ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ।
  • ਪੜਾਵਾਂ ਦੀ ਵੇਰੀਏਬਲ ਸੰਖਿਆ: ਮੁੱਲ ਨੂੰ ਲੱਭਣ ਲਈ ਲੋੜੀਂਦੇ ਕਦਮਾਂ ਦੀ ਗਿਣਤੀ ਐਰੇ ਵਿੱਚ ਇਸਦੀ ਸਥਿਤੀ 'ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੈ, ਅਤੇ ਇਹ ਸਿਰੇ ਦੇ ਨੇੜੇ ਮੁੱਲਾਂ ਲਈ ਕਈ ਕਦਮ ਚੁੱਕ ਸਕਦੀ ਹੈ।

ਉਦਾਹਰਨ: PHP ਵਿੱਚ ਕ੍ਰਮਬੱਧ ਐਰੇ ਵਿੱਚ ਮੁੱਲ 12 ਨੂੰ ਲੱਭਣ ਲਈ ਬਾਈਨਰੀ ਖੋਜ

function binarySearch($arr, $target) {  
    $left = 0;  
    $right = count($arr)- 1;  
  
    while($left <= $right) {  
        $mid = floor(($left + $right) / 2);  
  
        if($arr[$mid] == $target) {  
            return $mid; // Return the position of the value  
        } elseif($arr[$mid] < $target) {  
            $left = $mid + 1;  
        } else {  
            $right = $mid- 1;  
        }  
    }  
  
    return -1; // Value not found  
}  
  
$array = [2, 5, 8, 12, 15, 20, 30];  
$targetValue = 12;  
  
$result = binarySearch($array, $targetValue);  
  
if($result != -1) {  
    echo "Value $targetValue found at position $result.";  
} else {  
    echo "Value $targetValue not found in the array.";  
}  

ਉਦਾਹਰਨ ਦੀ ਵਿਆਖਿਆ

  1. ਅਸੀਂ ਸ਼ੁਰੂਆਤੀ ਖੋਜ ਰੇਂਜ ਨੂੰ ਪਹਿਲੀ ਸਥਿਤੀ ਤੋਂ  ਐਰੇ ਦੀ left = 0 ਆਖਰੀ ਸਥਿਤੀ ਤੱਕ ਸ਼ੁਰੂ ਕਰਦੇ ਹਾਂ। right = 6
  2. ਅਸੀਂ ਖੱਬੇ ਅਤੇ ਸੱਜੇ ਸਥਿਤੀਆਂ ਦੀ ਔਸਤ ਦੁਆਰਾ ਮੱਧ ਬਿੰਦੂ(ਮੱਧ) ਦੀ ਗਣਨਾ ਕਰਦੇ ਹਾਂ; mid = 3. ਮੱਧ 'ਤੇ ਮੁੱਲ 12 ਹੈ।
  3. ਅਸੀਂ) 'ਤੇ ਮੁੱਲ ਦੀ mid(12 ਟੀਚਾ ਮੁੱਲ(12) ਨਾਲ ਤੁਲਨਾ ਕਰਦੇ ਹਾਂ ਅਤੇ ਇੱਕ ਮੇਲ ਲੱਭਦੇ ਹਾਂ, ਇਸ ਲਈ ਅਸੀਂ ਸਥਿਤੀ 3 ਵਾਪਸ ਕਰਦੇ ਹਾਂ।
  4. ਐਲਗੋਰਿਦਮ ਖਤਮ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਅਸੀਂ ਨਤੀਜਾ "ਮੁੱਲ 12 ਸਥਿਤੀ 3 'ਤੇ ਪਾਇਆ।"