Học về thuật toán tìm kiếm tuyến tính trong php

Học về thuật toán tìm kiếm tuyến tính trong php là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Học về thuật toán tìm kiếm tuyến tính trong php sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và PHP nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

Trong bài thuật toán sắp xếp nổi bọt tôi đã nói nếu một danh sách được sắp xếp có thứ tự thì việc tìm kiếm trên danh sách đó rất là nhanh, và để chứng minh điều đó thì bắt đầu từ bài này chúng ta sẽ tìm hiểu hai thuật toán đó là tìm kiếm tuyến tính và tìm kiêm nhị phân, từ đó bạn sẽ hiểu nguyên do nếu một mảng được sắp xếp sẵn thì thời gian tìm kiếm sẽ nhanh hơn.

Trong bài này chúng ta sẽ tìm hiểu thuật toán tìm kiếm tuyến tính trước, nội dung bìa học như sau:

  • Tìm kiếm tuyến tính là gì?
  • Các ví dụ tìm kiếm tuyến tính

1. Tìm kiếm tuyến tính là gì?

Tìm kiếm tuyến tính (hay tìm kiếm tuần tự) là một thuật toán tìm kiếm một phần tử cho trước nằm trong một danh sách (có thể là mảng) bằng cách duyệt lần lược các phần tử và so sánh cho đến khi tìm thấy phần tử đó.

Giả sử có mảng $a gồm 50 phần tử, giờ tìm xem số 50 có nằm trong mảng không thì ta sẽ dùng vòng lặp for để duyệt lần lược 50 phần tử đó và so sánh xem có phần tử nào bằng 50 không. Nếu có thì trả kết quả là tìm thấy và dừng vòng lặp, ngược lại nếu lặp hể cả 50 phần tử mà vẫn không có thì sẽ trả kết quả là không tìm thấy.

Tìm kiếm tuyến tính tuần tự là một giải thuật rất đơn giản và dễ cài đặt, giải thuật này tỏ ra khá là nhanh đối với những dữ liệu có kích thước nhỏ vừa phải chưa được sắp thứ tự.

2. Ví dụ tìm kiếm tuyến tính

Trong phần này chúng ta sẽ làm các ví dụ tìm kiếm tuyến tính trong php, qua đó các bạn sẽ hiểu được ý tưởng của nó.

Ví dụ 1: Cho mảng $mang = array(321,312,3,4,5,45,56,5,7,6,787,8,7,2); Hãy viết hàm kiểm tra số 67 có nằm trong mảng không?

Chúng ta sẽ giải bài toán bằng hai cách không dùng hàm và có dùng hàm.

Giải không dùng hàm:

 

$mang = array(321,312,3,4,5,45,56,5,7,6,787,8,7,2);
  
$can_tim = 67;
  
for ($i = 0; $i < count($mang); $i++){ // duyệt qua từng phần tử của mảng
    if ($mang[$i] == $can_tim){ // và so sánh xem có bằng số 67 không, nếu có thì xuất ra màn hình và dừng vòng lặp
        echo 'Số ' . $can_tim . ' có nằm trong mảng tại ví trí thứ ' . $i;
        break;
    }

 

Giải có dùng hàm:

 

// hàm kiểm tra
function kiem_tra($mang, $can_tim)
{
    for ($i = 0; $i < count($mang); $i++){ // duyệt qua từng phần tử của mảng
        if ($mang[$i] == $can_tim){ // và so sánh xem có bằng số 67 không, nếu có thì xuất ra màn hình
            return true; // và không cần làm gì trong hàm này nữa, trả về là đúng luôn
        }
    }
    return false; // sau khi lặp hết mà ko có thì return về false
}
  
// ---------------------- chương trình chính
// Cho mảng
$mang = array(321,312,3,4,5,45,56,5,7,6,787,8,7,2);
  
// biến cần tìm
$can_tim = 67;
  
// gọi hàm và xuất kết quả
if (kiem_tra($mang, $can_tim)){
    echo 'Số ' . $can_tim . ' có nằm trong mảng';
}

 

Ví dụ 2: Cho một mảng gồm các phần tử từ 1 đến 100. Hãy tìm vị trí các số chia hết cho 3 trong dãy

 

// Hàm tìm các số chia hết cho 3
function tim_so_chia_het_cho_3($mang)
{
    foreach ($mang as $key => $val){
        if ($val % 3 == 0){
            echo 'Ví trí thứ ' . $key . '<br/>';
        }
    }
}
  
// Chương trình chính
//-----------------------------------------------
// Lặp từ 1 đến 100 để gán giá trị vào mảng
$mang = array();
for ($i = 1; $i <= 100; $i++){
    $mang[$i] = $i;
}
  
// Gọi hàm để xuất ra vị trí chia hết cho 3
tim_so_chia_het_cho_3($mang);

 

3. Lời kết

Kết thúc bài học này hy vọng các bạn không lúng túng khi gặp một bài toán tìm kiếm nữa nhé, nếu có gặp hãy nhớ đến thuật toán tìm kiếm tuyến tính tại Hoidapcode.com . Bài học tiếp theo chúng ta sẽ học về kỹ thuật đặt lính canh trong php.


Hy vọng với bài viết về Học về thuật toán tìm kiếm tuyến tính trong php đã giải đáp giúp bạn phần nào về kiến thức lập trình PHP. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!