Bài giảng trình bày về khái niệm, cách biểu diễn thuật toán sắp xếp (sắp xếp chọn, sắp xếp chèn, sắp xếp nổi bọt) và thuật toán tìm kiếm (tìm kiếm tuần tự và tìm kiếm nhị phân). Để biết rõ hơn về nội dung chi tiết của bài giảng, mời các bạn cùng tham khảo.
10/25/2016 Kỹ thuật lập trình Tuần 10 - Thuật tốn Giáo viên: Hà Đại Dương duonghd@mta.edu.vn 10/25/2016 Nội dung Thuật toán (Khái niệm, Biểu diễn) Thuật toán xếp – Sắp xếp chọn – Sắp xếp chèn – Sắp xếp bọt Thuật tốn tìm kiếm – Tuần tự – Nhị phân Bài tập 10/25/2016 Thuật tốn 10/25/2016 10/25/2016 Khái niệm • Một thuật toán liệt kê dẫn, quy tắc cần thực theo bước xác định nhằm giải toán cho khoảng thời gian hữu hạn • Tai cần thuật tốn?? Chuyển thành chương trình (ngơn ngữ đó) cách dễ dàng đắn • Ví dụ: Mơ tả thuật tốn giải tốn tìm phần tử lớn dãy có n số cho trước 10/25/2016 Mơ tả thuật tốn tìm số lớn Chỉ số phần tử lớn tạm thời (LNTT) = số phần tử đầu tiên; So sánh số với giá trị LNTT, lớn giá trị LNTT đặt: Chỉ số phần tử LNTT = số phần tử đó; Nếu phần tử dãy -> lặp lại bước 2) Phần tử LNTT thời điểm phần tử lớn dãy (cần tìm) 10/25/2016 Dạng giả mã 10/25/2016 10/25/2016 Tính chất TT … Tính xác: để đảm bảo kết tính tốn hay thao tác mà máy tính thực xác Tính rõ ràng: Thuật toán phải thể câu lệnh minh bạch; câu lệnh xếp theo thứ tự định 10/25/2016 Tính chất TT … Tính khách quan: Một thuật tốn dù viết nhiều người nhiều máy tính phải cho kết Tính phổ dụng: Thuật tốn khơng áp dụng cho tốn định mà áp dụng cho lớp tốn có đầu vào tương tự Tính kết thúc: Thuật toán phải gồm số hữu hạn bước tính tốn 10/25/2016 Biểu diễn thuật tốn • Có cách biểu diễn thuật tốn: – Dùng ngơn ngữ tự nhiên – Sơ đồ khối – Giả mã • Dùng ngơn ngữ tự nhiên: mơ tả bước xử lý ngôn ngữ viết 10/25/2016 10/25/2016 Mơ tả liệu vào/ra • Dữ liệu đầu vào: Một thuật tốn phải mơ tả rõ giá trị đầu vào từ tập hợp liệu xác định Ví dụ, dãy số nguyên a(1), a(2), , a(n), với n a k END YES k=i 10/25/2016 13 Giả mã • Sử dụng ngơn ngữ tự nhiên kết hợp với ngơn ngữ lập trình • Cần tn thủ quy tắc ngơn ngữ: – Có cấu trúc bản: tuần tự, lặp rẽ nhánh – Có hệ thống từ khóa, từ điển (phụ thuộc vào tốn) • Dễ hiểu, dễ cài đặt 10/25/2016 14 Ví dụ 10/25/2016 15 10/25/2016 Chương trình 10/25/2016 16 Ví dụ • Tìm phần tử có giá trị b dãy có n số cho trước 10/25/2016 17 10/25/2016 18 10/25/2016 Chất lượng biểu diễn thuật toán Đúng với ý tưởng đặt toán Đơn giản, dễ hiểu Dễ cài đặt 10/25/2016 19 Tính hiệu Thời gian: Chi phí cho thời gian tính tốn so với thuật toán giải toán Bộ nhớ: Chiếm dụng nhớ so với thuật tốn giải tốn Độ xác: Nếu cung cấp lời giải gần gần với lời giải so với thuật toán giải tốn 10/25/2016 20 Tính hiệu • Tùy theo tốn, mục đích mà xét tiêu chí nói • Tùy theo chất lượng thuật tốn mà xét tập liệu thử nghiệm, số tập liệu minh họa cho vài khía cạnh 10/25/2016 21 10/25/2016 Ví dụ • Bài tốn: Đếm số lần xuất giá trị b dãy a • Biểu diễn thuật tốn Dạng mơ tả lời Dạng sơ đồ khối Dạng giả mã • Viết chương trình (10 phút) 10/25/2016 22 Thuật tốn xếp 10/25/2016 23 Bài tốn • Cho mảng a (giá trị so sánh được), xếp mảng a tăng (hoặc giảm) dần • Một số tốn thực tế: – Danh sách lớp: Sắp xếp theo họ tên (tiếng Việt) – Bảng điểm tổng kết khoá học: xếp theo điểm tổng kết – Bảng điểm kết thi đại học: xếp theo SBD –… • Ví dụ: Sắp xếp dãy 8, 6, 9, 7, giảm dần 10/25/2016 24 10/25/2016 Sắp xếp chọn(Selection sort) 10/25/2016 25 Sắp xếp chọn • Thuật tốn: Phần tử xem xét i = Chọn phần tử lớn đoạn [i N-1] đổi chỗ cho phần tử xét i; Nếu chưa hết dãy: Đặt i = i + 1, lặp lại bước Nếu hết dãy chuyển đến bước 4 Kết thúc: Mảng xếp giảm dần • Ý tưởng đề cập đến tuần 10/25/2016 26 Ví dụ • Biểu diễn thuật tốn xếp chọn (10 phút): – Dạng sơ đồ khối – Dạng giả mã • Viết chương trình (10 phút) – Hàm xếp – Hàm in kết 10/25/2016 27 10/25/2016 10/25/2016 28 Sắp xếp chèn (Insertion sort) 10/25/2016 29 Ý tưởng • Với dãy xếp, ví dụ: 9, 5,2 • Việc thêm vào thực cách duyệt từ cuối lại để tìm vị trí chèn vào Ví dụ thêm dãy 9,5,2,7 9,5,7,2 9,7,5,2 9,7,5,2 • Dãy có phần tử hiểu xếp 10/25/2016 30 10 10/25/2016 Ví dụ • Sắp xếp dãy 8, 6, 9, 7, giảm dần -> 8,6 -> 8,6,9 -> 8,9,6 -> 9,8,6 -> 9,8,6,7 -> 9,8,7,6 -> 9,8,7,6,5 10/25/2016 31 Giả mã • Input: A[0 N-1] phần từ • Ouput: A[0 N-1] xếp khơng tăng • for i=1 -> N-1 x=A[i]; vt=i; while (vt>0 && A[vt-1] 1 solandoi=0 for j=0->i-1 if(a[j]>a[j+1]) - DoiCho(a[j],a[j+1]); - solandoi = solandoi +1; if (solandoi ==0) break; 10/25/2016 36 12 10/25/2016 Ví dụ • Sắp xếp giảm dần sử dụng thuật tốn Bubble sort • Hàm DoiCho(x,y) dùng để đổi giá trị x y cho viết trước • Viết hàm (10 phút) 10/25/2016 37 Thuật tốn tìm kiếm 10/25/2016 38 Tìm kiếm • Tìm phần tử có giá trị b mảng a gồm n phần tử • Với mảng a b số ta làm ví dụ 10/25/2016 39 13 10/25/2016 Xem lại ví dụ • Giả mã 10/25/2016 40 Xem lại ví dụ 10/25/2016 41 Ví dụ • Viết chương trình tìm kiếm (tuần tự) Họ tên sinh viên danh sách sinh viên lớp • Viết chương trình (10 phút) 10/25/2016 42 14 10/25/2016 Tìm kiếm nhị phân • Xét tốn tìm b dãy a có n phần tử • Nếu a xếp (tăng dần) -> tìm kiếm nhanh theo ý tưởng sau: So sánh b với phần tử “giữa” a, phần tử k Nếu -> Kết thúc Nếu ba[k], cần tìm b đoạn [k+1,n-1] Thực tương tự cho bước 3/bước (với đoạn ngắn hơn) 10/25/2016 43 Giả mã • Viết thuật toán dạng giả mã (15 phút) 10/25/2016 Input: a[0 N-1], x vt = -1; l = 0; r = N-1; while(l