Bài giảng Cấu trúc dữ liệu: Chương 1 - TS. Trần Cao Đệ

26 19 0
Bài giảng Cấu trúc dữ liệu: Chương 1 - TS. Trần Cao Đệ

Đ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

Bài giảng Cấu trúc dữ liệu: Chương 1 sẽ giới thiệu đến các học viên thuật toán cơ bản từ các bài toán thực tế, giúp học viên tư duy và hiểu vấn đề nhanh. Tham khảo nội dung bài giảng của thầy Trần Cao Đệ để bổ sung các kiến thức cần thiết cho bản thân.

Chương 1: MỞ ĐẦU TS Trần Cao Đệ Năm 2010 TỪ BÀI TỐN ĐẾN CHƯƠNG TRÌNH • Mơ hình hóa tốn – Xác định tốn cần giải quyết: • • phải làm gì? làm nào? – Hình thức hóa tốn: phát biểu lại tốn thực tế thành tốn hình thức (hay cịn gọi mơ hình tốn) Ví dụ 1: Tơ màu đồ giới • • • Mỗi nước tô màu Hai nước láng giềng (có biên giới chung) phải tơ hai màu khác Hãy tìm phương án tơ màu nước đồ cho số màu sử dụng • Mơ hình hóa tốn tơ màu – tìm cách biểu diễn toán cách trừu tượng để gạt bỏ chi tiết khơng cần thiết • Ghi lại tất nước đồ • Mối quan hệ “láng giềng” hai nước – Một cách mơ hình hóa là: • Mỗi nước điểm; • Hai nước có chung biên giới ta vẽ đường nối hai điểm tương ứng • Bản đồ giới mối quan hệ láng giềng nước biểu diễn đồ thị (graph): – đỉnh nước, – hai nước có biên giới chung nối với cung Bài toán tơ màu cho đồ giới trở thành: •Tìm cách tô màu cho tất đỉnh đồ thị cho hai đỉnh có cạnh nối phải tơ hai màu khác •Số màu sử dụng Ví dụ 2: Đèn giao thơng • Cho ngã năm hình, C E đường chiều • Hãy thiết kế bảng đèn hiệu điều khiển giao thông ngã năm cách hợp lý: – phân chia lối ngã năm thành nhóm, nhóm gồm lối đi đồng thời không xảy tai nạn giao thơng – số lượng nhóm Mơ hình hóa • Ghi nhận tất lối đi: AB, AC, AD, BA, BC, BD, DA, DB, DC, EA, EB, EC, ED • Ghi nhận mối liên quan lối đi: – Hai lối đồng thời vẽ cung nối • Bài tốn trở thành: Tơ màu lên đỉnh đồ thị – Các lối cho phép đồng thời có màu – Hai đỉnh có cạnh nối khơng tơ màu – Số nhóm nhất: số màu dùng Nhận xét • Hai tốn thực tế: “tơ màu đồ giới” “đèn giao thông” xem khác biệt sau mơ hình hóa, chúng thực chất một, tốn “tơ màu đồ thị” • Nhiều tốn mơ hình tốn – Giải mơ hình tốn Ỉ giải nhiều tốn hay giải lớp tốn Giải thuật (algorithms) • Khi có mơ hình cho tốn: – Tìm cách giải tốn mơ hình – 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 Giải tốn “ tơ màu đồ thị” • – "thử tất khả năng" hay "vét cạn" tất trường hợp có, – ta "vét cạn" trường hợp đồ thị có số đỉnh nhỏ • – Duyệt danh sách đỉnh chưa tô màu Đối với đỉnh chưa tô màu, xác định xem có kề với đỉnh tơ màu C khơng Nếu khơng có, tơ màu C Bài tốn tơ màu cho đồ thị khơng có giải thuật tốt để tìm lời giải tối ưu HEURISTIC cho tốn tơ màu đồ thị, thường gọi giải thuật "háu ăn" (GREEDY) là: – Chọn đỉnh chưa tô màu tô màu C • Ý tưởng Heuristic đơn giản: dùng màu để tơ cho nhiều đỉnh Như ta "hi vọng" số màu cần dùng Áp dụng HEURISTIC Greedy cho bi toỏnô ốn giao thụng ằ ã Tụ màu xanh cho đỉnh: AB,AC,AD,BA,DC,ED • Tơ màu đỏ cho đỉnh: BC,BD,EA • Tơ màu tím cho đỉnh: DA,DB • Tơ màu vàng cho đỉnh: EB,EC AB AC AD BA BC BD DA DB DC EA EB EC ED 10 Greedy có cho lời giải tối ưu? Tô theo GREEDY (xét theo số thứ tự đỉnh) Tối ưu (thử tất khả năng) 1: đỏ; 2: đỏ 1,3,4 : đỏ 3: xanh;4: xanh 2,5 : xanh 5: vàng 12 Ngôn ngữ giả v tinh ch tng bc ã Mụ hỡnh húa ặ mơ hình thích hợp cho tốn • Hình thức hố giải thuật thuật ngữ mơ hình – Khởi đầu viết mệnh đề tổng quát – tinh chế dần thành chuỗi mệnh đề cụ thể – Cuối thị thích hợp ngơn ngữ lập trình • Ví dụ: Heuristic GREEDY, giả sử đồ thị G, heuristic xác định tập hợp Newclr đỉnh G tô màu, mà ta gọi màu C Để tiến hành tô màu hồn tất cho đồ thị G Heuristic phải gọi lặp lại toàn thể đỉnh tô màu 13 Thủ tục GREEDY với ngôn ngữ giả PASCAL PROCEDURE GREEDY ( var G: GRAPH ; var Newclr: SET ); begin {1} Newclr := ∅; {2} for (mỗi đỉnh v chưa tô màu G) {3} if (v không nối với đỉnh Newclr) then begin {4} đánh dấu v tô màu; {5} thêm v vào Newclr; end; end; Trong thủ tục ngơn ngữ giả: •từ khố ngơn ngữ PASCAL •mệnh đề tiếng Việt •"kiểu liệu trừu tượng" GRAPH, SET 14 Tinh chế bước • Mệnh đề if {3} chi tiết hố sau: PROCEDURE GREEDY ( var G: GRAPH ; var Newclr: SET ); begin {1} Newclr:= ∅; {2} for (mỗi đỉnh v chưa tô màu G) begin {3.1} found:=false; {3.2} for (mỗi đỉnh w Newclr) {3.3} if (có cạnh nối v w) then {3.4} found:=true; {3.5} if found=false then begin {4} đánh dấu v tô màu; {5} thêm v vào Newclr; end; end; end; 15 Kiểu liệu trừu tượng • GRAPH SET ta coi tập hợp – Có nhiều cách để biểu diễn tập hợp ngơn ngữ lập trình: xem tập hợp danh sách (LIST) số nguyên biểu diễn số đỉnh kết thúc giá trị đặc biệt NULL 16 PROCEDURE GREEDY ( var G: GRAPH ; var Newclr: LIST ); var found:boolean; v,w :integer; begin Newclr:= ∅; v:= đỉnh chưa tô màu G; while vnull begin found:=false; w:=đỉnh newclr; while( wnull) and (not found) begin if có cạnh nối v w then found:=true; else w:= đỉnh newclr; end; if found=false then begin đánh dấu v tô màu; thêm v vào Newclr; end; v:= đỉnh chưa tô màu G; end; end; 17 Chú ý việc dùng ngôn ngữ giả • Mục đích: – phát họa ý tưởng giải thuật – tránh sa đà vào cú pháp ngơn ngữ • Các bước tinh chế sau: thủ tục ngôn ngữ giả gần giống với chương trình ngơn ngữ lập trình • Việc chọn ngôn ngữ giả tựa PASCAL hay tựa C hay tựa một ngữ lập trình khác tùy thuộc vào thói quen người sử dụng, vào quen thuộc với ngơn ngữ lập trình 18 Nếu người dùng quen thuộc với ngơn ngữ C viết thủ tục với ngôn ngữ giả tựa C sau : void GREEDY ( GRAPH& G, SET& Newclr ){ /*1*/ Newclr = ∅; /*2*/ for (mỗi đỉnh v chưa tô màu G) /*3*/ if (v không nối với đỉnh Newclr){ /*4*/ đánh dấu v tô màu; /*5*/ thêm v vào Newclr; } } 19 Thủ tục tinh chế viết tựa C sau: void GREEDY ( GRAPH& G, SET& Newclr ) { /*1*/ Newclr= ∅; /*2*/ for (mỗi đỉnh v chưa tô màu G) { /*3.1*/ int found=0; /*3.2*/ for (mỗi đỉnh w Newclr) /*3.3*/ if (có cạnh nối v w) /*3.4*/ found=1; /*3.5*/ if (!found) { /*4*/ đánh dấu v tô màu; /*5*/ thêm v vào Newclr; } } } 20 Tinh chế thêm bước nữa: void GREEDY ( GRAPH& G, LIST& Newclr ){ Newclr= ∅; int v= đỉnh chưa tô màu G; while (vnull) { int found=0; int w=đỉnh newclr; while( wnull) && (!found) If (có cạnh nối v w) found=1; else w= đỉnh newclr; if (!found) { Đánh dấu v tô màu; Thêm v vào Newclr; } v= đỉnh chưa tô màu G; } } 21 Tóm tắt bước tiếp cận với tốn Mơ hình hố tốn mơ hình tốn học thích hợp Tìm giải thuật mơ hình Giải thuật mơ tả cách khơng hình thức, tức nêu phương hướng giải bước giải cách tổng quát Hình thức hố giải thuật cách viết thủ tục ngơn ngữ giả, chi tiết hố dần ("mịn hoá") , kết hợp với việc dùng kiểu liệu trừu tượng cấu trúc điều khiển ngơn ngữ lập trình để mơ tả giải thuật Cài đặt giải thuật ngôn ngữ lập trình cụ thể (Pascal,C, ) Ở bước ta dùng cấu trúc liệu cung cấp ngôn ngữ, ví dụ Array, Record, để thể kiểu liệu trừu tượng, 22 KIỂU DỮ LIỆU TRỪU TƯỢNG • Khái niệm trừu tượng hóa – Trừu tượng hóa chương trình void Main() { Input_Matrix(A); Input_Matrix(B); Matrix_mult(A,B,C); Print_Matrix(C); } • Trừu tượng hóa liệu – Một kiểu liệu trừu tượng (ADT): mơ hình tốn học với tập hợp phép toán (operator) trừu tượng định nghĩa mơ hình – Ví dụ tập hợp số nguyên với phép toán hợp, giao, hiệu kiểu liệu trừu tượng – ADT tổng quát hoá kiểu liệu nguyên thuỷ 23 ADT - tổng quát hoá kiểu liệu nguyên thuỷ • Danh sách (LIST) số nguyên phép toán danh sách – Tạo danh sách rỗng – Lấy phần tử danh sách trả giá trị null danh sách rỗng – Lấy phần tử danh sách trả giá trị null khơng cịn phần tử – Thêm số nguyên vào danh sách • Nếu viết chương trình thực phép tốn này, ta dễ dàng thay mệnh đề hình thức giải thuật câu lệnh đơn giản Câu lệnh Mệnh đề hình thức MAKENULL(newclr) newclr= ∅ w=FIRST(newclr) w=phần tử newclr w=NEXT(w,newclr) w=phần tử newclr INSERT( v,newclr) Thêm v vào newclr 24 KIỂU DỮ LIỆU - CẤU TRÚC DỮ LIỆU VÀ KIỂU DỮ LIỆU TRỪU TƯỢNG • Kiểu liệu tập hợp giá trị tập hợp phép tốn giá trị – kiểu liệu sơ cấp: int, char – kiểu liệu có cấu trúc; array, struct • Cấu trúc liệu: – Các kiểu liệu có cấu trúc (cung cấp NNLT) – cấu trúc phức hợp (được tạo từ kiểu liệu bản) • Một kiểu liệu trừu tượng mơ hình tốn học với tập hợp phép toán – Kiểu liệu trừu tượng kiểu liệu định nghĩa mức khái niệm (conceptual), chưa cài đặt cụ thể ngơn ngữ lập trình – Khi cài đặt kiểu liệu trừu tượng ngơn ngữ lập trình cụ thể: : • Biểu diễn kiểu liệu trừu tượng (ở mức khái niệm) cấu trúc liệu kiểu liệu trừu tượng khác cài đặt • Viết chương trình thực phép toán kiểu liệu trừu tượng 25 Hết chương 26 ... KIỂU DỮ LIỆU - CẤU TRÚC DỮ LIỆU VÀ KIỂU DỮ LIỆU TRỪU TƯỢNG • Kiểu liệu tập hợp giá trị tập hợp phép tốn giá trị – kiểu liệu sơ cấp: int, char – kiểu liệu có cấu trúc; array, struct • Cấu trúc liệu:. .. dùng k màu để tơ 11 Greedy có cho lời giải tối ưu? Tô theo GREEDY (xét theo số thứ tự đỉnh) Tối ưu (thử tất khả năng) 1: đỏ; 2: đỏ 1, 3,4 : đỏ 3: xanh;4: xanh 2,5 : xanh 5: vàng 12 Ngơn ngữ giả... việc dùng kiểu liệu trừu tượng cấu trúc điều khiển ngơn ngữ lập trình để mơ tả giải thuật Cài đặt giải thuật ngơn ngữ lập trình cụ thể (Pascal,C, ) Ở bước ta dùng cấu trúc liệu cung cấp ngơn ngữ,

Ngày đăng: 09/05/2021, 18:32

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan