Các bài toán trong th ực tế không dễ giải bằng cách hiểu thông thường và để giảm độ phức tạp, trong nhiều trường h ợp có thể mô hình hóa bài toán.. T ừ việc mô hình hóa, trong thực[r]
Trang 1Lecturer: Dr Ngo Huu Phuc
Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@gmail.com
Trang 2Tài li ệu tham khảo
Mastering Algorithms with C, Kyle Loudon, 1999.
Introduction to Algorithms, Thomas H Cormen, Charles
E Leiserson, Ronald L Rivest and Clifford Stein, The MIT Press © 2001
Data Structures, Algorithms, and Object-Oriented
Programming NXB McGraw Hill; Tác giả Gregory
Heilleman -1996
C ấu trúc dữ liệu và giải thuật, Đỗ Xuân Lôi.
Trang 3Bài 1 Gi ới thiệu
N ội dung:
1.0 Đôi nét về khái niệm.
1.1 Gi ải thuật.
1.2 D ữ liệu và các cấu trúc dữ liệu.
1.3 Bi ểu diễn giải thuật.
1.4 Độ phức tạp của giải thuật.
Tham kh ảo:
Elliz Horowitz - Fundamentals of data structures,
Trang 41.0 Đôi nét về khái niệm
Để giải một bài toán, bắt đầu từ câu hỏi “phải làm gì?”, sau
đó trả lời câu hỏi “làm như thế nào?” → đó là cách tiếp cận đến giải thuật và cấu trúc dữ liệu
Các bài toán trong thực tế không dễ giải bằng cách hiểu thông thường và để giảm độ phức tạp, trong nhiều trường
hợp có thể mô hình hóa bài toán
Từ việc mô hình hóa, trong thực tế thấy rằng có nhiều bài toán có cùng một mô hình hóa
Trang 51.0.1 M ột số ví dụ (1)
Ví d ụ 1: Tô màu bản đồ thế giới
Yêu c ầu:
Ta cần phải tô màu cho các nước trên bản đồ thế giới
Trong đó mỗi nước đều được tô một màu
Hai nước láng giềng (cùng biên giới) thì phải được tô bằng hai màu khác nhau
Hãy tìm một phương án tô màu sao cho số màu sử dụng là
ít nhất
Trang 61.0.2 M ột số ví dụ (2)
Hướng giải quyết bằng mô hình hóa:
Ta có th ể xem mỗi nước trên bản đồ thế giới là một đỉnh của đồ thị.
Hai nước láng giềng của nhau thì hai đỉnh ứng với nó được nối với nhau b ằng một cạnh
Bài toán lúc này tr ở thành bài toán tô màu cho đồ thị như sau:
M ỗi đỉnh đều phải được tô màu.
Hai đỉnh có cạnh nối thì phải tô bằng hai màu khác nhau.
C ần tìm một phương án tô màu sao cho số màu được sử dụng là ít
nh ất.
Trang 71.0.3 M ột số ví dụ (3)
Ví d ụ 2: Đèn giao thông
Cho m ột ngã năm như hình 1.
C và E là các đường một chiều theo chiều mũi tên.
Các đường khác là hai chiều
Hãy thi ết kế một bảng đèn hiệu điều khiển giao thông tại ngã năm này
m ột cách hợp lý: sao cho:
Phân chia các l ối đi tại ngã năm này thành các nhóm
M ỗi nhóm gồm các lối đi có thể cùng đi đồng thời nhưng không xảy ra tai nạn giao thông (các hướng đi không cắt nhau),
Trang 81.0.4 Hướng giải quyết (VD2)
Ta có thể xem đầu vào (input) của bài toán là tất cả các lối
đi tại ngã năm này
Đầu ra (output) của bài toán là các nhóm lối đi có thể đi đồng thời mà không xảy ra tai nạn giao thông
Mỗi nhóm sẽ tương ứng với một pha điều khiển của đèn
hiệu, vì vậy ta phải tìm kiếm lời giải với số nhóm là ít nhất
để giao thông không bị tắc nghẽn vì phải chờ đợi quá lâu
Trang 91.0.4 Hướng giải quyết (VD2) (t)
Trước hết ta nhận thấy rằng tại ngã năm này có 13 lối đi: AB, AC, AD,
BA, BC, BD, DA, DB, DC, EA, EB, EC, ED.
Th ể hiện các lối có thể đi đồng thời.
Ví d ụ cặp AB và EC có thể đi đồng thời, nhưng AD và EB thì không, vì các hướng giao thông cắt nhau.
S ử dụng sơ đồ trực quan:
Tên c ủa 13 lối đi được viết lên mặt phẳng,
Hai l ối đi nào nếu đi đồng thời sẽ xảy ra đụng nhau (tức là hai hướng đi cắt qua nhau) ta n ối lại bằng một đoạn thẳng.
Ta s ẽ có một sơ đồ như hình 2 Như vậy, trên sơ đồ này, hai lối đi có cạnh nối
Trang 10Hình 2