Mở đầu tài liệu cấu trúc dữ liệu_02 - Pdf 62

Cấu trúc dữ liệu Chương I:Mở đầu
CHƯƠNG I MỞ ĐẦU

TỔNG QUAN
1. Mục tiêu
Sau khi học xong chương này, sinh viên sẽ:
Nắm được các bước trong lập trình để giải quyết cho một bài toán.
Nắm vững khái niệm kiểu dữ liệu trừu tượng, sự khác nhau giữa kiểu dữ liệu, kiểu dữ
liệu trừu tượng và cấu trúc dữ liệu.
2. Kiến thức cơ bản cần thiết
Các kiến thức cơ bản cần thiết để học chương này bao gồm:
Khả năng nhận biết và giải quyết bài toán theo hướng tin học hóa.
3. Tài liệu tham khảo
Aho, A. V. , J. E. Hopcroft, J. D. Ullman. "Data Structure and Algorihtms", Addison–
Wesley; 1983 (chapter 1)
Đỗ Xuân Lôi . "Cấu trúc dữ liệu và giải thuật". Nhà xuất bản khoa học và kỹ thuật. Hà
nội, 1995. (Chương 1)
4. Nội dung cốt lõi
Chương này chúng ta sẽ nghiên cứu các vấn đề sau:
- Cách tiếp cận từ bài toán đến chương trình
- Kiểu dữ liệu trừu tượng (Abstract Data Type).
- Kiểu dữ liệu – Kiểu dữ liệu trừu tượng – Cấu trúc dữ liệu.

I. TỪ BÀI TOÁN ĐẾN CHƯƠNG TRÌNH
1. Mô hình hóa bài toán thực tế
Để giải một bài toán trong thực tế bằng máy tính ta phải bắt đầu từ việc xác định bài toán.
Nhiều thời gian và công sức bỏ ra để xác định bài toán cần giải quyết, tức là phải trả lời rõ
ràng câu hỏi "phải làm gì?" sau đó là "làm như thế nào?". Thông thường, khi khởi đầu, hầu

Trang
9

10
Cấu trúc dữ liệu Chương I: Mở đầu

nào đó để thể hiện mối liên quan giữa các lối đi này. Lối nào với lối nào không thể đi đồng
thời, lối nào và lối nào 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. Ở đây ta sẽ dùng một sơ đồ trực
quan như sau: 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, hoặc
cong, hoặc ngoằn ngoèo tuỳ thích. Ta sẽ có một sơ đồ như hình I.2. Như vậy, trên sơ đồ này,
hai lối đi có cạnh nối lại với nhau là hai lối đi không thể cho đi đồng thời.
Với cách biểu diễn như vậy ta đã có một đồ thị (Graph), tức là ta đã mô hình hoá bài toán
giao thông ở trên theo mô hình toán là đồ thị; trong đó mỗi lối đi trở thành một đỉnh của đồ
thị, hai lối đi không thể cùng đi đồng thời được nối nhau bằng một đoạn ta gọi là cạnh của
đồ thị. Bây giờ ta phải xác định các nhóm, với số nhóm ít nhất, mỗi nhóm gồm các lối đi có
thể đi đồng thời, nó ứng với một pha của đèn hiệu điều khiển giao thông. Giả sử rằng, ta
dùng màu để tô lên các đỉnh của đồ thị này sao cho:
¾ Các lối đi cho phép cùng đi đồng thời sẽ có cùng một màu: Dễ dàng nhận thấy rằng
hai đỉnh có cạnh nối nhau sẽ không được tô cùng màu.
¾ Số nhóm là ít nhất: ta phải tính toán sao cho số màu được dùng là ít nhất.
Tóm lại, ta phải giải quyết bài toán sau:
"Tô màu cho đồ thị ở hình I.2 sao cho:
¾ Hai đỉnh có cạnh nối với nhau (hai còn gọi là hai đỉnh kề nhau) không cùng màu.
¾ Số màu được dùng là ít nhất."

Trang

11
Cấu trúc dữ liệu Chương I: Mở đầu

Hai bài toán thực tế “tô màu bản đồ thế giới” và “đèn giao thông” xem ra rất khác biệt

chất đặc biệt này ta có thể dễ dàng tìm lời giải, hoặc
Thay đổi yêu cầu bài toán một ít cho dễ giải quyết, nhưng lời giải tìm được chưa chắc
là lời giải tối ưu. Một cách làm như thế đối với bài toán trên là "Cố gắng tô màu cho đồ thị
Trang

12
Cấu trúc dữ liệu Chương I: Mở đầu

bằng ít màu nhất một cách nhanh chóng". Ít màu nhất ở đây có nghĩa là số màu mà ta tìm
được không phải luôn luôn là số màu của lời giải tối ưu (ít nhất) nhưng trong đa số trường
hợp thì nó sẽ trùng với đáp số của lời giải tối ưu và nếu có chênh lệch thì nó "không chênh
lệch nhiều" so với lời giải tối ưu, bù lại ta không phải "vét cạn" mọi khả năng có thể! Nói
khác đi, ta không dùng giải thuật "vét cạn" mọi khả năng để tìm lời giải tối ưu mà tìm một
giải pháp để đưa ra lời giải hợp lý một cách khả thi về thời gian. Một giải pháp như thế gọi
là một HEURISTIC.
HEURISTIC cho bài toán tô màu đồ thị, thường gọi là giải thuật "háu ăn" (GREEDY) là:
¾ Chọn một đỉnh chưa tô màu và tô nó bằng một màu mới C nào đó.
¾ Duyệt danh sách các đỉnh chưa tô màu. Đối với một đỉnh chưa tô màu, xác định xem
nó có kề với một đỉnh nào được tô bằng màu C đó không. Nếu không có, tô nó bằng màu C
đó.
Ý tưởng của Heuristic này là hết sức đơn giản: dùng một màu để tô cho nhiều đỉnh nhất
có thể được (các đỉnh được xét theo một thứ tự nào đó), khi không thể tô được nữa với màu
đang dùng thì dùng một màu khác. Như vậy ta có thể "hi vọng" là số màu cần dùng sẽ ít
nhất.
Ví dụ: Đồ thị hình I.3 và cách tô màu cho nó

Tô theo GREEDY
(xét lần lượt theo số thứ tự các
đỉnh)
Tối ưu


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status