Bài giảng Nhập môn lập trình: Chương 8 - Trường Đại học Ngoại ngữ - Tin học, TP.HCM
Số trang: 62
Loại file: pdf
Dung lượng: 563.09 KB
Lượt xem: 15
Lượt tải: 0
Xem trước 7 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng Nhập môn lập trình: Chương 8 Một số kỹ thuật lập trình cơ bản, cung cấp cho người đọc những kiến thức như: Thuật toán tìm kiếm tuyến tính (Linear Search); Thuật toán tìm max/min; Thuật toán hoán vị; Thuật toán Sắp xếp cơ bản ‐ Interchange Sort;... Mời các bạn cùng tham khảo!
Nội dung trích xuất từ tài liệu:
Bài giảng Nhập môn lập trình: Chương 8 - Trường Đại học Ngoại ngữ - Tin học, TP.HCM Click to edit Master subtitle style MỘT SỐ KỸ THUẬT LẬP TRÌNH CƠ BẢN Khoa Công nghệ thông tin, HUFLIT NỘI DUNG Thuật toán tìm kiếm tuyến tính (Linear Search) Thuật toán tìm max/min Thuật toán hoán vị Thuật toán Sắp xếp cơ bản ‐ Interchange Sort Thuật toán Tìm kiếm nâng cao Kiểm tra mảng thỏa điều kiện THUẬT TOÁN TÌM KIẾM TUYẾN TÍNH (LINEAR SEARCH) Bài toán Cho dãy số nguyên ( ) và số nguyên x. Hãy tìm kiếm xem x có trong dãy a hay không Input: Dòng đầu chứa số n và số x n dòng sau, mỗi dòng là một số nguyên Output: Vị trí của số x trong a (nếu x không có trong a ghi “khong tim thay”) 1. Ý tưởng Xét từng phần tử Nếu thì x có trong a Sau khi chạy mà không có số nào thỏa thì x không có trong dãy a 2. Thuật toán Bước 1: Khởi gán i = 0 Bước 2: So sánh a[i] với giá trị x cần tìm, có 2 khả năng xảy ra a[i] == x , tìm thấy x. Dừng; a[i] != x , chuyển sang bước 3 Bước 3: i = i + 1 , xét tiếp phần tử kế tiếp trong mảng Nếu i == N , hết mảng. Dừng hoặc kết luận “Không tìm thấy”; Ngược lại: lặp lại Bước 2; 3. Ví dụ Cho mảng a có 8 phần tử: 18 5 6 9 10 6 15 1 Giá trị cần tìm: x = 9 i=0 x=9 18 5 6 9 10 6 15 1 3. Ví dụ i=1 x=9 18 5 6 9 10 6 15 1 i=2 x=9 18 5 6 9 10 6 15 1 3. Ví dụ i=3 x=9 18 5 6 9 10 6 15 1 3. Cài đặt int LinearSearch (int a[], int x) { for (int i = 0; i < a.length; i++) { if (a[i] == x) return i ; //a[i] là phần tử có khóa x } return -1; //tìm hết mảng nhưng không có x } 4. Kết luận Giải thuật tìm kiếm tuyến tính không phụ thuộc vào thứ tự các phần tử trong danh sách Đây là phương pháp tổng quát nhất để tìm kiếm trên một danh sách bất kỳ Đối với mảng có thứ tự, thuật toán này chưa tối ưu vì không tận dụng được tính chất thứ tự của các phần tử trong mảng THUẬT TOÁN TÌM GIÁ TRỊ MAX/MIN – HOÁN VỊ 1. Tìm giá trị max Ý tưởng Khởi tạo giá trị max = a1 Lần lượt với i từ 2 đến n, so sánh giá trị số hạng ai với giá trị max, nếu ai > max thì max nhận giá trị mới là ai 1. Tìm giá trị max Sơ đồ flowchart 1. Tìm giá trị max • Thuật toán: Bước 1: Nhận n và dãy a1, a2, …, an ; Bước 2: max a1 , i 2; Bước 3: Nếu i > n thì đưa ra giá trị max rồi kết thúc; Bước 4: 4.1. Nếu ai > max thì max ai ; 4.2. i i +1 rồi quy lại bước 3; 2. Tìm giá trị min Ý tưởng Tương tự như phần Tìm giá trị max Khởi tạo giá trị min = a1 Lần lượt với i từ 2 đến n, so sánh giá trị số hạng ai với giá trị min, nếu ai 3. Hoán vị Cài đặt void swap (int x, int y) { int temp; temp = x; x = y; y = temp; } THUẬT TOÁN SẮP XẾP INTERCHANGE SORT 1. Ý tưởng Xuất phát từ đầu mảng, tìm tất cả các cặp phần tử không theo thứ tự , triệt tiêu chúng bằng cách đổi chỗ phần tử này với phần tử tương ứng trong cặp. Lặp lại xử lý trên với các phần tử tiếp theo trong dãy 2. Thuật toán Bước 1: Khởi tạo i = 0 //bắt đầu từ đầu dãy Bước 2: j = i + 1; //tìm các cặp phần tử a[j] < a[i], j> i Bước 3: Trong khi j
Nội dung trích xuất từ tài liệu:
Bài giảng Nhập môn lập trình: Chương 8 - Trường Đại học Ngoại ngữ - Tin học, TP.HCM Click to edit Master subtitle style MỘT SỐ KỸ THUẬT LẬP TRÌNH CƠ BẢN Khoa Công nghệ thông tin, HUFLIT NỘI DUNG Thuật toán tìm kiếm tuyến tính (Linear Search) Thuật toán tìm max/min Thuật toán hoán vị Thuật toán Sắp xếp cơ bản ‐ Interchange Sort Thuật toán Tìm kiếm nâng cao Kiểm tra mảng thỏa điều kiện THUẬT TOÁN TÌM KIẾM TUYẾN TÍNH (LINEAR SEARCH) Bài toán Cho dãy số nguyên ( ) và số nguyên x. Hãy tìm kiếm xem x có trong dãy a hay không Input: Dòng đầu chứa số n và số x n dòng sau, mỗi dòng là một số nguyên Output: Vị trí của số x trong a (nếu x không có trong a ghi “khong tim thay”) 1. Ý tưởng Xét từng phần tử Nếu thì x có trong a Sau khi chạy mà không có số nào thỏa thì x không có trong dãy a 2. Thuật toán Bước 1: Khởi gán i = 0 Bước 2: So sánh a[i] với giá trị x cần tìm, có 2 khả năng xảy ra a[i] == x , tìm thấy x. Dừng; a[i] != x , chuyển sang bước 3 Bước 3: i = i + 1 , xét tiếp phần tử kế tiếp trong mảng Nếu i == N , hết mảng. Dừng hoặc kết luận “Không tìm thấy”; Ngược lại: lặp lại Bước 2; 3. Ví dụ Cho mảng a có 8 phần tử: 18 5 6 9 10 6 15 1 Giá trị cần tìm: x = 9 i=0 x=9 18 5 6 9 10 6 15 1 3. Ví dụ i=1 x=9 18 5 6 9 10 6 15 1 i=2 x=9 18 5 6 9 10 6 15 1 3. Ví dụ i=3 x=9 18 5 6 9 10 6 15 1 3. Cài đặt int LinearSearch (int a[], int x) { for (int i = 0; i < a.length; i++) { if (a[i] == x) return i ; //a[i] là phần tử có khóa x } return -1; //tìm hết mảng nhưng không có x } 4. Kết luận Giải thuật tìm kiếm tuyến tính không phụ thuộc vào thứ tự các phần tử trong danh sách Đây là phương pháp tổng quát nhất để tìm kiếm trên một danh sách bất kỳ Đối với mảng có thứ tự, thuật toán này chưa tối ưu vì không tận dụng được tính chất thứ tự của các phần tử trong mảng THUẬT TOÁN TÌM GIÁ TRỊ MAX/MIN – HOÁN VỊ 1. Tìm giá trị max Ý tưởng Khởi tạo giá trị max = a1 Lần lượt với i từ 2 đến n, so sánh giá trị số hạng ai với giá trị max, nếu ai > max thì max nhận giá trị mới là ai 1. Tìm giá trị max Sơ đồ flowchart 1. Tìm giá trị max • Thuật toán: Bước 1: Nhận n và dãy a1, a2, …, an ; Bước 2: max a1 , i 2; Bước 3: Nếu i > n thì đưa ra giá trị max rồi kết thúc; Bước 4: 4.1. Nếu ai > max thì max ai ; 4.2. i i +1 rồi quy lại bước 3; 2. Tìm giá trị min Ý tưởng Tương tự như phần Tìm giá trị max Khởi tạo giá trị min = a1 Lần lượt với i từ 2 đến n, so sánh giá trị số hạng ai với giá trị min, nếu ai 3. Hoán vị Cài đặt void swap (int x, int y) { int temp; temp = x; x = y; y = temp; } THUẬT TOÁN SẮP XẾP INTERCHANGE SORT 1. Ý tưởng Xuất phát từ đầu mảng, tìm tất cả các cặp phần tử không theo thứ tự , triệt tiêu chúng bằng cách đổi chỗ phần tử này với phần tử tương ứng trong cặp. Lặp lại xử lý trên với các phần tử tiếp theo trong dãy 2. Thuật toán Bước 1: Khởi tạo i = 0 //bắt đầu từ đầu dãy Bước 2: j = i + 1; //tìm các cặp phần tử a[j] < a[i], j> i Bước 3: Trong khi j
Tìm kiếm theo từ khóa liên quan:
Bài giảng Nhập môn lập trình Nhập môn lập trình Kỹ thuật lập trình Thuật toán hoán vị Thuật toán sắp xếp Thuật toán tìm kiếm tuyến tínhGợi ý tài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 316 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 263 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 203 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 193 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 163 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 153 0 0 -
Giáo trình nhập môn lập trình - Phần 22
48 trang 136 0 0 -
Báo cáo thực tập Công nghệ thông tin: Lập trình game trên Unity
27 trang 118 0 0 -
Giáo trình về phân tích thiết kế hệ thống thông tin
113 trang 114 0 0 -
LUẬN VĂN: Tìm hiểu kỹ thuật tạo bóng cứng trong đồ họa 3D
41 trang 107 0 0