Bài 9: Thuật toán tìm kiếm tuyến tính trong php

Ngày đăng: 2024-04-08 20:05:25

Mục lục:

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

           2. 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);  

 

Về bài trước...

                                 Bài tiếp theo...

 

 


Tài liệu lập trình PHP

Bài viết trong cùng chuyên mục

Góc games giải trí



Cờ caro


Butterfly


Lật hình (luyện trí nhớ)

Cờ tướng ONLINE

Xếp hình

Ghép hình

15_PUZZLE

Kill ghosts

Banchim

Planet Defense

Tower game

Tower game

Plapy Bird (NH.Đông)

Vượt chướng ngại vật



0379136392

Thông tin liên hệ: Lê Văn Thuyên - ĐT: 0379136392 ; Gmail: lethuyen0379136392@gmail.com

Comment

 +   Lê Văn Thuyên-0379136392:Cảm ơn quý vị và các bạn đã vào Website của Lê Thuyên! Lê thuyên rất mong nhận được sự góp ý của quý vị và các bạn cho sự phát triển của website này. Xin chân thành cảm ơn!

Trả lời

 *   Dũng Trung-090567448:Lê Văn Thuyên0379136392--->Ok.Anh!

Trả lời

 *   Bé Nguyễn-benguyen@gmail,com:Lê Văn Thuyên0379136392--->Good job!

Trả lời

 +   -:

Trả lời

 +   -:

Trả lời

12268