Giải pháp cũ thường làm:Khi giảng dạy phần "BFS và các ứng dụng" cho học sinh THPT thường gặp phải haivấn đề chính đó là chưa có hệ thống bài tập rõ ràng và chuyên đề về đồ thị tương đối
SỞ GIÁO DỤC VÀ ĐÀO TẠO NINH BÌNH TRƯỜNG THPT CHUYÊN LƯƠNG VĂN TỤY - - SÁNG KIẾN KINH NGHIỆM ĐỀ TÀI: “BFS VÀ CÁC ỨNG DỤNG” Tác giả sáng kiến: Bùi Văn Hậu Nguyễn Thị Thu Hà Phạm Thị Thu Thủy Đơn vị cơng tác: Tổ Tốn-Tin Trường THPT chun Lương Văn Tụy NĂM HỌC : 2022-2023 Phần A: BẢN TÓM TẮT SÁNG KIẾN KINH NGHIỆM Tên sáng kiến, lĩnh vực áp dụng Tên sáng kiến: “BFS VÀ CÁC ỨNG DỤNG” Lĩnh vực áp dụng: giảng dạy môn chuyên lớp 10 Nội dung a Giải pháp cũ thường làm: Khi giảng dạy phần "BFS ứng dụng" cho học sinh THPT thường gặp phải hai vấn đề chưa có hệ thống tập rõ ràng chuyên đề đồ thị tương đối đại phận giáo viên dạy Tin học tỉnh * Về vấn đề thiếu hệ thống tập rõ ràng, thơng thường giáo viên giải thích lý thuyết cung cấp số ví dụ để học sinh hiểu áp dụng vào thực tế Tuy nhiên, điều khiến cho học sinh gặp khó khăn việc nắm vững kiến thức áp dụng vào tập thực tế Bài tập Tin học liên quan tới BFS đề thi học sinh giỏi cấp tỉnh thường đa dạng Để có tài liệu dạy đội tuyển, giáo viên thường phải dày cơng tìm tòi từ nhiều nguồn tư liệu Khi soạn giảng, giáo viên bắt buộc phải tham khảo nhiều tài liệu từ nhiều phương tiện, nhiều thời gian công sức, tốn nhiều tiền bạc * Về vấn đề chuyên đề đồ thị tương đối khó đại phận giáo viên dạy Tin học tỉnh Do nhiều giáo viên cảm thấy khó khăn việc giảng dạy khơng có đủ kiến thức đồ thị để giải thích hướng dẫn cho học sinh Giáo viên phải đối mặt với nhiều thách thức việc giảng dạy phần "BFS ứng dụng" Một số khó khăn thường gặp là: Thiếu tài liệu sách báo chuyên ngành: Việc tiếp cận tài liệu sách báo chun ngành đồ thị thuật tốn BFS khơng phải dễ dàng Vì tài liệu nguồn internet rời rạc Điều khiến cho giáo viên khó nắm bắt cập nhật kiến thức lĩnh vực Thiếu kinh nghiệm giảng dạy: Nhiều giáo viên chưa có đủ kinh nghiệm kỹ việc giảng dạy phần "BFS ứng dụng" Điều khiến cho việc truyền đạt kiến thức hướng dẫn cho học sinh gặp nhiều khó khăn b Giải pháp cải tiến: Nhóm tác giả sử dụng hệ thống kiến thức thông qua việc phân loại dạng BFS thuật toán tập ứng dụng Do BFS ứng dụng xây dựng logic, đa dạng, phong phú, thể kiến thức bao chùm từ đến phức tạp, từ dễ đến khó, phù hợp với trình độ nhận thức học sinh, dành cho nhiều đối tượng học sinh dự thi học sinh giỏi THPT Đối với học sinh lần tiếp cận với lý thuyết đồ thị không tránh khỏi ngỡ ngàng, lạ lẫm, có phần trừu tượng khó hiểu Để giúp đỡ giải vấn đề đó, chuyên đề nhóm tác giả trình bày phương pháp duyệt theo chiều rộng (BFS) đồ thị ứng dụng Phần lý thuyết rõ ràng Tài liệu giáo khoa chuyên Tin, nhóm tác giả trình bày lại theo hướng tiếp cận khác nhằm mục đính giúp cho giáo viên học sinh dễ dàng nghiên cứu Trong nội dung nghiên cứu, nhóm tác giả trình bày ứng dụng BFS tập cho học sinh luyện tập, tập xếp theo mức độ từ dễ tới khó, có hướng dẫn sơ lược, có link test, số để link để giáo viên học sinh tham khảo thêm Nội dung nghiên cứu dùng để dạy em học sinh lớp 10 chuyên Tin, học đến phần lý thuyết đồ thị đối tượng học sinh trường phổ thông tỉnh ôn thi HSG tiếp cận Hệ thống tập lựa chọn đưa vào nội dung nghiên cứu sưu tầm chủ yếu nguồn SPOJ VNOI để thuận tiện cho bạn đọc luyện tập Code mẫu phần tác giả, phần tham khảo Internet Trong dạng theo mức độ nhận thức, tập xếp theo chủ đề với mức độ kiến thức Hiệu kinh tế, xã hội dự kiến đạt a Hiệu kinh tế “BFS ứng dụng” không gây tốn kinh tế phụ huynh học sinh nhà trường, áp dụng thường xuyên, liên tục tiết học lớp; góp phần tích cực chuyển biến cách dạy, học giáo viên học sinh chuyên tin đối tượng học sinh giỏi không thuộc lớp chuyên, trường chuyên b Hiệu xã hội - Nhiều học sinh tự giải tập Tài liệu giáo khoa chuyên tin số tập trang nguồn SPOJ, VNOI - Nhiều học sinh thực yêu thích, đam mê mơn Tin học Qua em có định hướng nghề nghiệp sau - Kết thu thể qua kiểm tra qua hai năm học khả quan Cụ thể: Kết kiểm tra học kì II năm học 2021 – 2022 lớp thực nghiệm 10 chuyên tin K63 Kh Giỏi L ớp Tb Yếu Sĩ số Số lượng % Số lượng % Số lượng % Số lượng % 28.6 23 65.7% 10 5.7% 0% Tin % - Kết kiểm tra học kì II năm học 2022 – 2023 lớp thực nghiệm 10 chuyên tin K64 Giỏi Khá Tb Yếu L Sĩ ớp số Tin Số % lượng 24 Số % lượng 8.6% 10 Số Số lượng 8.6% lượng 9% Điều kiện khả áp dụng Chúng xin cam đoan thông tin nêu đơn trung thực, thật, sai chúng tơi xin hồn tồn chịu trách nhiệm % Phần B: PHỤ LỤC (Mục đích: Trình bày chi tiết giải pháp sáng kiến) Giới thiệu Trong chun đề tơi trình bày phương pháp duyệt theo chiều rộng (BFS) đồ thị ứng dụng Phần lý thuyết rõ ràng Tài liệu giáo khoa chuyên Tin, tơi trình bày lại theo hướng tiếp cận cá nhân, tài liệu dùng để dạy em học sinh lớp 10 chuyên Tin, học đến phần lý thuyết đồ thị Đối với học sinh lần tiếp cận với lý thuyết đồ thị không tránh khỏi ngỡ ngàng, lạ lẫm, có phần trừu tượng khó hiểu, để giúp đỡ giải vấn đề đó, phạm vi chuyên đề trình bày ứng dụng BFS tập cho học sinh luyện tập, tập xếp theo mức độ từ dễ tới khó, có hướng dẫn sơ lược, có link test, số để link để bạn đọc tham khảo thêm Các tập sưu tầm chủ yếu nguồn SPOJ VNOI để thuận tiện cho bạn đọc luyện tập Code mẫu phần tác giả, phần tham khảo Internet Do hạn chế thời gian trình độ, chuyên đề phản ánh góc tiếp cận cá nhân q trình dạy học phần BFS nên cịn có nhiều thiếu sót, mong nhận ý kiến đóng góp bạn đọc để hồn thiện Xin chân thành cảm ơn Yêu cầu kiến thức Để tiếp cận với chuyên đề này, yêu cầu người học cần chuẩn bị trước số khái niệm lý thuyết đồ thị, bao gồm: Một đồ thị kí hiệu G = (V,E) Trong đó: V tập đỉnh đồ thị Kí hiệu |V| = N số đỉnh đồ thị E tập cạnh đồ thị Kí hiệu |E| = M số cạnh đồ thị Đỉnh: Đỉnh biểu diễn đối tượng đồ thị, thường đánh dấu số 1, 2,… kí hiệu chữ in thường u,v,… Cạnh: Cạnh nối đỉnh x với đỉnh y tập gồm hai phần tử (x,y) (x,y) thường vẽ dạng đoạn thẳng nối hai đỉnh Cạnh có hướng (cung): Là cặp đỉnh có thứ tự Trong cặp có thứ tự đó, đỉnh thứ gọi đỉnh đầu, đỉnh thứ hai đỉnh cuối Cạnh vô hướng: Không quan tâm đến hướng coi hai đỉnh Khun: Là cạnh nối đỉnh với Hai cạnh song song: Là hai cạnh nối hai đỉnh u, v Đồ thị có hướng: Là đồ thị mà tất cạnh đồ thị có hướng Đồ thị vô hướng: Là đồ thị mà tất cạnh đồ thị vô hướng Đơn đồ thị: Là đồ thị khơng có khun khơng có cạnh song song Đa đồ thị: Là đồ thị đơn đồ thị Bậc: Trong đồ thị vô hướng, bậc đỉnh v đồ thị G, ký hiệu dG(u), số cạnh liên thuộc với v, đó, khun tính hai lần Ta có định lí: Giả sử G=(V,E) đồ thị vơ hướng, tổng bậc đỉnh V lần số cạnh ∑ d G ( v )=m∗2 v ∈V Hệ quả: Trong đồ thị vô hướng, số đỉnh bậc lẻ chẵn Trong đồ thị có hướng, ta định nghĩa bán bậc u số cung khỏi nó, kí + hiệu d G(u), bán bậc vào u số cung vào đỉnh đó, kí hiệu d-G(u) Giả sử G=(V, E) đồ thị có hướng, tổng bán bậc vào tổng bán bậc số cung đồ thị Đường chu trình: Một dãy đỉnh P = (p0, p1, …, pk) cho (Pi-1, Pi) ∊ E, ∀i: ≤ i ≤ k gọi đường Một đường chu trình p0 = pk Liên thơng: Một đồ thị vô hướng liên thông tồn đường hai cặp đỉnh thuộc đồ thị Một đồ thị có hướng liên thơng yếu phiên vơ hướng đồ thị liên thơng Biểu diễn đồ thị máy tính Có nhiều cách để biểu diễn đồ thị máy tính, tùy thuộc vào tính chất đồ thị thuật tốn áp dụng với đồ thị… Ta lưu kèm theo thông tin trọng số, giá trị phù hợp với cạnh *Biển diễn đồ thị theo ma trận kề *Biểu diễn đồ thị danh sách cạnh *Biểu diễn đồ thị danh sách kề *Biểu diễn đồ thị danh sách liền thuộc BFS ứng dụng 3.1 Thuật toán duyệt đồ thị ưu tiên chiều rộng Thuật toán duyệt đồ thị ưu tiên chiều rộng (Breadth-first search - BFS) thuật tốn tìm kiếm thiết yếu đồ thị Mà đó, đỉnh gần đỉnh xuất phát duyệt trước Ứng dụng BFS giúp ta giải tốt số tốn thời gian khơng gian tối thiểu Đặc biệt tốn tìm kiếm đường ngắn từ đỉnh gốc tới tất đỉnh khác Trong đồ thị khơng có trọng số tất trọng số nhau, thuật tốn ln trả đường ngắn Ngồi ra, thuật tốn cịn dùng để tìm thành phần liên thông đồ thị, kiểm tra đồ thị hai phía, … Ý tưởng Với đồ thị khơng trọng số đỉnh nguồn s Đồ thị đồ thị có hướng vơ hướng, điều khơng quan trọng thuật tốn Có thể hiểu thuật toán lửa lan rộng đồ thị: Ở bước thứ 0, có đỉnh nguồn s cháy Ở bước tiếp theo, lửa cháy đỉnh lại lan sang tất đỉnh kề với Trong lần lặp thuật tốn, "vịng lửa" lại lan rộng theo chiều rộng Những đỉnh gần s bùng cháy trước Chính xác hơn, thuật tốn mô tả sau: Đầu tiên ta thăm đỉnh nguồn s Việc thăm đỉnh s phát sinh thứ tự thăm đỉnh (u1,u2,…up) ( v1,v2,…,vq) kề với s (những đỉnh gần s nhất) Tiếp theo, ta thăm đỉnh u1, thăm đỉnh u1 lại phát sinh yêu cầu thăm đỉnh (v1,v2,…,vq) (v1,v2,…,vq) kề với u1 Nhưng rõ ràng đỉnh v “xa” s đỉnh u nên chúng thăm tất đỉnh u thăm Tức thứ tự thăm đỉnh là: s, u1,u2,…up, v1,v2,…,vq, … Thuật tốn tìm kiếm theo chiều rộng sử dụng danh sách để chứa đỉnh “chờ” thăm Tại bước, ta thăm đỉnh đầu danh sách, loại khỏi danh sách cho đỉnh kề với chưa thăm xếp hàng vào cuối danh sách Thuật toán kết thúc danh sách rỗng Thuật toán Thuật toán sử dụng cấu trúc liệu hàng đợi (queue) để chứa đỉnh duyệt theo thứ tự ưu tiên chiều rộng Bước 1: Khởi tạo Các đỉnh trạng thái chưa đánh dấu Ngoại trừ đỉnh nguồn s đánh dấu Một hàng đợi ban đầu chứa phần tử s Bước 2: Lặp lại bước sau hàng đợi rỗng: Lấy đỉnh u khỏi hàng đợi Xét tất đỉnh v kề với u mà chưa đánh dấu, với đỉnh v đó: o Đánh dấu v thăm o Lưu lại vết đường từ u đến v o Đẩy v vào hàng đợi (đỉnh v chờ duyệt bước sau) Bước 3: Truy vết tìm đường Mơ tả Xét đồ thị sau đây, với đỉnh nguồn s=1 : Đánh giá Ta sử dụng mảng moveX[] moveY[] để dễ dàng duyệt qua tất ô kề cạnh với ô xét Độ phức tạp Với test: Vì ma trận duyệt lần nên ta độ phức tạp O(N×M) Ta thêm O(4×N×M) ta phải duyệt qua 44 kề cạnh với ma trận Nhìn chung, độ phức tạp thuật tốn O(t×(N×M+4×N×M)) Với t số lượng test 3.5 Ứng dụng BFS để tìm đường ngắn đồ thị khơng trọng số Những sử dụng BFS thường yêu cầu tìm số bước (hoặc đường ngắn nhất) từ điểm đầu đến điểm cuối Bên cạnh đó, đường điểm thường có chung trọng số (và thường 1) Phổ biến dạng cho bảng N×M, có qua khơng qua Bảng mê cung, sơ đồ, thành phố thứ thứ tương đương Có thể nói toán BFS kinh điển Hãy xem xét toán sau đây: Bài toán Đề Cho bảng hình chữ nhật chia thành lưới vng kích thước R×C (1≤R,C≤100) Mỗi mang giá trị sau : , * , B , C Cơ bị Bessie đứng C cần đến B Mỗi bước Bessie từ ô vuông sang ô vuông khác kề cạnh không vào ô * hay khỏi bảng Hãy tìm số bước để Bessie đến ô B Đảm bảo có B C bảng, tồn đường từ C đến B Dữ liệu: - Dòng đầu hai số R, C - R dòng dòng chứa C kí tự là: * B C Kết quả: đưa kết toán Phân tích Theo mối quan hệ xây dựng đề bài, Bessie di chuyển từ vng sang vng khác kề cạnh Từ đó, ta xây dựng mơ hình đồ thị toán: Gọi đỉnh đồ thị tương ứng với ô lưới ô vuông Tồn cạnh nối cặp đỉnh (u,v) từ tương ứng với đỉnh u di chuyển đến ô tương ứng với đỉnh v (đồng nghĩa, ô tương ứng với đỉnh u kề cạnh với ô tương ứng với đỉnh v ô ô * ) Sau xây dựng đồ thị, toán quy sau: Tìm đường ngắn từ đỉnh tương ứng với ô C đến đỉnh tương ứng với ô B Độ dài đường ngắn số bước mà Bessie cần thực Vậy để tìm kết tốn, ta áp dụng thuật toán BFS Cài đặt Cấu trúc liệu: Hằng số maxN = 110 Mảng d[][] - Mảng lưu số bước để từ xuất phát đến ô khác Mảng visit[][] - Mảng đánh dấu ô qua Hàng đợi q - Chứa ô duyệt theo thứ tự ưu tiên chiều rộng