Danh mục

Giáo trình CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - Chương 2

Số trang: 11      Loại file: pdf      Dung lượng: 140.00 KB      Lượt xem: 12      Lượt tải: 0    
Hoai.2512

Hỗ trợ phí lưu trữ khi tải xuống: 2,000 VND Tải xuống file đầy đủ (11 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Chương 2: KỸ THUẬT TÌM KIẾM (SEARCHING)2.1. Khi qut về tìm kiếmTrong thực tế, khi thao tc, khai thc dữ liệu chng ta hầu như lc no cũng phải thực hiện thao tc tìm kiếm. Việc tìm kiếm nhanh hay chậm ty thuộc vo trạng thi v trật tự của dữ liệu trn đĩ. Kết quả của việc tìm kiếm cĩ thể l khơng cĩ (khơng tìm thấy) hoặc cĩ (tìm thấy). Nếu kết quả tìm kiếm l cĩ tìm thấy thì nhiều khi chng ta cịn phải xc định xem vị trí của phần tử dữ liệu tìm thấy...
Nội dung trích xuất từ tài liệu:
Giáo trình CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - Chương 2 Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi ThuaätChöông 2: KYÕ THUAÄT TÌM KIEÁM (SEARCHING)2.1. Khaùi quaùt veà tìm kieámTrong thöïc teá, khi thao taùc, khai thaùc döõ lieäu chuùng ta haàu nhö luùc naøo cuõng phaûi thöïchieän thao taùc tìm kieám. Vieäc tìm kieám nhanh hay chaäm tuøy thuoäc vaøo traïng thaùi vaø traättöï cuûa döõ lieäu treân ñoù. Keát quaû cuûa vieäc tìm kieám coù theå laø khoâng coù (khoâng tìm thaáy)hoaëc coù (tìm thaáy). Neáu keát quaû tìm kieám laø coù tìm thaáy thì nhieàu khi chuùng ta coøn phaûixaùc ñònh xem vò trí cuûa phaàn töû döõ lieäu tìm thaáy laø ôû ñaâu? Trong phaïm vi cuûa chöôngnaøy chuùng ta tìm caùch giaûi quyeát caùc caâu hoûi naøy.Tröôùc khi ñi vaøo nghieân cöùu chi tieát, chuùng ta giaû söû raèng moãi phaàn töû döõ lieäu ñöôïcxem xeùt coù moät thaønh phaàn khoùa (Key) ñeå nhaän dieän, coù kieåu döõ lieäu laø T naøo ñoù, caùcthaønh phaàn coøn laïi laø thoâng tin (Info) lieân quan ñeán phaàn töû döõ lieäu ñoù. Nhö vaäy moãiphaàn töû döõ lieäu coù caáu truùc döõ lieäu nhö sau: typedef struct DataElement {T Key; InfoType Info; } DataType;Trong taøi lieäu naøy, khi noùi tôùi giaù trò cuûa moät phaàn töû döõ lieäu chuùng ta muoán noùi tôùi giaùtrò khoùa (Key) cuûa phaàn töû döõ lieäu ñoù. Ñeå ñôn giaûn, chuùng ta giaû söû raèng moãi phaàn töûdöõ lieäu chæ laø thaønh phaàn khoùa nhaän dieän.Vieäc tìm kieám moät phaàn töû coù theå dieãn ra treân moät daõy/maûng (tìm kieám noäi) hoaëc dieãnra treân moät taäp tin/ file (tìm kieám ngoaïi). Phaàn töû caàn tìm laø phaàn töû caàn thoûa maõn ñieàukieän tìm kieám (thöôøng coù giaù trò baèng giaù trò tìm kieám). Tuøy thuoäc vaøo töøng baøi toaùn cuïtheå maø ñieàu kieän tìm kieám coù theå khaùc nhau song chung quy vieäc tìm kieám döõ lieäuthöôøng ñöôïc vaän duïng theo caùc thuaät toaùn trình baøy sau ñaây.2.2. Caùc giaûi thuaät tìm kieám noäi (Tìm kieám treân daõy/maûng)2.2.1. Ñaët vaán ñeàGiaû söû chuùng ta coù moät maûng M goàm N phaàn töû. Vaán ñeà ñaët ra laø coù hay khoâng phaàn töûcoù giaù trò baèng X trong maûng M? Neáu coù thì phaàn töû coù giaù trò baèng X laø phaàn töû thöùmaáy trong maûng M?2.2.2. Tìm tuyeán tính (Linear Search)Thuaät toaùn tìm tuyeán tính coøn ñöôïc goïi laø Thuaät toaùn tìm kieám tuaàn töï (SequentialSearch).a. Tö töôûng: Laàn löôït so saùnh caùc phaàn töû cuûa maûng M vôùi giaù trò X baét ñaàu töø phaàn töû ñaàu tieân cho ñeán khi tìm ñeán ñöôïc phaàn töû coù giaù trò X hoaëc ñaõ duyeät qua heát taát caû caùc phaàn töû cuûa maûng M thì keát thuùc. Trang: 8 Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi Thuaätb. Thuaät toaùn: B1: k = 1 //Duyeät töø ñaàu maûng B2: IF M[k] ≠ X AND k ≤ N //Neáu chöa tìm thaáy vaø cuõng chöa duyeät heát maûng B2.1: k++ B2.2: Laëp laïi B2 B3: IF k ≤ N Tìm thaáy taïi vò trí k B4: ELSE Khoâng tìm thaáy phaàn töû coù giaù trò X B5: Keát thuùcc. Caøi ñaët thuaät toaùn: Haøm LinearSearch coù prototype: int LinearSearch (T M[], int N, T X); Haøm thöïc hieän vieäc tìm kieám phaàn töû coù giaù trò X treân maûng M coù N phaàn töû. Neáu tìm thaáy, haøm traû veà moät soá nguyeân coù giaù trò töø 0 ñeán N-1 laø vò trí töông öùng cuûa phaàn töû tìm thaáy. Trong tröôøng hôïp ngöôïc laïi, haøm traû veà giaù trò –1 (khoâng tìm thaáy). Noäi dung cuûa haøm nhö sau: int LinearSearch (T M[], int N, T X) { int k = 0; while (M[k] != X && k < N) k++; if (k < N) return (k); return (-1); }d. Phaân tích thuaät toaùn: - Tröôøng hôïp toát nhaát khi phaàn töû ñaàu tieân cuûa maûng coù giaù trò baèng X: Soá pheùp gaùn: Gmin = 1 Soá pheùp so saùnh: Smin = 2 + 1 = 3 - Tröôøng hôïp xaáu nhaát khi khoâng tìm thaáy phaàn töû naøo coù giaù trò baèng X: Soá pheùp gaùn: Gmax = 1 Soá pheùp so saùnh: Smax = 2N+1 - Trung bình: Soá pheùp gaùn: Gavg = 1 Soá pheùp so saùnh: Savg = (3 + 2N + 1) : 2 = N + 2e. Caûi tieán thuaät toaùn: Trong thuaät toaùn treân, ôû moãi böôùc laëp chuùng ta caàn phaûi thöïc hieän 2 pheùp so saùnh ñeå kieåm tra söï tìm thaáy vaø kieåm soaùt söï heát maûng trong quaù trình duyeät maûng. Chuùng ta coù theå giaûm bôùt 1 pheùp so saùnh neáu chuùng ta theâm vaøo cuoái maûng moät phaàn töû caàm canh (sentinel/stand by) coù giaù trò baèng X ñeå nhaän dieän ra söï heát maûng khi duyeät maûng, khi ñoù thuaät toaùn naøy ñöôïc caûi tieán laïi nhö sau: Trang: 9 Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi Thuaät ...

Tài liệu được xem nhiều: