1. Trang chủ
  2. » Luận Văn - Báo Cáo

SKKN ỨNG DỤNG lý THUYẾT đồ THỊ TRONG VIỆC bồi DƯỠNG học SINH GIỎI TIN học 11

28 792 6

Đ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

Thông tin cơ bản

Định dạng
Số trang 28
Dung lượng 245,5 KB

Nội dung

Lý thuyết đồ thị trong Tin học là một chuyên ngành quan trọng đã được ứng dụng vào nhiều ngành khoa học, kỹ thuật khác nhau vì lý thuyết đồ thị là phương pháp khoa học có tính khái quát

Trang 1

ỨNG DỤNG LÝ THUYẾT ĐỒ THỊ TRONG VIỆC BỒI DƯỠNG HỌC SINH GIỎI TIN HỌC 11

A MỞ ĐẦU

1 Lý do chọn đề tài.

Đổi mới phương pháp dạy học là một nhiệm vụ quan trọng của ngành giáo dục nhằm nâng cao chất lượng đào tạo, góp phần thực hiện công nghiệp hoá hiện đại hóa đất nước

Lý thuyết đồ thị (trong Tin học) là một chuyên ngành quan trọng đã được ứng dụng vào nhiều ngành khoa học, kỹ thuật khác nhau vì lý thuyết đồ thị là phương pháp khoa học có tính khái quát cao, có tính ổn định vững chắc để mã hóa các mối quan hệ của các đối tượng được nghiên cứu

Đồ thị thường thể hiện quan hệ nhị phân giữa các đối tượng rời rạc Đó là quan hệ thường gặp trong nhiều bài toán thực tế Khoa học và kỷ thuật phát triển làm xuất hiện hàng loạt bài toán trong thực tiển được quy về mô hình đồ thị Cùng với thời gian, nhiều thuật toán được xây dựng cho phép giải các bài toán có kích thước dữ liệu lớn hơn và tốc độ thực hiện chương trình nhanh hơn.

Trong các kỳ thi học sinh gỏi Tin học THPT và các kỳ thi Olympic Tin học, bài toán về lý thuyết đồ thị là một trong những nội dung được quan tâm nhiều.

Vận dụng lý thuyết đồ thị trong dạy học học sinh giỏi để mô hình hóa các mối quan hệ chuyển thành phương pháp dạy học đặc thù sẽ nâng cao được hiệu quả dạy học thúc đẩy quá trình tự học tự nghiên cứu của học sinh theo hướng tối ưu hóa đặc biệt nhằm rèn luyện năng lực hệ thống hóa kiến thức và năng lực sáng tạo của học sinh

Nhiều bài toán thực tế đặt ra với những yêu cầu phức tạp, nếu chúng ta giải theo cách thông thường sẽ rất vất vả, chương trình sẽ dài, lủng củng và chạy thường không đúng với những bộ test lớn Việc cung cấp thêm một phương pháp giải bài tập cho học sinh Tin học 11 tham gia bồi dưỡng học sinh giỏi là một nhu cầu cần thiết Mặt khác việc vận dụng lý thuyết đồ thị vào giải toán giúp ta đạt được hai mục tiêu:

- Giải được một lớp bài tập

- Hỗ trợ cho việc lập trình

Hiện nay việc nghiên cứu khai thác một số yếu tố của lý thuyết đồ thị vào giải toán cũng được một số tác giả quan tâm nhưng chưa có những công bố có tính chất hệ thống, xuất phát từ những lý do trên tôi lựa chọn đề tài:

“Ứng dụng lý thuyết đồ thị trong việc dạy bồi dưỡng học sinh giỏi Tin học 11”

Trang 2

2 Mục đích nghiên cứu

Chỉ ra hướng vận dụng lý thuyết đồ thị vào giải các bài toán và tìm ra các biện pháp

để giúp học sinh Tin học 11 tham gia bồi dưỡng học sinh giỏi tại trường THPT hình thành và phát triển năng lực vận dụng lý thuyết đồ thị vào giải bài tập

3 Nhiệm vụ nghiên cứu.

- Tìm hiểu những nội dung cơ bản của lý thuyết đồ thị được trang bị cho học sinh Tin học.

- Chỉ ra hệ thống bài tập có thể vận dụng lý thuyết đồ thị để giải.

- Chỉ ra được những dấu hiệu cụ thể để nhận dạng “Bài toán” có thể khai thác lý thuyết đồ thị trong quá trình giải bài toán

- Chỉ ra các phương án vận dụng lý thuyết đồ thị vào giải toán

- Kiểm tra hiệu quả của các biện pháp, phương án lý thuyết đồ thị vào giải toán trong thực tế

4 Giả thuyết khoa học.

Nếu ta có các phương pháp giúp học sinh Tin học 11 vận dụng kiến thức về lý thuyết

đồ thị vào giải các bài toán thì sẽ giúp học sinh giải quyết được một số lớp bài toán góp phần nâng cao chất lượng dạy học giải bài tập.

5 Phương pháp nghiên cứu.

a Nghiên cứu lý luận

- Nghiên cứu các văn bản, tài liệu chỉ đạo của Bộ GD & ĐT liên quan đến đổi mới phương pháp dạy học, đổi mới ra đề kiểm tra, danh mục thiết bị dạy học Tin học

- SGK, phân phối chương trình, sách GV, chuẩn của bộ môn Tin ở trung học phổ thông, sách nâng cao, sách chuyên đề

- Các tài liệu về lý thuyết đồ thị và những ứng dụng của nó trong thực tiễn cuộc sống

Trang 3

1.1 Định nghĩa đồ thị: Cho tập hợp X khác rỗng, E là tập hợp các cặp phần tử của

X được sắp xếp thứ tự hoặc không sắp thứ tự Cặp (X, E) được gọi là một đồ thị.

Kí hiệu đồ thị là G= (X,E) hoặc đôi khi nếu không gây nhầm lẫn kí hiệu tắt là G

1.2 Một số khái nhiệm.

- Các phần tử thuộc tập X gọi là đỉnh của đồ thị G

- Cho 2 đỉnh x1, x2X, nếu e=(x1,x2)E là cặp sắp thứ tự thì e được gọi là một

cung của đồ thị, hoặc nếu e là cặp không sắp thứ tự thì e được gọi là một cạnh của đồ

thị

- e=(x1,x2) là cung thì x1 là đỉnh đầu của cung, x2 là đỉnh cuối của cung e.

- e=(x1,x2) là cạnh thì x1 và x2 là 2 đỉnh kề của cạnh e hoặc 2 đỉnh thuộc cạnh e.

- Hai đỉnh x1 và x2 (x1≠x2) của đồ thị được gọi là 2 đỉnh kề nhau nếu chúng là 2

đầu của một cạnh hoặc một cung

- Hai cạnh a, b (hoặc 2 cung a, b) gọi là 2 cạnh kề nhau (hoặc 2 cung kề nhau) nếu

chúng có một đỉnh chung

- Khuyên là cạnh (hoặc cung) có 2 đầu trùng nhau.

- Đỉnh treo là đỉnh thuộc duy nhất một cạnh hoặc cung.

- Đỉnh cô lập là đỉnh không thuộc cạnh hoặc cung nào.

1.3 Phân loại đồ thị.

Cho đồ thị G=(X, E), nếu E chỉ gồm các cạnh thì G là đồ thị vô hương Nếu E chỉ gồm các cung thì đồ thị G là đồ thị có hướng Nếu E gồm cả cạnh và cung thì G là đồ thị hỗn hợp.

- Đa đồ thị: Đồ thị G=(X,E) vô hướng (hoặc có hướng) là đa đồ thị khi và chỉ khi

nó là đồ thị không khuyên và có ít nhất một cặp đỉnh được nối với nhau bằng ít nhất 2cạnh (hoặc 2 cung nối theo thứ tự của cặp đỉnh)

- Đơn đồ thị: Đồ thị G=(X,E) vô hướng (hoặc có hướng) là đơn đồ thị khi và chỉ

khi nó là đồ thị không khuyên và mỗi cặp đỉnh được nối với nhau không quá một cạnh(hoặc cung)

Trang 4

2 Biểu diễn đồ thị.

Biểu diễn đồ thị trên máy tính theo cấu trúc nào thì sẽ có giải thuật theo cấu trúc đó Với học sinh Tin học 11, biểu diễn bằng ma trận (mảng 2 chiều) là dễ hiểu và phù hợp nhất Cách khai thác trên mảng 2 chiều đã được học sinh làm nhiều ở SGK Tin học 11

2.2 Biểu diễn đồ thị bằng ma trận liên thuộc (Ma trận kề).

Giả sử đồ thị G=(X, E) có tập đỉnh X=(x1,x2, x3,…,xn), tập cạnh (hoặc cung) là E Taxây dựng ma trận vuông A cấp n sao cho  i,j, 1i,jn có:

Ma trận A là ma trận liên thuộc (ma trận kề)

Nhận xét : Nếu G là độ thị vô hướng thì

Ma trận A sẽ đối xứng qua đường chéo chính,

Trang 5

2.3 Biểu diễn bằng ma trận trọng số.

Trong nhiều bài toán về đồ thị, mỗi cạnh (hoặc cung) e=(xi,xj) của đồ thị thườngđược gắn với một số c (e) gọi là trọng số của cạnh (hoặc cung) e Khi đó thường xâydựng ma trận vuông cấp n là ma trận C có mỗi phần tử C[i,j]=c (e) nếu tồn tại cạnh(hoặc cung) e=(xi,xj), ngược lại khi không có cạnh nối xi với xj thì C[i,j]= (kí hiệu 

là giá trị không xác định) Trong nhiều trường hợp, ngậm định C[i,i]=0 với mọi đỉnh itrong đồ thị không khuyên

3 Tìm kiếm trên đồ thị và tìm thành phần liên thông trên đồ thị.

Hiểu được bản chất của các phép tìm kiếm và tìm thành phần liên thông trên đồ thị chúng ta có thể giải quyết được rất nhiều các dạng bài toán đặt ra (thể hiện ở phần áp dụng) Qua tìm kiếm trên đồ thị chúng ta có thể kết hợp tính toán, thống kê, sắp xếp và tổng hợp được các kết quả.

3.1 Một số khái niệm.

Định nghĩa 1: Đường đi có độ dài k (k nguyên dương) từ đỉnh u tới đỉnh v trên đồ

thị vô hướng G=(V, E) là dãy các đỉnh u=x0, x1, x2, x3,…, xk=v mà các cạnh (xi, xi+1)E,i=0,1,2,…,k-1 Đường đi này còn có thể biểu diễn dưới dạng dãy các cạnh: (x0,x1),(x1,x2),….,(xk-1,xk) Đỉnh u gọi là đỉnh đầu (xuất phát), đỉnh v gọi là đỉnh cuối (đỉnh đích)

của đường đi Đường đi có đỉnh đầu trùng với đỉnh cuối gọi là một chu trình.

Đường đi hay chu trình được gọi là đơn nếu không có cạnh nào bị lặp lại.

Đường đi hay chu trình được gọi là cơ bản nếu không có đỉnh nào bị lặp lại (trừ

trường hợp trong chu trình thì đỉnh đầu trùng đỉnh cuối là được lặp lại)

Định nghĩa 2: Đường đi có độ dài k (k nguyên dương) từ đỉnh u tới đỉnh v trên đồ

thị có hướng G=(V, E) là dãy các đỉnh u=x0, x1, x2, x3,…, xk=v mà các cung (xi, xi+1)E,i=0,1,2,…,k-1 Đường đi này còn có thể biểu diễn dưới dạng dãy các cung: (x0,x1),(x1,x2),….,(xk-1,xk) Đỉnh u gọi là đỉnh đầu (xuất phát), đỉnh v gọi là đỉnh cuối (đỉnh đích)

