1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình CTDL và giải thuật

137 533 0

Đ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 137
Dung lượng 1,41 MB

Nội dung

Giáo trình CTDL và giải thuật do trường CNTT và TT Thái NGuyên bạn hành năm 2014

1 LỜI NÓI ĐẦU Để đáp ứng nhu cầu học tập của các bạn sinh viên, nhất là sinh viên chuyên ngành công nghệ thông tin, chuyên ngành tin học kinh tế, chuyên ngành Điện tử Viễn thông các tác giả Bộ môn Công nghệ phần mềm - Khoa Công Nghệ Thông Tin - Trường Đại học Thái nguyên chúng tôi đã tiến hành biên soạn tập các bài giảng chính trong chương trình học đào tạo theo tín chỉ. Bài giảng môn Cấu Trúc Dữ Liệu Thuật toán này được biên soạn cơ bản dựa trên quyển: “Cấu trúc dữ liệu & thuật toán” của tác giả Đinh Mạnh Tường, Nhà xuất bản Khoa học Kỹ thuật. “Cấu trúc dữ liệu giải thuật”, của tác giả Đỗ Xuân Lôi, “ Cấu trúc dữ liệu + giải thuật= Chương trình” của N. Wirth. Giáo trình này cũng được biên soạn dựa trên kinh nghiệm giảng dạy nhiều năm môn Cấu Trúc Dữ Liệu Giải Thuật của chúng tôi. Tài liệu này được soạn theo đề cương chi tiết môn Cấu Trúc Dữ Liệu v à t h u ậ t t o án của sinh viên chuyên ngành Công nghệ thông tin của Khoa Công Nghệ Thông Tin - Trường Đại Học Thái nguyên. Mục tiêu của nó nhằm giúp các bạn sinh viên chuyên ngành có một tài liệu cô đọng dùng làm tài liệu học tập, nhưng chúng tôi cũng không loại trừ toàn bộ các đối tượng khác tham khảo. Chúng tôi nghĩ rằng các bạn sinh viên không chuyên tin những người quan tâm tới cấu trúc dữ liệu giải thuật sẽ tìm được trong này những điều hữu ích. Mặc dù đã rất cố gắng nhiều trong quá trình biên soạn giáo trình nhưng chắc chắn giáo trình sẽ còn nhiều thiếu sót hạn chế. Rất mong nhận được sự đóng góp ý kiến của sinh viên các bạn đọc để tập bài giảng ngày một hoàn thiện hơn có thể trở thành một giáo trình thực sự hữu ích. Thái Nguyên, 08/2013 Các tác giả 2 MỤC LỤC 1.3.1 Sự cần thiết phải phân tích giải thuật 21 1.3.2 Thời gian thực hiện của giải thuật 22 3 PHẦN TỔNG QUAN 1. Mục đích yêu cầu Môn học cấu trúc dữ liệu cung cấp cho sinh viên một khối lượng lớn các kiến thức cơ bản về các cấu trúc dữ liệu các phép toán trên từng cấu trúc đó. Sau khi học xong môn này, sinh viên cần phải: - Nắm vững các khái niệm cơ bản như: kiểu dữ liệu, kiểu dữ liệu trừu tượng, mô hình dữ liệu, giải thuật cấu trúc dữ liệu, - Nắm vững cài đặt được các mô hình dữ liệu, kiểu dữ liệu trừu tượng như danh sách, ngăn xếp, hàng đợi, cây, tập hợp, bảng băm, đồ thị t rê n má y tín h bằng một ngôn ngữ lập trình cụ thể, ví dụ: Pascal, C, - Vận dụng được các kiểu dữ liệu trừu tượng, các mô hình dữ liệu để mô hình hóa các bài toán thực tế, lựa chọn cấu trúc dữ liệu thích hợp để lập trình cho giải bài toán đặt ra 2. Đối tượng sử dụng Môn học cấu trúc dữ liệu được dùng để giảng dạy cho các sinh viên sau: - Sinh viên chuyên ngành công nghệ thông tin (môn bắt buộc ) - Sinh viên chuyên ngành tin học kinh tế (môn bắt buộc) - Sinh viên chuyên ngành Điện tử - Viễn thông tự động hóa (môn bắt buộc) 3. Nội dung cốt lõi Nội dung giáo trình gồm 5 chương đuợc trình bày trong 45 tiết cho sinh viên, trong đó có khoảng 30 tiết lý thuyết 15 tiết bài tập thực hành. Nội dung bài giảng chú trọng về các cấu trúc dữ liệu các giải thuật trên các cấu trúc dữ liệu đó, bên cạnh đó, kết thúc mỗi chương bài giảng còn cung cấp các câu hỏi thảo luận bài tập thực hành để sinh viên cùng thảo luận, thực hành, tham khảo thêm từ nhiều nguồn tài liệu khác nhằm giúp học viên hiểu thấu lý thuyết đã cung cấp trong chương, tích cực hóa nhận thức của người học thông qua các hoạt động thảo luận giữa người học giảng viên. Với mỗi mô hình dữ liệu kiểu dữ liệu trừu tượng, chúng tôi luôn cố gắng trình bày từ mức khái niệm, đến các phép toán cơ bản trên mô hình, đến các dạng biểu diễn trên máy tính/ các cấu trúc dữ liệu tương ứng với mô hình dữ liệu/kiểu dữ liệu trừu tượng trong ngôn ngữ pascal cài đặt các phép toán cơ bản trên một dạng biểu diễn nào đó. Sự cố gắng này của chúng tôi nhằm mục đích giúp người học hiểu được bản chất của từng mô hình dữ liệu/ kiểu dữ liệu, người đọc có thể bám vào định nghĩa của từng mô hình/kiểu dữ liệu trừu tượng để cài đặt nó trên máy tính với các dạng biểu diễn khác nhau sao 4 cho thể hiện được định nghĩa này trên máy tính. Người đọc nếu không thành thạo ngôn ngữ lập trình pascal có thể dùng ngôn ngữ lập trình khác để biểu diễn mô hình/ kiểu dữ liệu trừu tượng cài đặt các phép toán cơ bản trên mô hình sử dụng ngôn ngữ lập trình đó. Bài giảng này chúng tôi sử dụng pascal vì đây là một ngôn ngữ được trang bị hầu hết cho các sinh viên trước khi học môn học này, là một ngôn ngữ trong sáng người đọc dễ dàng hiểu các câu lệnh của nó ứng với thao tác thực tế nào. Chương 1: Trình bày cách tiếp cận từ một bài toán đến chương trình, nó mô tả quá trình từ việc mô hình hoá bài toán thực tế thành mô hình toán học, lựa chọn xây dựng cấu trúc dữ liệu theo mô hình bài toán, viết giải thuật giải quyết bài toán các bước tinh chế giải thuật để đưa đến chương trình cài đặt cụ thể sử dụng một ngôn ngữ lập trình nào đó. Chương 2: Trình bày mô hình dữ liệu danh sách, các cấu trúc dữ liệu để biểu diễn danh sách trên máy tính, chúng tôi tập trung trình bày cấu trúc danh sách liên kết đơn, cấu trúc danh sách liên kết vòng cấu trúc danh sách liên kết kép . Ngăn xếp hàng đợi cũng được trình bày trong chương này được xem là hai kiểu dữ liệu trừu tượng từ mô hình danh sách. Chương này có nhiều cài đặt tương đối chi tiết để các bạn học viên mới tiếp cận với lập trình có cơ hội nâng cao khả năng lập trình trong ngôn ngữ pascal, từ đó học viên có thể mở rộng cài đặt sang các ngôn ngữ lập trình khác. Chương 3: Chương này giới thiệu các mô hình dữ liệu cây bao gồm cây tổng quát, cây nhị phân, cây nhị phân tìm kiếm. Với mỗi mô hình cây chúng tôi trình bày các nội dung cần thiết như: khái niệm cây, các phép toán cơ bản trên cây, các phép duyệt cây, các dạng biểu diễn cây trên máy tính hay còn gọi là các cấu trúc dữ liệu tương ứng với mô hình dữ liệu cây, sau đó chúng tôi lựa chọn một dạng biểu diễn cây cụ thế để cài đặt các phép toán cơ bản trên dạng biểu diễn đó, bạn đọc có thể vận dụng để cài đặt các phép toán trên cây với các dạng biểu diễn cây khác phải phân tích để thấy rõ ưu/nhược điểm của từng dạng biểu diễn cây, phân tích rõ vai trò của từng mô hình dữ liệu cây như: cây tổng quát, cây nhị phân, cây nhị phân tìm kiếm. Chương 4: Chương này chúng tôi trình bày mô hình dữ liệu đồ thị bao gồm những nội dung chính như: Định nghĩa đồ thị để bạn đọc hiểu được đồ thị là gì, phân loại được đồ thị như đồ thị định hướng, vô hướng, có trọng số , các khái niệm cơ bản trên đồ thị, các cách biểu diễn đồ thị trên máy tính, các phép duyệt đồ thị như duyệt theo chiều rộng, duyệt theo chiều sâu, các bài toán ứng dụng đồ thị như: bài toán tìm cây khung cực tiểu, bài toán tìm đường đi ngắn nhất, để bạn đọc thấy rõ vai trò của đồ thị trong việc giải quyết các bài toán ứng dụng đồ thị Do hạn chế về thời lượng lên lớp nên chương này chúng tôi chỉ giới thiệu nhiều phần còn 5 bỏ ngỏ để sinh viên tham khảo thêm các tài liệu khác, tự tìm hiểu, thảo luận, sẽ hoàn thiện những phần kiến thức còn bỏ ngỏ này trong môn học tiếp đó là môn toán rời rạc theo trong khung kiến thức chương trình đào tạo của nhà trường . Chương 5: Chương này, chúng tôi nói về mô hình dữ liệu tập hợp, nội dung trình bày gồm: Định nghĩa tập hợp để người dùng có một quan niệm chung về tập hợp, tập hợp là một khái niệm cơ bản để phát sinh ra các mô hình dữ liệu khác như cây, danh sách, ví dụ: Danh sách biểu diễn một tập hợp các phần tử thỏa mãn điều kiện là đồng kiểu, biến động, có quan hệ 1 – 1, Bạn đọc có thể liên hệ khái niệm tập này với khái niệm tập hợp trong toán học, các phép toán cơ bản trên tập hợp, các cách đơn giản để biểu diễn tập hợp trên máy tính như biểu diễn tập hợp bằng vectơ bít hay bằng danh sách, bằng cây . Chúng tôi lựa chọn dạng biểu diễn tập hợp bằng véc tơ bít để cài đặt một số phép toán cơ bản trên tập hợp, bạn đọc sẽ phải tự cài đặt các phép toán cơ bản này trên các dạng biểu diễn tập hợp khác. Phần tiếp theo của chương trình bày kiểu dữ liệu trừu tượng tự điển, từ điển là tập hợp với ba phép toán thêm, xoá tìm kiếm phần tử. Phần cuối chương chúng tôi trình bày cấu trúc dữ liệu thích hợp để biểu diễn từ điển đó là bảng băm. 4. Kiến thức tiên quyết Để học tốt môn học cấu trúc dữ liệu này, sinh viên cần phải có các kiến thức cơ bản sau: - Kiến thức kỹ năng lập trình căn bản. - Kiến thức toán rời rạc. - Nắm vững sử dụng thành thạo một ngôn ngữ lập trình, cụ thể là ngôn ngữ Pascal hoặc một ngôn ngữ lập trình nào đó, ví dụ C, C++, Visual Basic, java, Lưu ý: Các dạng biểu diễn cài đặt các phép toán trong bài giảng này chúng tôi chỉ dùng ngôn ngữ Pascal, sẽ có một chút khó khăn cho bạn đọc nào chưa tìm hiểu ngôn ngữ Pascal. 5. Danh mục tài liệu tham khảo [1] Aho, A. V. , J. E. Hopcroft, J. D. Ullman. "Data Structure and Algorihtms", Addison– Wesley; 1983 [2] Đỗ Xuân Lôi . "Cấu trúc dữ liệu giải thuật". Nhà xuất bản khoa học kỹ thuật. Hà nội, 1995. [3] Đinh Mạnh Tường, Cấu trúc dữ liệu & thuật toán, Nhà xuất bản Khoa học Kỹ thuật, 2003. 6 [4] Michel T. Goodrich, Roberto Tamassia, David Mount, “Data Structures and Algorithms in C++”. Weley International Edition; 2004. [5] N. Wirth " Cấu trúc dữ liệu + giải thuật= Chương trình", 1983. [6] Nguyễn Trung Trực, "Cấu trúc dữ liệu". BK tp HCM, 1990. [7] Lê Minh Trung; “Lập trình nâng cao bằng Pascal với các cấu trúc dữ liệu”; 1997 7 Chương 1 MỞ ĐẦU TỔNG QUAN 1. Mục tiêu Sau khi học xong chương này, sinh viên phải: - 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 cơ bản liên quan đến cấu trúc dữ liệu giải thuật như: Mô hình dữ liệu, kiểu dữ liệu trừu tượng, kiểu dữ liệu, giải thuật, - Nắm vững các tiêu chuẩn để lựa chọn cấu trúc dữ liệu tốt cho bài toán - Biết cách phân tích, đánh giá giải thuật - Nắm vững kỹ thuật đệ quy trong cách giải bài toán 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 giải quyết bài toán theo hướng tin học hóa. - Các kiến thức cơ bản trong ngôn ngữ lập trình: biến, hằng, kiểu dữ liệu, dữ liệu, biểu diễn dữ liệu trên máy tính, giải thuẩt, 3. Nội dung chính 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 - Các khái niệm cơ bản liên quan đến cấu trúc dữ liệu thuật toán - Các tiêu chuẩn để lựa chọn cấu trúc dữ liệu tốt cho bài toán - Sự cần thiết phải phân tích đánh giá giải thuật - Kỹ thuật đệ quy trong cách giải bài toán - Ngôn ngữ diễn đạt giải thuật 1. 1 Từ bài toán đên chương trình Để giải một bài toán trong thực tế bằng máy tính ta thường trải qua 2 giai đoạn: Giai đoạn 1: Xác định bài toán cần giải quyết xây dựng mô hình toán học cho bài toán. Mục đích của giai đoạn này là nhằm trả lời hai câu hỏi: Bài toán cho cái gì yêu cầu làm những gì? sau đó trả lời câu hỏi “để thực hiện các yêu cầu của bài toán thì làm như thế nào” Giai đoạn 2: Cài đặt chương trình: Sử dụng ngôn ngữ lập trình cụ thể để viết chương trình tương ứng với cách làm của giai đoạn trước nó 1.1.1 Xác định & mô hình hóa bài toán cần giải quyết 8 Khi giải quyết 1 bài toán thực tế, ta phải bắt đầu từ việc xác định bài toán. Nhiều thời gian 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ác câu hỏi bài toán yêu cầu ta "phải làm những công việc gì?" sau đó là để thực hiện các công việc này thì ta "làm như thế nào?". Thông thường, khi khởi đầu, hầu hết các bài toán là không đơn giản, không rõ ràng. Để giảm bớt sự phức tạp của bài toán thực tế, ta phải hình thức hóa nó, nghĩa là phát biểu lại bài toán thực tế thành một bài toán hình thức (hay còn gọi là mô hình toán). Có thể có rất nhiều bài toán thực tế có cùng một mô hình toán. Ví dụ 1: Xét bài toán tô màu bản đồ thế giới. 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. Việc lựa chọn xây dựng mô hình toán học cho bài toán diễn ra theo phân tích sau: 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 ta 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. => Mô hình toán học được sử dụng trong bài toán này là mô hình đồ thị. Ví dụ 2: Xét bài toán điều khiển đèn giao thông Cho một ngã năm như hình 1.1, trong đó C 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ý, nghĩa là: 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 lối đi này có các hướng đi không cắt nhau), số lượng nhóm chia là ít nhất có thể được. Việc lựa chọn, xây dựng mô hình toán học cho bài toán được diễn ra theo phân tích sau: 9 A B C D E Hình 1.1 Ta có thể xem đầu vào của bài toán là tất cả các lối đi tại ngã năm này, đầu ra 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. 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. Tất nhiên, để có thể giải được bài toán ta phải tìm một cách 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 lối nào có thể đi đồng thời. Ví dụ cặp AB EC có thể đi đồng thời, nhưng AD 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 1.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 mô hình toán học đồ thị (Graph), 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 1.2 sao cho: 10 AB AC AD BA BC BD DA DB DC EA EB EC ED Hình 1.2 [...]... tích giải thuật 1.3.1 Sự cần thiết phải phân tích giải thuật Trong khi giải một bài toán chúng ta có thể có một số giải thuật khác nhau, vấn đề là cần phải đánh giá các giải thuật đó để lựa chọn một giải thuật tốt nhất Thông thường thì ta sẽ căn cứ vào các tiêu chuẩn sau: 21 (1) - Giải thuật đúng đắn (2) - Giải thuật đơn giản (3) - Giải thuật hiệu quả Với yêu cầu (1), để kiểm tra tính đúng đắn của giải. .. chậm của giải thuật hay không ? Câu trả lời: rõ ràng là có, thí dụ xét 2 giải thuật 1 (GT1) và giải thuật 2 (GT2) : o GT1 có thời gian thực hiện là tỉ lệ với n o GT2 có thời gian thực hiện là tỉ lệ với n2 => Với n khá lớn thì giải thuật 1 nhanh hơn giải thuật 2 Thời gian mà ta đánh giá như trên gọi là độ phức tạp tính toán của giải thuật: Ở giải thuật 1 ta nói GT có độ phức tạp tính toán cấp n kí hiệu... 1.5.2 Giải thuật đệ quy thủ tục đệ quy a) Giải thuật đệ quy 26 Nếu lời giải của bài toán T được thực hiện bởi lời giải của một bài toán T’, có dạng như T thì đó là một lời giải đệ quy Giải thuật chứa lời giải đệ quy được gọi là giải thuật đệ quy (T’ giải thuật bằng ngôn ngữ giả -> Giải thuật được mã hóa hoàn toàn bởi ngôn ngữ lập trình cụ thể, ví dụ: Pascal, C, Thật vây: Từ những yêu cầu xử lý thực tế, ta tìm c á c giải thuật trên mô hình d ữ l i ệ u đ ã x â y d ự n g Giải thuật có thể mô tả một cách không hình thức (tức là nó chỉ nêu phương hướng giải hoặc các bước giải một cách tổng... chương trình bé chiếm ít bộ nhớ, tiết kiệm không gian) 1.3.2 Thời gian thực hiện của giải thuật Thời gian thực hiện của giải thuật phụ thuộc vào nhiều yếu tố • Trước hết phụ thuộc vào độ lớn của dữ liệu đầu vào • Ngoài ra T còn phụ thuộc vào o Máy o Ngôn ngữ o Kỹ sảo của người lập trình, o … Tuy nhiên các yếu tố này là không đồng đều do vậy không thể dựa vào chúng khi xác lập thời gian thực hiện giải thuật. .. dữ liệu giải thuật Trong một chương trình: Giải thuật phản ánh các phép xử lý, còn đối tượng xử lý của giải thuật lại là dữ liệu, chính dữ liệu chứa đựng các thông tin cần thiết để thực hiện giải thuật Để xác định được giải thuật phù hợp cần phải biết nó tác động đến loại dữ liệu nào (ví dụ để làm nhuyễn các hạt đậu, người ta dùng cách xay chứ không băm bằng dao, vì đậu sẽ văng ra ngoài) khi chọn... giải thuật còn phải có đầu vào (input) đầu ra (output) Nói tóm lại: M ột giải thuật phải giải quyết xong công việc khi ta cho dữ liệu vào Có nhiều cách để thể hiện giải thuật: dùng ngôn ngữ tự nhiên, dùng lưu đồ, dùng ngôn ngữ giả, dùng các câu lệnh của ngôn ngữ lập trình, một cách dùng phổ biến là dùng ngôn ngữ giả, đó là sự kết hợp của ngôn ngữ tự nhiên các câu lệnh của ngôn ngữ lập trình. .. vậy ta có T(n) = O(n) 1.3.3 Không gian của giải thuật Không gian của giải thuật, ký hiệu L(gt) được tính bằng số ô nhớ nguyên thuỷ được dùng trong giải thuật đó (= số biến đơn) Ví dụ: Xét giải thuật (gt1) tính trung bình cộng của một dãy gồm n số nhập vào từ bàn phím 1 Nhập vào số n 2 Cho T = 0; d = 1 3 Lặp While d . khiển đèn giao thông Cho một ngã năm như hình 1.1, trong đó 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. đồ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ì. 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 lối đi này có các hướng đi không cắt nhau), và số lượng nhóm chia là ít nhất có

Ngày đăng: 11/06/2014, 01:24

TỪ KHÓA LIÊN QUAN

w