Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 73 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
73
Dung lượng
681,03 KB
Nội dung
BỘ NÔNG NGHIỆP VÀ PHÁT TRIỂN NÔNG THÔN TRƢỜNG CAO ĐẲNG CƠ ĐIỆN XÂY DỰNG VIỆT XÔ KHOA CÔNG NGHỆ THƠNG TIN VÀ NGOẠI NGỮ GIÁO TRÌNH MƠN HỌC: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NGHỀ: QUẢN TRỊ MẠNG TRÌNH ĐỘ: CAO ĐẲNG 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 đƣợc phép dùng ngun 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Ã TÀI LIỆU: MH14 LỜI GIỚI THIỆU Kiến thức môn học Cấu trúc liệu giải thuật tản ngƣời muốn tìm hiểu sâu Cơng nghệ thơng tin đặt biệt việc lập trình để giải tốn máy tính điện tử Các cấu trúc liệu giải thuật đƣợc xem nhƣ yếu tố quan trọng lập trình, nhƣ câu nói tiếng Niklaus Wirth: Chƣơng trình = Cấu trúc liệu + Giải thuật (Programs = Data Structures + Algorithms) Nắm vững cấu trúc liệu giải thuật sở để sinh viên tiếp cận với việc thiết kế xây dựng phần mềm nhƣ sử dụng cơng cụ lập trình đại Cấu trúc liệu đƣợc xem nhƣ phƣơng pháp lƣu trữ liệu máy tính nhằm sử dụng cách có hiệu liệu Và để sử dụng liệu cách hiệu cần phải có thuật tốn áp dụng liệu Do vậy, cấu trúc liệu giải thuật yếu tố tách rời có liên quan chặt chẽ với Việc lựa chọn cấu trúc liệu ảnh hƣởng lớn tới việc lựa chọn áp dụng giải thuật Về nguyên tắc, cấu trúc liệu giải thuật đƣợc biểu diễn cài đặt ngơn ngữ lập trình đại Tuy nhiên, để có đƣợc phân tích sâu sắc mơ phạm, có kết thực tế hơn, sử dụng ngôn ngữ tựa Pascal để minh hoạ cho cấu trúc liệu thuật tốn Mặc dầu có nhiều cố gắng, nhƣng không tránh khỏi khiếm khuyết, mong nhận đƣợc đóng góp ý kiến độc giả để giáo trình đƣợc hồn thiện Ninh bình, ngày tháng …năm 2018 Tham gia biên soạn Chủ biên ThS Nguyễn Bá Quân MỤC LỤC ĐỀ MỤC TRANG LỜI GIỚI THIỆU MỤC LỤC MÔN HỌC CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT CHƢƠNG 1: TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1.Khái niệm giải thuật đánh giá độ phức tạp giải thuật 1.1 Khái niệm giải thuật 1.2 Ngôn ngữ diễn đạt giải thuật 1.3 Thiết kế giải thuật 10 1.4 Đánh giá giải thuật 12 2.Các kiểu liệu 14 3.Kiểu ghi, kiểu trỏ 15 3.1 Kiểu ghi 15 3.2 Kiểu trỏ 15 Bài tập thực hành học viên 16 4.Các kiểu liệu trừu tƣợng 16 5.Các cấu trúc lƣu trữ 16 5.1 Mảng 16 5.2 Danh sách liên kết 18 Bài tập thực hành học viên 20 6.Mối quan hệ CTDL giải thuật 20 Bài tập thực hành học viên 22 Gợi ý làm 22 CHƢƠNG 2: ĐỆ QUY VÀ GIẢI THUẬT ĐỆ QUY 23 1.Khái niệm đệ quy 23 2.Giải thuật đệ quy chƣơng trình đệ quy 23 2.1 Giải thuật đệ qui 23 2.2 Chƣơng trình đệ qui 23 3.Các toán đệ quy 23 3.1 Bài tốn tính n giai thừa 24 3.2 Bài toán dãy số FIBONACCI 24 Bài tập thực hành học viên 25 Gợi ý làm 25 CHƢƠNG 3: DANH SÁCH 27 1.Danh sách phép toán danh sách 27 1.1 Khái niệm danh dách 27 1.2 Các phép toán danh dách 27 2.Cài đặt danh sách theo cấu trúc mảng 27 2.1 Khởi tạo danh sách rỗng 28 2.2 Kiểm tra danh sách rỗng 28 2.3 Chèn phần tử vào danh sách 28 2.4 Xóa phần tử khỏi danh sách 29 3.Cài đặt danh sách theo cấu trúc danh sách liên kết (đơn, kép) 30 3.1 Khởi tạo danh sách rỗng 31 3.2 Kiểm tra danh sách rỗng 31 3.3 Chèn phần tử vào danh sách 31 3.4 Xóa phần tử khỏi danh sách 32 3.5 Danh sách liên kết vòng 33 3.6 Danh sách liên kết đôi 34 Danh sách đặc biệt 34 4.1 Ngăn xếp 34 4.2 Hàng đợi 38 Bài tập thực hành học viên 41 CHƢƠNG 4: CÁC PHƢƠNG PHÁP SẮP XẾP CƠ BẢN 43 1.Định nghĩa toán xếp 43 Phƣơng pháp chọn (Selection sort) 43 2.1.Giới thiệu phƣơng pháp 43 2.2.Giải thuật 43 2.3.Ví dụ minh họa 44 Phƣơng pháp chèn (Insertion sort) 45 3.1.Giới thiệu phƣơng pháp 45 3.2.Giải thuật 45 3.3.Ví dụ minh họa 46 Phƣơng pháp đổi chỗ (Interchange sort) 46 4.1.Giới thiệu phƣơng pháp 46 4.2.Giải thuật 46 4.3.Ví dụ minh họa 47 5.Phƣơng pháp bọt (Bubble sort) 47 5.1.Giới thiệu phƣơng pháp 47 5.2.Giải thuật 47 5.3.Ví dụ minh họa 48 6.Phƣơng pháp xếp nhanh (Quick sort) 49 6.1.Giới thiệu phƣơng pháp 49 6.2.Giải thuật 49 6.3.Ví dụ minh họa 50 Bài tập thực hành học viên 51 CHƢƠNG 5: TÌM KIẾM 52 1.Tìm kiếm tuyến tính 52 1.1.Giới thiệu phƣơng pháp 52 1.2.Giải thuật 52 1.3.Ví dụ minh họa 53 2.Tìm kiếm nhị phân 53 2.1.Giới thiệu phƣơng pháp 53 2.2.Giải thuật 53 2.3.Ví dụ minh họa 54 Bài tập thực hành học viên 55 CHƢƠNG 6: CÂY 56 Khái niệm nhị phân 56 1.1 Các khái niệm 56 1.2 Khái niệm nhị phân 57 Biểu diễn nhị phân tổng quát 57 2.1 Biểu diễn nhị phân 57 2.2 Biểu diễn tổng quát 60 Bài toán duyệt nhị phân 62 3.1 Duyệt theo thứ tự trƣớc (gốc – trái – phải) 62 3.2 Duyệt theo thứ tự (trái – gốc – phải) 62 3.3 Duyệt theo thứ tự sau (trái – phải – gốc) 63 Bài tập thực hành học viên 63 CHƢƠNG 7: ĐỒ THỊ 64 1.Các định nghĩa 64 Biểu diễn đồ thị 65 2.1 Biểu diễn đồ thị ma trận kề 65 2.2 Biểu diễn đồ thị danh sách đỉnh kề: 65 Bài tốn tìm đƣờng đồ thị 66 Bài tập thực hành học viên 68 YÊU CẦU VỀ ĐÁNH GIÁ KẾT QUẢ HỌC TẬP 70 GIÁO TRÌNH MƠN HỌC: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Mã mơn học: MH14 Vị trí, tính chất, ý nghĩa vai trị mơn học: - Vị trí: Mơn học đƣợc bố trí sau sinh viên học xong mơn học, mơ đun: Lập trình bản, Cơ sở liệu - Tính chất: Là mơn học chuyên ngành - Ý nghĩa vai trò: Đây môn học sở ngành ngành liên quan đến công nghệ thông tin, cung cấp cho sinh viên kiến thức cấu trúc liệu giải thuật để làm tản cho việc lập trình giải vấn đề cần thiết Mục tiêu môn học: - Về kiến thức: Mô tả đƣợc khái niệm kiểu liệu trừu tƣơng(danh sách, cây, đồ thị), kiểu liệu, cấu trúc liệu giải thuật - Về kỹ năng: +Biết đƣợc phép toán tƣơng ứng với cấu trúc liệu giải thuật + Biết cách tổ chức liệu hợp lý, khoa học cho chƣơng trình đơn giản + Biết áp dụng thuật tốn hợp lý cấu trúc liệu tƣơng ứng để giải tốn máy tính + Biết áp dụng đƣợc phƣơng pháp xếp, tìm kiếm - Về lực tự chủ trách nhiệm: Bố trí làm việc khoa học đảm bảo an toàn cho ngƣời phƣơng tiện học tập Nội dung môn học: Thời gian Số Kiểm tra* Tên chƣơng, mục Tổng Lý Thực TT (LT số thuyết hành hoặcTH) I Tổng quan Cấu trúc liệu giải thuật II Đệ qui giải thuật đệ qui 2 III Danh sách 12 IV Các phƣơng pháp xếp 22 10 11 V Tìm kiếm VI Cây 10 5 Cộng 60 26 30 CHƢƠNG 1: TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Mã chƣơng: MH14-01 Giới thiệu: Tổng quan giải thuật Đầu tiên cách phân tích vấn đề, từ thực tiễn chương trình, cách thiết kế giải pháp cho vấn đề theo cách giải máy tính Tiếp theo, phương pháp phân tích, đánh giá độ phức tạp thời gian thực giải thuật xem xét chương Mục tiêu: - Mô tả đƣợc khái niệm giải thuật, mối quan hệ cấu trúc liệu giải thuật Trình bày đƣợc tiêu chuẩn để đánh giá độ phức tạp giải thuật - Ghi nhớ đƣợc kiểu liệu bản, kiểu liệu trừu tƣợng cấu trúc liệu - Thực thao tác an toàn với máy tính Nội dung chính: Khái niệm giải thuật đánh giá độ phức tạp giải thuật Mục tiêu: Mô tả khái niệm giải thuật, mối quan hệ cấu trúc liệu giải thuật Trình bày tiêu chuẩn để đánh giá độ phức tạp giải thuật 1.1 Khái niệm giải thuật Giải thuật, cịn gọi thuật tốn (algorithm) khái niệm quan trọng tin học Thuật ngữ thuật toán xuất phát từ nhà toán học Arập Abu Ja'far Mohammed ibn Musa al Khowarizmi (khoảng năm 825) Giải thuật thể giải pháp cụ thể, thực bƣớc để đƣa tới lời giải cho tốn Nói cách khác, giải thuật tập hữu hạn phép toán sở, đƣợc đặt theo quy tắc xác, nhằm giải toán, qui tắc hay qui trình cụ thể nhằm giải vấn đề số bƣớc hữu hạn, nhằm cung cấp kết từ tập hợp kiện đƣa vào Các phép toán sở phép tốn đơn giãn mà thời gian thực hữu hạn khơng phụ thuộc vào kích thƣớc liệu Các phép toán giải thuật phải đƣợc xác định rỏ ràng, dễ hiểu, không mập mờ Với liệu vào thoả mãn điều kiện toán, thuật toán phải dừng lại sau số hữu hạn bƣớc cần thực 1.2 Ngôn ngữ diễn đạt giải thuật - Ngôn ngữ tự nhiên - Sơ đồ khối - Giả ngữ, ngôn ngữ ”tựa ngơn ngữ lập trình” - Ngơn ngữ lập trình (Pascal, C, ) Trong tài liệu sử dụng ngơn ngữ tựa Pascal để trình bày Sau số qui tắt bản: 1.2.1 Quy cách cấu trúc chƣơng trình Mỗi chƣơng trình đƣợc gán tên để phân biệt, tên đƣợc viết chữ in hoa, có thêm dấu gạch nối khố Program Ví dụ : Prorgram NHAN-MA-TRAN Độ dài tên không hạn chế Sau tên kèm theo lời thuyết minh (ở ta quy ƣớc dùng Tiếng Việt) để giới thiệu tóm tắt nhiệm vụ giải thuật số chi tiết cần thiết Phần thuyết minh đƣợc đặt hai dấu { } Chƣơng trình bao gồm nhiều bƣớc, bƣớc đƣợc phân biệt số thứ tự, kèm theo lời thuyết minh 1.2.2 Kí tự biểu thức Kí tự dùng giống nhƣ ngôn ngữ chuẩn, nghĩa gồm : 26 chữ Latinh in hoa in thƣờng 10 chữ số thập phân Các dấu phép toán số học: +, - , *, /, (lũy thừa) Các dấu phép toán quan hệ: , , , # Giá trị logic: true, false Dấu phép toán logic: and, or, not Tên biến dãy chữ chữ số, bắt đầu chữ Biến số có dạng : A[i], B[ij] v.v Còn biểu thức nhƣ thứ tự ƣu tiên phép toán biểu thức theo quy tắc nhƣ PASCAL hay ngôn ngữ chuẩn khác 1.2.3 Các câu lệnh Các câu lệnh chƣơng trình đƣợc viết cách dấu chấm phảy chúng bao gổm : Câu lệnh gán Có dạng Tên biến/ Tên hàm : = Biểu thức Ở cho phép dùng phép gán chung Ví dụ : X : = Y : = Câu lệnh ghép Có dạng : begin Câu lệnh ; Câu lệnh ; ; Câu lệnh n end Nó cho phép ghép nhiều câu lệnh lại để đƣợc coi nhƣ câu lệnh Câu lệnh điều kiện Có dạng : if < Điều kiện > then < Câu lệnh > Có thể diễn tả sơ đồ : Điều kiện false Hoặc true Câu lệnh1 Câu lệnh2 if < Điều kiện > then < Câu lệnh1 > else < Câu lệnh2 > Câu lệnh true Điều kiện false Câu lệnh tuyến Case Điều kiện1: Câu lệnh1; Điều kiện2: Câu lệnh2; …… …… Điều kiệnn: Câu lệnhn; Else: Câu lệnhn+1 End case Câu lệnh cho phân biệt tình xử lí khác điều kiện khác mà tới câu lệnh if – then – else khác Có thể diễn tả sở đồ : B1 tru e S1 false B2 tru e false Bn tru S2 Sn false Sn+1 Chú thích: Bi: Điều kiện Si: Câu lệnh Vài điểm linh động esle khơng có mặt Câu lệnhi(i = 1, 2, …, n) đƣợc thay dãy câu lệnh mà không cần phải đặt : begin end Câu lệnh lặp Với số lần lặp biết trƣớc : for i : = m to n < Câu lệnh> nhằm thực < Câu lệnh > với i lấy giá trị nguyên từ m tới n ( n m) với bƣớc nhảy tăng 1, : for i := n down to m < Câu lệnh> tƣơng tự nhƣ câu lệnh vơi bƣớc nhảy giảm Với số lần lặp trƣớc: While < Điều kiện > < Câu lệnh> 57 A B A C C B Hình 6.1 Hai đƣợc khác Rừng: tập hợp hữu hạn phân biệt A B C D O G M N E Hình 6.2 Rừng gồm ba 1.2 Khái niệm nhị phân Cây nhị phân mà nút có tối đa hai Đối với nút ngƣời ta phân biệt trái phải Nhƣ nhị phân có thứ tự A A B C A B D C E B D C C D E E Hình 6.3 Một số nhị phân Đối với nhị phân cần ý tới số tính chất sau i) Số lượng tối đa nút có mức i nhị phân 2i -1 (i 1) ii) Số lượng nút tối đa nhị phân có chiều cao h h-1(h ) Biểu diễn nhị phân tổng quát Mục tiêu: Cài đặt máy tính cấu trúc mảng cấu trúc danh sách liên kết; 2.1 Biểu diễn nhị phân Lƣu trữ Phƣơng pháp tự nhiên để biểu diễn nhị phân đỉnh trái đỉnh phải đỉnh Ta sử dụng mảng để lƣu trữ đỉnh nhị phân Mỗi đỉnh đƣợc biểu diễn ghi gồm ba trƣờng: trƣờng infor: mô tả thông tin gắn với đỉnh letf : đỉnh trái right: đỉnh phải 58 Giả sử đỉnh đƣợc đƣợc đánh số từ đến max Khi cấu trúc liệu biểu diễn nhị phân đƣợc khai báo nhƣ sau: const max = ; {số thứ tự lớn nút cây} type item = ; {kiểu liệu nút cây} Node = record A infor : item; letf :0 max; B C right :0 max; end; D E F G Tree = array[1 max] of Node; H 9I 10 J 11 K Hình 6.4 Một nhị phân Hình 6.5 Minh hoạ cấu trúc liệu biểu diễn nhị phân hình 6.4 infor left right A B C D E 10 F 0 G 11 H 0 I 0 J 0 K 0 Hình 6.5 Cấu trúc liệu biểu diễn Nếu có nhị phân hồn chỉnh đầy đủ, ta dễ dàng đánh số cho nút theo thứ tự lần lƣợt từ mức trở lên, hết mức đến mức khác từ trái qua phải nút mức Ví dụ với hình 5.6 đánh số nhƣ sau: A B D C E F G Hình 6.6 Cây nhị phân đƣợc đánh số Ta có nhận xét sau: nút thứ i nút thứ 2i 2i + cha nút thứ j j/2 59 Nếu nhƣ ta lƣu trữ vectơ V, theo nguyên tắc: nút thứ i đƣợc lƣu trữ V[i] Đó cách lƣu trữ nhị phân Với cách lƣu trữ biết đƣợc địa nút tính đƣợc địa nút cha ngƣợc lại Nhƣ với đầy đủ nêu hình ảnh lƣu trữ nhƣ sau A B C D E F G v[1] v[2] v[3] v[4] v[5] v[6] v[7] Nhận xét Nếu nhị phân khơng đầy đủ cách lƣu trữ khơng thích hợp gây lãng phí nhớ có nhiều phần tử bỏ trống (ứng với rỗng) Ta xét nhƣ hình 5.7 Để lƣu trữ ta phải dùng mảng gồm 31 phần tử mà có phần tử khác rỗng; hình ảnh lƣu trữ miền nhớ nhƣ sau: A B C D Hình 6.7.Cây nhị phân đặcbiệt D A B C E ( : chỗ trống) Nếu nhị phân ln biến động nghĩa có phép bổ sung, loại bỏ nút thƣờng xuyên tác động cách lƣu trữ gặp phải số nhƣợc điểm nhƣ tốn thời gian phải thực thao tác này, độ cao phụ thuộc vào kích thƣớc mảng Lƣu trữ móc nối Cách lƣu trữ khắc phục đƣợc nhƣợc điểm cách lƣu trữ đồng thời phản ánh đƣợc dạng tự nhiên Trong cách lƣu trữ nút tƣơng ứng với phần tử nhớ có qui cách nhƣ sau: letf info right Trƣờng info ứng với thông tin (dữ liệu) nút Trƣờng left ứng với trỏ, trỏ tới trái nút Trƣờng right ứng với trỏ, trỏ tới phải nút A B D C E Hình 6.8 G 60 Ta khai báo nhƣ sau: Type item = ;{kiểu liệu nút } Tree = ^Node; Node = record info : item; left, right: Tree; end; var Root :Tree; Ví dụ: nhị phân hình 5.8 có dạng lƣu trữ móc nối nhƣ hình 5.9 A Root B C D E G Hình 6.9 Cấu trúc liệu biểu diễn Để truy nhập vào nút cần có trỏ Root, trỏ tới nút gốc 2.2 Biểu diễn tổng quát Biểu diễn tổng quát nhị phân gọi nhị phân tƣơng đƣơng Với cách biểu diễn gán số thứ tự cho nút Giả sử hình vẽ ta đánh số thứ tự từ trái sang phải Chẳng hạn với nút có sau đây,thì đánh số nhƣ A B C D E F HÌNH 6.10 Chúng ta xem: nút “con cả“ nút A, nút “em kề nút 1”.,nút “em kề nút 2” v.v… Với nút cần ý tới hai quan hệ đủ Từ quy cách nút nhị phân tƣơng đƣơng, có dạng : 61 LCC INFO REK HÌNH 6.11 Với LCC trƣờng trỏ, chứa địa nút “con cả” REK trƣờng trỏ, chứa địa nút “em kề nó” Nhƣ với có nhị phân tƣơng đƣơng với Điều có nghĩa : với tổng quát cho, biểu diễn máy nhị phân tƣơng đƣơng Các phép xử lí tổng quát thực qua nhị phân tƣơng đƣơng kết sau chuyển đổi lại phải khớp với ý đồ xử lí tổng quát Sau ví dụ minh họa vài nhị phân tƣơng đƣơng ứng với tổng quát cho: T‟ T E A B A C E F B D G H I J K E T C F E H A C B E H B F I D T‟ A D G I D G C E J F H K J K G I J K T trỏ,Trỏ tới gốc tổng quát T‟ la trỏ, trỏ tới gốc nhị phân tƣơng đƣơng T) 62 Ta thấy : - Gốc nhị phân tƣơng đƣơng T‟ phải - Cây nhị phân tƣơng đƣơng T‟ nhị phân T thƣờng khác Bài tốn duyệt nhị phân Mục tiêu: Mơ thuật toán duyệt nhị phân Phép xử lý nút - mà ta gọi chung phép thăm nút cách hệ thống, cho nút đƣợc thăm lần, gọi phép duyệt Chúng ta thƣờng duyệt nhị phân theo ba thứ tự: duyệt trƣớc, duyệt duyệt sau, phép đƣợc định nghĩa đệ qui nhƣ sau: 3.1 Duyệt theo thứ tự trƣớc (gốc – trái – phải) - Thăm gốc A - Duyệt trái theo thứ trƣớc - Duyệt phải theo thƣ tự trƣớc Cài đặt: B C procedure Truoc(Root : Tree); Begin if Root nil then D E F Begin write(Root^.info); G Truoc(Root^.left); Truoc(Root^.right); H end; end; HÌNH 6.12 Ví dụ: Chúng ta duyệt trƣớc với hình 5.12, có kết nhƣ sau: AB DCEGHF 3.2 Duyệt theo thứ tự (trái – gốc – phải) - Duyệt trái theo thứ - Thăm gốc - Duyệt phải theo thƣ tự Cài đặt: procedure Giua(Root : Tree); Begin if Root^.left nil then Begin Preorder(Root^.left); write(Root^.info); Preorder(Root^.right); end; end; Ví dụ: Chúng ta duyệt trƣớc với hình 5.12, có kết nhƣ sau: DBAGHECF 63 3.3 Duyệt theo thứ tự sau (trái – phải – gốc) - Duyệt câycon trái theo thứ sau - Duyệt phải theo thƣ tự sau - Thăm gốc Cài đặt: procedure Sau(Root : Tree); Begin if Root^.right nil then Begin Preorder(Root^.left); Preorder(Root^.right); write(Root^.info); end; end; Ví dụ: Chúng ta duyệt trƣớc với hình 5.12, có kết nhƣ sau: DBHGEFCA Bài tập thực hành học viên 6.1 Trình bày biểu thức theo thứ tự duyệt trƣớc, duyệt sau, duyệt sau: A J B I D K H L F Y 6.2 Dựng nhị phân biết thứ tự đỉnh duyệt theo a Thứ tự trƣớc: A D F G H K L P Q R W Z Thứ tự : G F H K D L A W R Q P Z b Theo thứ tự sau: F G H D A L P Q R Z W K Thứ tự : G F H K D L A W R Q P Z 64 CHƢƠNG 7: ĐỒ THỊ Mã chƣơng: MH14-07 Giới thiệu: Đồ thị có vai trị quan trọng thực tế Đồ thị dùng để giải toán nhiều lĩnh vực khác Ví dụ, dùng đồ thị để biểu diễn mạch điện, biểu diễn cơng thức phân tử hóa học, biểu diễn mạng máy tính Đồ thị với trọng số gán cho cạnh dùng để giải tốn tốn tìm đường ngắn hai thành phố mạng giao thơng Chúng ta dùng đồ thị để lập lịch thi phân chia kênh cho đài truyền hình Mục tiêu: - Trình bày đƣợc khái niệm đồ thị; - Cài đặt đƣợc đồ thị máy tính cấu trúc mảng cấu trúc danh sách liên kết; - Giải đƣợc tốn tìm đƣờng đồ thị - Thực thao tác an tồn với máy tính Nội dung gồm: 1.Các định nghĩa Mục tiêu: Trình bày khái niệm đồ thị Một đồ thị G bao gồm tập hợp V đỉnh tập hợp E cung, ký hiệu G=(V,E) Các đỉnh đƣợc gọi nút (node) Các cung nối hai đỉnh, hai đỉnh trùng Hai đỉnh có cung nối gọi hai đỉnh kề (adjacency) Một cung nối hai đỉnh v, w coi nhƣ cặp điểm (v,w) Nếu cặp có thứ tự ta có cung có thứ tự, ngƣợc lại cung khơng có thứ tự Nếu cung đồ thị G có thứ tự G gọi đồ thị có hƣớng (directed graph) Nếu cung đồ thị G khơng có thứ tự đồ thị G đồ thị vô hƣớng (undirected graph) Trong phần sau ta dùng từ đồ thị (graph) để nói đến đồ thị nói chung, cần phân biệt rõ ta dùng đồ thị có hƣớng, đồ thị vô hƣớng Thông thƣờng đồ thị, đỉnh biểu diễn cho đối tƣợng cung biểu diễn mối quan hệ (relationship) đối tƣợng Chẳng hạn đỉnh biểu diễn cho thành phố cung biểu diễn cho đƣờng giao thông nối hai thành phố Một đƣờng (path) đồ thị dãy đỉnh v1, v2, , cho (vi,vi+1) cung đồ thị (i=1, ,n-1) Đƣờng đƣờng từ v1 đến qua đỉnh v2, ,vn-1 Đỉnh v1 gọi đỉnh đầu, gọi đỉnh cuối Độ dài đƣờng (n-1) Trƣờng hợp đặc biệt dãy có đỉnh v ta coi đƣờng từ v đến có độ dài không Đƣờng gọi đơn (simple) đỉnh đƣờng khác nhau, ngoại trừ đỉnh đầu đỉnh cuối trùng Một đƣờng có đỉnh đầu đỉnh cuối trùng gọi chu trình (cycle) Một chu trình đơn đƣờng đơn có đỉnh đầu đỉnh cuối trùng có độ dài 65 Trong nhiều ứng dụng ta thƣờng gắn giá trị (value) vào cung thể thông tin liên quan tới cung đó, giá trị đƣợc gọi trọng số, lúc ta nói đồ thị có trọng số Đồ thị đồ thị G=(V,E) đồ thị G'=(V',E') đó: V‟⊆V E‟ gồm tất cạnh (v,w) ∈ E cho v,w ∈ V‟ Biểu diễn đồ thị Mục tiêu: Cài đặt đồ thị máy tính cấu trúc mảng cấu trúc danh sách liên kết 2.1 Biểu diễn đồ thị ma trận kề Ta dùng mảng hai chiều, chẳng hạn mảng A, kiểu boolean để biểu diễn đỉnh kề Nếu đồ thị có n đỉnh ta dùng mảng A có kích thƣớc nxn Giả sử đỉnh đƣợc đánh số n A[i,j] = true, có cung nối đỉnh thứ i đỉnh thứ j, ngƣợc lại A[i,j] = false Rõ ràng, G đồ thị vơ hƣớng ma trận kề ma trận đối xứng Ví dụ 11: Ma trận liền kề với thứ tự đỉnh v1, v2, v3, v4 là: 1 0 0 0 1 1 1 0 0 1 V1 V3 V2 V4 Do ma trận lƣu trữ kế tiếp, nên việc truy cập đến phần tử ma trận kề đƣợc thực trực tiếp, với tốc độ nhanh, nhƣng cách lƣu trữ rỏ rang tốn không gian nhớ n lớn 2.2 Biểu diễn đồ thị danh sách đỉnh kề: Trong cách biểu diễn này, ta lƣu trữ đỉnh kề với đỉnh i danh sách liên kết theo thứ tự đó, gọi danh sách kề Mỗi nút danh sách có qui cách: INFO LINK Trƣờng INFO chứa số j ứng với đỉnh j kề i(1