của đường đi Đường đi có đỉnh đầu trùng với đỉnh cuối gọi là một chu trình (mạch vòng).

Đường đi hay chu trình được gọi là đơn nếu không có cung nào bị lặp lại.

Đường đi hay chu trình được gọi là cơ bản nếu không có đỉnh nào bị lặp lại (trừ

trường hợp trong chu trình thì đỉnh đầu trùng đỉnh cuối là được lặp lại)

Định nghĩa 3: Đồ thị vô hướng G=(V,E) được gọi là liên thông nếu luôn tìm được

đường đi giữa 2 đỉnh bất kỳ của nó

Định nghĩa 4: Cho đồ thị vô hướng G=(V,E) và đồ thị con của G là đồ thị

G’=(V’,E’) Đồ thị G’ được gọi là một vùng liên thông (hoặc thành phần liên thông)

của G nếu:

+ G’ liên thông;

+ Không tồn tại đường đi nào từ một đỉnh thuộc G’ tới 1 đỉnh không thuộc G’ (nóicách khác là bảo đảm tính tối đại của liên thông trong G’)

Trang 6

VD: Trong hình 5 xét 2 đồ thị G và H: G chỉ có 1 vùng liên thông duy nhất, H có 3

vùng liên thông là H1, H2, H3

Định nghĩa 5: Đỉnh v được gọi là đỉnh khớp (đỉnh rẻ nhánh) của đồ thị vô hướng

G=(V,E) nếu khi loại bỏ đỉnh v và các cạnh liên thuộc với nó thì số thành phần liênthông của G tăng thêm

Cạnh eE được gọi là cầu nếu loại bỏ nó khỏi đồ thị G thì số thành phần liên thôngcủa G tăng thêm 1 đơn vị

3.2 Tìm kiếm trên đồ thị.

Tìm kiếm trên đồ thị là duyệt (thăm) tất cả các đỉnh của đồ thị, mỗi đỉnh đúng 1 lần Rất nhiều thuật toán được xây dựng dựa trên cơ sở duyệt tất cả các đỉnh của đồ thịsao cho mỗi đỉnh của nó được viếng thăm đúng 1 lần Vì vậy, việc xây dựng nhữngthuật toán cho phép duyệt một cách hệ thống tất cả các đỉnh của đồ thị là một vấn đềquan trọng Các thuật toán này giữ một vai trò quan trọng trong việc thiết kế các thuậttoán trên đồ thị

Trên đồ thị có 2 thuật toán tìm kiếm cơ bản:

- Thuật toán tìm kiếm theo chiều sâu (DFS.)

- Thuật toán tìm kiếm theo chiều rộng (BFS).

3.3 Tìm đường đi và kiểm tra tính liên thông.

Tìm đường đi và kiểm tra tính liên thông là một hình thức ứng dụng các thuật toántìm kiếm trên đồ thị Đường đi tìm được theo thuật toán tìm kiếm theo chiều rộng làđường đi ngắn nhất (theo số cạnh) từ đỉnh s đến đỉnh t

4 Đường đi ngắn nhất trên đồ thị.

Trong các ứng dụng thực tế Bài toán tìm đường đi ngắn nhất giữa 2 đỉnh của một đồthị liên thông có một ý nghĩa to lớn Có thể dẫn về bài toán như vậy nhiều bài toán thực

tế quan trọng Ví dụ, Bài toán chọn một hành trình tiết kiệm nhất (theo tiêu chuẩnkhoảng cách hoặc thời gian hoặc chi phí) trên một mạng giao thông đường bộ, đườngthủy hoặc đường không; bài toán chọn một phương pháp tiết kiệm để đưa một hệ độnglực từ trạng thái xuất phát đến trạng thái đích, bài toán lập lịch thi công các công đoạntrong một công trình thi công lớn,…

