1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình cấu trúc dữ liệu và giải thuật

90 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 90
Dung lượng 1,13 MB

Nội dung

BỘ NÔNG NGHIỆP VÀ PHÁT TRIỂN NÔNG THÔN TRƯỜNG CAO ĐẲNG CƠ ĐIỆN VÀ XÂY DỰNG BẮC NINH CHU BÁ CHÍN – TRẦN ĐÌNH LUẬN GIÁO TRÌNH CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT CHUYÊN NGÀNH: CÔNG NGHỆ THÔNG TIN DÀNH CHO TRÌNH ĐỘ: CAO ĐẲNG/TRUNG CẤP Bắc Ninh, Năm- 2023 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin phép dùng nguyên trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm MỤC LỤC TUYÊN BỐ BẢN QUYỀN LỜI NÓI ĐẦU CHƯƠNG 1: THIẾT KẾ VÀ PHÂN TÍCH GIẢI THUẬT 1.1 Mở đầu 1.2 Thiết kế giải thuật 1.3 Một số giải thuật 11 1.3.1 Hoán vị hai phần tử 11 1.3.2 Tìm số lớn nhất, nhỏ 12 1.3.3 Đệ quy 13 1.3.4 Chia để trị 15 BÀI TẬP CHƯƠNG 1: 17 CHƯƠNG 2: CÁC KIỂU DỮ LIỆU CƠ SỞ 18 2.1 Các kiểu liệu 18 2.1.1 Kiểu số 18 2.1.2 Kiểu ký tự, chuỗi 20 2.1.3 Kiểu logic 22 2.2 Kiểu liệu có cấu trúc 22 2.3 Kiểu tập hợp 24 CÂU HỎI VÀ BÀI TẬP CHƯƠNG 27 CHƯƠNG 3: MẢNG, DANH SÁCH VÀ CÁC KIỂU DỮ LIỆU TRỪU TRƯỢNG28 3.1 Mảng 28 3.1.1 Khái niệm 28 3.1.2 Cấu trúc lưu trữ mảng 29 3.2 Danh sách liên kết 32 3.2.1 Danh sách liên kết đơn 35 3.2.2 Danh sách liên kết vòng 41 3.3 Các kiểu liệu trừu tượng 41 3.3.1 Ngăn xếp 41 Khái niệm 41 Ứng dụng ngăn xếp 42 3.3.2 Hàng đợi 52 BÀI TẬP CHƯƠNG 3: 54 CHƯƠNG 4: CÂY 55 4.1 Khái niệm 55 4.2.1 Biểu diễn nhị phân 60 4.2.2 Duyệt nhị phân 60 4.3 Một số toán ứng dụng 63 4.3.1 Cây định 63 4.3.2 Mã nén Huffman 63 BÀI TẬP CHƯƠNG 4: 65 CHƯƠNG 5: SẮP XẾP 66 5.1 Sắp xếp kiểu chọn 67 5.1.1 Ý tưởng 67 5.1.2 Thuật toán 68 5.1.3 Cài đặt thuật toán 68 5.2 Sắp xếp kiểu chèn 69 5.2.1 Ý tưởng 69 5.2.2 Thuật toán 69 5.2.3 Cài đặt thuật toán 70 5.3 Sắp xếp bọt 70 5.3.1 Ý tưởng 70 5.3.2 Thuật toán 71 5.3.3 Cài đặt thuật toán 71 5.4 Sắp xếp hoà nhập 71 5.5 Sắp xếp nhanh 74 5.6 Sắp xếp sử dụng thứ tự phận 79 BÀI TẬP CHƯƠNG 82 CHƯƠNG 6: TÌM KIẾM 83 6.1 Tìm kiếm 84 6.2 Tìm kiếm nhị phân 87 BÀI TẬP CHƯƠNG 89 TÀI LIỆU THAM KHẢO 90 LỜI GIỚI THIỆU Máy tính đời nhằm mục đích xử lý thơng tin theo u cầu người Thông tin, liệu đặc tả mơ tả khác có cấu trúc khác Để máy tính xử lý cần phải nắm cấu trúc Cấu trúc liệu giải thuật môn học sở biên soạn dựa chương trình khung dành cho hệ cao đẳng trung cấp chuyên ngành Cơng nghệ thơng tin Giáo trình biên soạn làm tài liệu học tập, giảng dạy nên giáo trình xây dựng mức độ đơn giản dễ hiểu nhất, có ví dụ tập áp dụng để làm sáng tỏ lý thuyết Khi biên soạn, tác giả dựa kinh nghiệm giảng dạy, tham khảo đồng nghiệp tham khảo nhiều giáo trình có để phù hợp với nội dung chương trình đào tạo phù hợp với mục tiêu đào tạo, nội dung biên soạn gắn với nhu cầu thực tế Nội dung giáo trình gồm có chương: Chương 1: Thiết kế phân tích giải thuật Chương 2: Các kiểu liệu sở Chương 3: Mảng, danh sách kiểu liệu trừu tượng Chương 4: Cây Chương 5: Sắp xếp Chương 6: Tìm kiếm Trong trình giảng dạy biên soạn giáo trình này, tơi ln nhận động viên thầy Ban lãnh đạo nhà trường ý kiến đồng nghiệp trung tâm Ngoại ngữ, Tin học khoa Điện tử, Tin học Tôi xin chân thành cảm ơn hy vọng giáo trình giúp cho việc dạy học môn Cấu trúc liệu giải thuật trường ngày tốt Tuy giáo trình khơng tránh khỏi khiếm khuyết Rất mong nhận ý kiến từ phía bạn đọc để giáo trình hồn chỉnh Bắc Ninh, ngày 18 tháng năm 2023 Tác giả Chu Bá Chín GIÁO TRÌNH MƠN HỌC CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Tên môn học: Cấu trúc liệu giải thuật Mã mơn học: MH12 I Vị trí, tính chất mơn học: - Vị trí: Mơn học bố trí giảng dạy sau mơn học chung Lập trình - Tính chất: Là mơn học sở chuyên ngành II Mục tiêu môn học: - Về kiến thức: + Trình bày mối quan hệ cấu trúc liệu giải thuật việc xây dựng chương trình; + Trình bày ý nghĩa, cấu trúc, cách khai báo, thao tác loại cấu trúc liệu: mảng, danh sách liên kết, giải thuật xử lý cấu trúc liệu đó; - Về kỹ năng: + Xây dựng cấu trúc liệu mô tả tường minh giải thuật cho số toán ứng dụng cụ thể; + Cài đặt số giải thuật ngơn ngữ lập trình C; - Về lực tự chủ trách nhiệm: + Rèn tính nghiêm túc tích cực việc học lý thuyết làm tập, chủ động tìm kiếm nguồn tài liệu liên quan đến môn học làm tảng cho môn học chuyên môn III Nội dung môn học: Nội dung tổng quát phân bổ thời gian: Thời gian (giờ) Thực Số TT Tên chương mục Tổng Lý số thuyết hành, thí Kiểm nghiệm, tra thảo luận, tập Chương 1: Thiết kế phân tích giải thuật Chương 2: Các kiểu liệu sở Chương 3: Mảng, danh sách kiểu liệu trừu tượng 5 5 20 20 Chương 4: Cây 10 10 Chương 5: Sắp xếp 15 15 Chương 6: Tìm kiếm 60 59 Tổng cộng 1 CHƯƠNG 1: THIẾT KẾ VÀ PHÂN TÍCH GIẢI THUẬT Giới thiệu: Để thực nhiệm vụ máy tính đặc biệt lập trình Việc thiết kế phân tích giải thuật vơ quan trọng Trong chương trình: Giải thuật phản ánh phép xử lý, đối tượng xử lý giải thuật lại liệu, liệu chứa đựng thông tin cần thiết để thực giải thuật Để xác định giải thuật phù hợp cần phải biết tác động đến loại liệu (ví dụ để làm nhuyễn hạt đậu , người ta dùng cách xay không băm dao, đậu văng ngồi) chọn lựa cấu trúc liệu cần phải hiểu rõ thao tác tác động đến (ví dụ để biểu diễn điểm số sinh viên người ta dùng số thực thay chuỗi ký cịn phải thực thao tác tính trung bình từ điểm số đó) Mục tiêu: - Trình bày mối quan hệ cấu trúc liệu giải thuật; - Trình bày cách đánh giá độ phức tạp thuật tốn; - Trình bày số giải thuật bản; - Viết tường minh số giải thuật; - Rèn tính nghiêm túc, tỉ mỉ việc học vận dụng vào làm tập Nội dung 1.1 Mở đầu Có thể nói khơng có chương trình máy tính mà khơng có liệu để xử lý Dữ liệu liệu đưa vào (input data), liệu trung gian liệu đưa (output data) Do vậy, việc tổ chức để lưu trữ liệu phục vụ cho chương trình có ý nghĩa quan trọng tồn hệ thống chương trình Việc xây dựng cấu trúc liệu định lớn đến chất lượng cơng sức người lập trình việc thiết kế, cài đặt chương trình 1.2 Thiết kế giải thuật Khái niệm giải thuật hay thuật giải mà nhiều gọi thuật toán dùng để phương pháp hay cách thức (method) để giải vần đề Giải thuật minh họa ngơn ngữ tự nhiên (natural language), sơ đồ (flow chart) mã giả (pseudo code) Trong thực tế, giải thuật thường minh họa hay thể mã giả tựa hay số ngơn ngữ lập trình (thường ngơn ngữ mà người lập trình chọn để cài đặt thuật toán), chẳng hạn C, Pascal,… Khi xác định cấu trúc liệu thích hợp, người lập trình bắt đầu tiến hành xây dựng thuật giải tương ứng theo yêu cầu toán đặt sở cấu trúc liệu chọn Để giải vấn đề có nhiều phương pháp, lựa chọn phương pháp phù hợp việc mà người lập trình phải cân nhắc tính tốn Sự lựa chọn góp phần đáng kể việc giảm bớt cơng việc người lập trình phần cài đặt thuật tốn ngơn ngữ cụ thể Như chương trình máy tính, giải thuật cấu trúc liệu có mối quan hệ chặt chẽ với nhau, thể qua công thức : Cấu trúc liệu + Giải thuật = Chương trình Với cấu trúc liệu chọn, có giải thuật tương ứng, phù hợp Khi cấu trúc liệu thay đổi thường giải thuật phải thay đổi theo để tránh việc xử lý gượng ép, thiếu tự nhiên cấu trúc không phù hợp Hơn nữa, cấu trúc liệu tốt giúp giải thuật xử lý phát huy tác dụng tốt hơn, vừa đáp ứng nhanh vừa tiết kiệm vật tư, giải thuật dễ hiễu đơn giản * Cấu trúc lưu trữ ( Storange structures) + CẤU TRÚC DỮ LIỆU biểu diễn nhớ máy tính cịn gọi Cấu trúc lưu trữ * Giải thuật Khi có mơ hình thích hợp cho tốn ta cần cố gắng tìm cách giải tốn mơ hình Khởi đầu tìm giải thuật, chuỗi hữu hạn thị (instruction) mà thị có ý nghĩa rõ ràng thực lượng thời gian hữu hạn Knuth (1973) định nghĩa giải thuật chuỗi hữu hạn thao tác để giải tốn Các tính chất quan trọng giải thuật là: - Hữu hạn (finiteness): giải thuật phải luôn kết thúc sau số hữu hạn bước - Xác định (definiteness): bước giải thuật phải xác định rõ ràng phải thực xác, quán - Hiệu (effectiveness): thao tác giải thuật phải thực lượng thời gian hữu hạn Ngồi giải thuật cịn phải có đầu vào (input) đầu (output) Nói tóm lại: M ột giải thuật phải giải xong công việc ta cho liệu vào Có nhiều cách để thể giải thuật: dùng lời, dùng lưu đồ, Và lối dùng phổ biến dùng ngôn ngữ giả, kết hợp ngơn ngữ tự nhiên cấu trúc ngơn ngữ lập trình Các tiêu chuẩn đánh giá cấu trúc liệu Để đánh giá cấu trúc liệu thường dựa vào số tiêu chí sau: - Cấu trúc liệu phải tiết kiệm tài nguyên (bộ nhớ trong) - Cấu trúc liệu phải phản ảnh thực tế toán - Cấu trúc liệu phải dễ dàng việc thao tác liệu Đánh giá độ phức tạp thuật toán Việc đánh giá độ phức tạp thuật tốn khơng dễ dàng chút Ở đây, muốn ước lượng thời gian thực thuận tốn T(n) để có so sánh tương đối thuật tốn với Trong thực tế, thời gian thực thuật tốn cịn phụ thuộc nhiều vào điều kiện khác cấu 10 left tăng dừng vị trí mà A[left].key > pivot, cịn biến right giảm dừng lại vị trí mà A[right].key ≤ pivot Khi left < right ta trao đổi giá trị A[left] với A[right] Quá trình lặp lại left > right Lúc ta dễ thấy rằng, thành phần mảng A[a right] có khóa nhỏ hay mốc, cịn thành phần mảng A[left b] có khóa lớn mốc Cuối ta trao đổi A[a] A[right] để đặt mốc vào vị trí k = right Hàm phân hoạch viết sau : void Partition( Item A[] , int a , int b , int & k) { keyType pivot = A[a].key; int left = a + 1; int right = b; { while (( left A[right] = 14 > nên right giảm dừng lại right = 4, A[4] < Ta có hồn cảnh sau : 14 12 17 13 15 right left Đến right < left, ta dừng lại, trao đổi A[0] với A[4] ta thu phân hoạch với k = right = 14 12 17 13 15 k 77 Phân tích xếp nhanh Chúng ta cần đánh giá thời gian chạy T(n) thuật toán xếp nhanh mảng A[a b] có n phần tử, n = b – a + Trước hết ta cần đánh giá thời gian thực hàm phân hoạch Thời gian phân hoạch thời gian qua mảng (hai biến left right chạy từ hai đầu mảng chúng gặp nhau), vị trí mà left right chạy qua ta cần so sánh thành phần vị trí với mốc trao đổi cần thiết Do phân hoạch mảng n phần tử ta cần thời gian O(n) Thời gian trường hợp tốt Trường hợp tốt xảy mà sau lần phân hoạch ta nhận hai mảng Trong trường hợp này, từ hàm đệ quy QuickSort, ta suy quan hệ đệ quy sau : T(1) = O(1) T(n) = T(n/2) + O(n) với n > Đây quan hệ đệ quy mà ta gặp phân tích xếp hịa nhập Như trường hợp tốt thời gian chạy QuickSort O(n logn) Thời gian trường hợp xấu Trường hợp xấu trường hợp mà sau lần phân hoạch mảng n phần tử ta nhận mảng n – phần tử phía mốc, cịn phía khơng có phần tử (Dễ thấy trường hợp xẩy ta phân hoạch mảng sắp) Khi ta có quan hệ đệ quy sau : T(1) = O(1) T(n) = T(n – 1) + O(n) với n > Ta có : T(1) = C T(n) = T(n – 1) + nC với n > Trong C số Bằng cách lặp ta có : T(n) = T(1) + 2C + 3C + … + nC n = C ∑i = Cn(n+1)/2 i=1 Do trường hợp xấu nhất, thời gian chạy xếp nhanh O(n2) 78 5.6 Sắp xếp sử dụng thứ tự phận Trong mục trình bày phương pháp xếp sử dụng thứ tự phận (heapsort) Chúng ta biết thứ tự phận n đỉnh biểu diễn mảng A[0 n-1], gốc lưu A[0], đỉnh lưu A[i], đỉnh trái (nếu có) lưu A[2*i + 1], đỉnh phải có lưu A[2*i + 2] Mảng A thoả mãn tính chất sau (ta gọi tính chất heap): A[i].key = A[n-1].key Trong trình trên, sau lần trao đổi A[0] với A[m] (với m=n1,…,1), ta nhận mảng A[0…m-1] thoả mãn tính chất heap với i >= 1, trừ i = Điều có nghĩa nhị phân biểu diễn mảng A[0 m-1] thoả mãn tính chất thứ tự phận, trừ gốc Để trở thành thứ tự phận, ta cần đẩy liệu lưu gốc xuống vị trí thích hợp cây, cách sử dụng hàm ShiftDown Còn vấn đề cần giải quyết, biến đổi mảng cần xếp A[0 n-1] thành mảng thoả mãn tính chất heap Điều có nghĩa ta phải biến đổi nhị phân biểu diễn mảng A[0 n-1] thành thứ tự phận Muốn vậy, với i chạy từ n/2-1 giảm xuống 0, ta cần sử dụng hàm SiftDown để đẩy liệu lưu đỉnh i xuống vị trí thíc hợp Đây cách xây dựng thứ tự phận mà trình bày 10.3.2 79 Bây ta viết lại hàm ShiftDown cho thích hợp với sử dụng thuật toán Giả sử mảng A[a b] (a < b) thoả mãn tính chất heap với i >= a+1 Hàm ShiftDown(a,b) sau thực việc đẩy A[a] xuống vị trí thích hợp mảng A[a b] để mảng thoả mãn tính chất heap với i >= a void ShiftDown(int a, int b) { int i = a; int j = * i + 1; while (j { for (int i = n / – ; i >= ; i ) ShiftDown(i,n-1); //Biến đổi mảng A[0 n-1] // thành mảng thoả mãn tính chất heap for (int i = n – ; i >= ; i ) { swap(A[0],A[i]); ShiftDown(0,i - 1); } } Phân tích HeapSort Thời gian thực lệnh lặp (1) thời gian xây dựng thứ tự phận mà xét mục 10.3.2 Theo chứng minh đưa 10.3.2, 80 lệnh lặp (1) đòi hỏi thời gian O(n) Trong lệnh lặp (2), số lần lặp n-1 Thân vòng lặp (2), với i = n-1 swap(A[0],A[n - 1]); ShiftDown(0,n - 2); Đây lệnh thực DeleteMin thứ tự phận biểu diễn mảng A[0 n-1], liêụ có khố nhỏ lưu vào A[n-1] Trong mục 10.3.1, ta chứng tỏ DeleteMin cần thời gian O(logn) Như thân lệnh lặp (2) cần thời gian nhiều O(logn) Do lệnh (2) cần thời gian O(nlogn) Vì vậy, thời gian thực HeapSort O(nlogn) 81 BÀI TẬP CHƯƠNG Cho mảng số nguyên (8, 1, 4, 1, 5, 2, 6, 5) Hãy xếp mảng cách sử dụng: a Sắp xếp lựa chọn b Sắp xếp kiểu chèn c Sắp xếp bọt d Sắp xếp nhanh e Sắp xếp hoà nhập f Sắp xếp sử dụng thứ tự phận Hãy đánh giá thời gian chạy thuật toán xếp: a Sắp xếp lựa chọn b Sắp xếp kiểu chèn c Sắp xếp nhanh d Sắp xếp hoà nhập Trong trường hợp sau: a Mảng đầu vào có tất phần tử có khoá b Mảng đầu vào Viết hàm phân hoạch mảng A[a …b] với phần tử chọn làm mốc phần tử đứng mảng, tức phần tử A[(a + b) / 2] Một thuật toán xếp xem ổn định, trật tự phần tử có khố mảng đầu vào mảng kết Trong thuật toán xếp, thuật toán ổn định, thuật toán khơng ổn định? 82 CHƯƠNG 6: TÌM KIẾM Giới thiệu Trong thực tế, thao tác, khai thác liệu lúc phải thực thao tác tìm kiếm Việc tìm kiếm nhanh hay chậm tùy thuộc vào trạng thái trật tự liệu Kết việc tìm kiếm khơng có (khơng tìm thấy) có (tìm thấy) Nếu kết tìm kiếm có tìm thấy nhiều cịn phải xác định xem vị trí phần tử liệu tìm thấy đâu? Trong phạm vi chương tìm cách giải câu hỏi Trước vào nghiên cứu chi tiết, giả sử phần tử liệu xem xét có thành phần khóa (Key) để nhận diện, có kiểu liệu T đó, thành phần cịn lại thông tin (Info) liên quan đến phần tử liệu Như phần tử liệu có cấu trúc liệu sau: typedef { T struct DataElement Key; InfoType } DataType; Info; Trong tài liệu này, nói tới giá trị phần tử liệu muốn nói tới giá trị khóa (Key) phần tử liệu Để đơn giản, giả sử phần tử liệu thành phần khóa nhận diện Việc tìm kiếm phần tử diễn dãy/mảng (tìm kiếm nội) diễn tập tin/ file (tìm kiếm ngoại) Phần tử cần tìm phần tử cần thỏa mãn điều kiện tìm kiếm (thường có giá trị giá trị tìm kiếm) Tùy thuộc vào tốn cụ thể mà điều kiện tìm kiếm khác song việc tìm kiếm liệu thường vận dụng theo thuật toán trình bày sau Mục tiêu: - Trình bày ý tưởng, thuật toán chi tiết số phương pháp tìm kiếm; - Áp dụng số thuật tốn tìm kiếm vào dãy khóa cụ thể; 83 - Cài đặt thuật tốn tìm kiếm ngơn ngữ lập trình C; - Rèn tính nghiêm túc, tỉ mỉ, sáng tạo tác phong công nghiệp Nội dung chính: 6.1 Tìm kiếm Thuật tốn tìm tuyến tính cịn gọi Thuật tốn tìm kiếm (Sequential Search) a Tư tưởng: Lần lượt so sánh phần tử mảng M với giá trị X phần tử tìm đến phần tử có giá trị X duyệt qua hết tất phần tử mảng M kết thúc b Thuật tốn: - B1: k = - B2: if M[k]?? X AND k?? N + B2.1: k++ + B2.2: Lặp lại B2 - B3: IF k?? N Tìm thấy vị trí k - B4: else //Duyệt từ đầu mảng //Nếu chưa tìm thấy chưa duyệt hết mảng Khơng tìm thấy phần tử có giá trị X - B5: Kết thúc c Cài đặt thuật tốn: Hàm LinearSearch có prototype: int LinearSearch (T M[], int N, T X); Hàm thực việc tìm kiếm phần tử có giá trị X mảng M có N phần tử Nếu tìm thấy, hàm trả số nguyên có giá trị từ đến N-1 vị trí tương ứng phần tử tìm thấy Trong trường hợp ngược lại, hàm trả giá trị -1 (khơng tìm thấy) Nội dung hàm sau: 84 int LinearSearch(int a[],int n, int x) { int i=0; while ((i M[Mid]: Rút ngắn phạm vi tìm kiếm nửa sau dãy M (First = Mid+1) Lặp lại trình tìm thấy phần tử có giá trị X phạm vi tìm kiếm khơng cịn (First > Last) b Thuật tốn đệ quy (Recursion Algorithm): - B1: First = - B2: Last = N - B3: if (First > Last) + B3.1: Khơng tìm thấy 87 + B3.2: Thực Bkt - B4: mid = (First + Last)/ - B5: If (X = M[mid]) //Hết phạm vi tìm kiếm + B5.1: Tìm thấy vị trí Mid + B5.2: Thực Bkt - B6: IF (X < M[Mid]) Tìm đệ quy từ First đến Last = Mid - B7: IF (X > M[Mid]) Tìm đệ quy từ First = Mid + đến Last Bkt: Kết thúc c Cài đặt thuật tốn đệ quy: Hàm BinarySearch có prototype: int BinarySearch (T M[], int N, T X); Hàm thực việc tìm kiếm phần tử có giá trị X mảng M có N phần tử có thứ tự tăng Nếu tìm thấy, hàm trả số nguyên có giá trị từ đến N-1 vị trí tương ứng phần tử tìm thấy Trong trường hợp ngược lại, hàm trả giá trị -1 (không tìm thấy) Hàm BinarySearch sử dụng hàm đệ quy RecBinarySearch có prototype: int RecBinarySearch(T M[], int First, int Last, T X); Hàm RecBinarySearch thực việc tìm kiếm phần tử có giá trị X mảng M phạm vi từ phần tử thứ First đến phần tử thứ Last Nếu tìm thấy, hàm trả số ngun có giá trị từ First đến Last vị trí tương ứng phần tử tìm thấy Trong trường hợp ngược lại, hàm trả giá trị -1 (khơng tìm thấy) 88 BÀI TẬP CHƯƠNG Cài đặt lại thuật tốn tìm tuyến tính cách: - Sử dụng vòng lặp for, - Sử dụng vòng lặp … while? Có nhận xét cho trường hợp? Trong trường hợp phần tử dãy có thứ tự tăng, cải tiến lại thuật tốn tìm tuyến tính? Cài đặt thuật tốn cải tiến? Đánh giá so sánh thuật toán nguyên thủy với thuật toán cải tiến Trong trường hợp phần tử dãy có thứ tự giảm, trình bày cài đặt lại thuật tốn tìm nhị phân hai trường hợp: Đệ quy Không đệ quy? Vận dụng thuật tốn tìm nhị phân, cải tiến cài đặt lại thuật tốn tìm kiếm dựa theo tập tin mục? Đánh giá so sánh thuật toán nguyên thủy với thuật toán cải tiến? Sử dụng hàm random C để tạo dãy (mảng) M có tối thiểu 1.000 số nguyên, sau chọn ngẫu nhiên (cũng hàm random) giá trị nguyên K Vận dụng thuật toán tìm tuyến tính, tìm nhị phân để tìm kiếm phần tử có giá trị K mảng M Với liệu nhau, cho biết thời gian thực thuật toán Cho biết thời gian thực hai thuật toán hai trường hợp 89 TÀI LIỆU THAM KHẢO [1] Đỗ Xuân Lôi, (1999), Cấu trúc liệu giải thuật, NXB Thống kê; [2] Hoàng Nghĩa Tý, (2000), Cấu trúc liệu thuật toán, NXB Xây dựng; [3] Robert Sedgewick, (1994), Algorithms, Bản dịch tiếng Việt, NXB Khoa học Kỹ thuật 90

Ngày đăng: 13/07/2023, 14:37

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w