Trang 7

II THỰC TRẠNG CỦA VẤN ĐỀ.

2 Thuận lợi.

- Lý thuyết đồ thị có thể giải quyết được nhiều bài toán đặt ra trong thực tế phùhợp với đối tượng học sinh giỏi Tin học 11, đặc biệt là những bài toán thể hiện quan

hệ nhị phân giữa các đối tượng rời rạc

- Vận dụng lý thuyết đồ thị giúp học sinh có thêm một luồng kiến thức mới để làmgiàu hơn tư duy thuật toán của mình

- Có khá nhiều tài liệu giới thiệu về các vấn đề liên quan đến lý thuyết đồ thị như:sách cấu trúc dữ liệu và giải thuật, Sách Toán rời rạc,…và các tài liệu trên mạngInternet

- Giáo viên và học sinh phát huy được tính năng động trong quá trình dạy - họcđạt kết quả cao hơn

- Một số kiến thức dễ sử dụng và hiệu quả cao Ví dụ: phép tìm kiếm và kiểm travùng liên thông trên đồ thị

3 Khó khăn.

- Trong việc nắm bắt và hiểu được các khái niệm cơ bản liên quan đến lý thuyết đồ

thị

- Lý thuyết đồ thị rất rộng và nhiều phần kiến thức khó nên không thể truyền tải hết

tới học sinh và khó để đưa vào hết trong đề tài

- Đưa ra các giải thuật bằng ngôn ngữ Pascal để minh hoạ các kiến thức đưa ra ởphần cơ sở lý luận

- Đưa ra hệ thống các dạng bài tập có thể giải quyết hiệu quả bằng lý thuyết đồ thị

và cách giải các bài tập đó

Để khắc phục được một phần khó khăn nêu trên, trong đề tài tôi chỉ đề cập đếnnhững phần quan trọng của lý thuyết đồ thị có ứng dụng nhiều trong thực tế và phùhợp với học sinh THPT, đặc biệt là học sinh Tin học 11

III THỰC TIỂN ÁP DỤNG.

1 Hai thuật toán và chương trình tìm kiếm trên đồ thị.

1.1 Tìm kiếm theo chiều rộng.

Ý tưởng: Đỉnh xuất phát v ở đây cũng được thăm đầu tiên nhưng có khác với

DFS ở chổ là: Sau đó các đỉnh chưa được thăm mà là lân cận của v sẽ được thăm kế tiếp theo nhau, rồi mới đến các đỉnh chưa được thăm là lân cận lần lượt của các đỉnh này và cứ tương tự như vậy.

VD: Với đồ thị như hình 6 thì 1 được thăm rồi đến 2, 3…tiếp theo là 4, 5, và 6, 7,

Trang 8

Quá trình duyệt theo chiều rộng có thể mô tả bởi thủ tục đệ quy như sau: Procedure BFS(v); {Tìm kiếm theo chiều rộng bắt đầu từ đỉnh v}

Chương trình duyệt đồ thị theo chiều rộng được cài đặt cụ thể là:

Var chuaxet:array[1 100] of boolean;

Write(‘ Nhap so dinh cua do thi:’); readln(n);

Write(‘ Nhap so lieu ma tran ke:’);

Trang 9

a[i,i]:=0; writeln;

end;

End;

(*============================================*)

Procedure BFS(i:integer);{Tìm kiếm theo chiều rộng bắt đầu từ đỉnh i}

Var u, dauQ, CuoiQ:integer;

Fillchar(Chuaxet, sizeof(chuaxet), true); {khởi tạo mảng Chuaxet}

For s:=1 to n do if not chuaxet[s] then BFS(s);

END.

1.2 Tìm kiếm theo chiều sâu

Ý tưởng: Đỉnh xuất phát v được thăm Tiếp theo đó, một

đỉnh y chưa được thăm, mà là lân cận của v, sẽ được chọn và

một phép tìm kiếm theo chiều sâu xuất phát từ y lại được thực

hiện

Khi một đỉnh u đã được “với tới” mà mọi đỉnh lân cận của

nó đều đã được thăm rồi, thì ta sẽ quay ngược lên đỉnh cuối

cùng vừa được thăm, (mà còn có đỉnh y lân cận với nó chưa

được thăm), và một phép tìm kiếm theo chiều sâu xuất phát từ y

lại được thực hiện Phép tìm kiếm sẽ kết thúc khi không còn

một nút nào chưa được thăm mà vẫn có thể

với tới được từ một nút đã được thăm.

VD: Ta có đồ thị như hình 6.

1

2 4

8

3 7

Trang 10

Quá trình duyệt theo chiều sâu có thể mô tả bởi thủ tục đệ quy như sau:

Procedure DFS(v); {tìm theo chiều sâu bắt đầu từ đỉnh v, các biến Chuaxet, ke

Chương trình được cài đặt cụ thể là:

Var chuaxet:array[1 100] of boolean;

Write(‘ Nhap so dinh cua do thi:’); readln(n);

Write(‘ Nhap so lieu ma tran ke:’);

Trang 11

For y:=1 to n do {Duyệt mọi đỉnh y}

If (a[v,y]=1) and (not chuaxet[y]) then DFS(y);

{y kề với v và chưa được thăm thì thăm y}

End;

BEGIN

Nhapsolieu;

Fillchar(Chuaxet, sizeof(chuaxet), true); {khởi tạo mảng Chuaxet}

For s:=1 to n do if not chuaxet[s] then DFS(s);

END.

2 Tìm đường đi và kiểm tra tính liên thông.

a Bài toán tìm đường đi giữa 2 đỉnh

Giả sử s và t là 2 đỉnh nào đó của đồ thị Hãy tìm đường đi từ s đến t.

Ý tưởng: Như trên đã phân tích, thủ tục DFS(v) (hoặc BFS(v)) sẽ cho phép thăm tất

cả các đỉnh thuộc cùng một thành phần liên thông với s Vì vậy, sau khi thực hiện xongthủ tục, nếu Chuaxet[t]=true, thì điều đó có nghĩa là không có đường đi từ s đến t Cònnếu Chuaxet[t]=false thì t thuộc cùng thành phần liên thông với s, hay nói cách khác làtồn tại đường đi từ s đến t Trong trường hợp tồn tại đường đi, để ghi nhận đường đi, tadùng thêm biến Truoc[v] để ghi nhận đỉnh đi trước đỉnh v trong đường đi tìm kiếm từ sđến v Khi đó, đối với thủ tục DFS(v) cần sửa đổi câu lệnh if trong nó như sau:

b Tìm các thành phần liên thông của đồ thị.

Bài toán đặt ra: Hãy cho biết đồ thị có bao nhiêu thành phần (vùng) liên thông

và mỗi thành phần liên thông gồm những đỉnh nào.

Ý tưởng: Do thủ tục DFS(v) (hoặc BFS(v)) cho phép thăm tất cả các đỉnh thuộc

cùng thành phần liên thông với v, nên số thành phần liên thông của đồ thị chính bằng sốlần gọi đến thủ tục này Nghĩa là nếu trong chương trình chính gọi đến thủ tục DFS(v) 3lần thì kết luận có 3 thành phần liên thông Vấn đề còn lại là ghi nhận các đỉnh của từngthành phần liên thông Ta dùng thêm 1 biến có tên DemLT để đếm số thành phần liênthông Khởi tạo biến này có giá trị bằng 0

Trang 12

Chương trình tìm đường đi từ đỉnh s tới đỉnh t và tìm số thành phần liên thông của đồ thị như sau:

Write(‘ Nhap so dinh cua do thi:’); readln(n);

Write(‘ Nhap so lieu ma tran ke:’);

Trang 13

Writeln(‘ So thanh phan lien thong cua do thi la:’, DemLT);

For i:=1 to DemLT do

Ngày đăng: 15/09/2015, 16:44

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w