300000
Spider Web©
Tổng số trận thắng: 129258
(6 – 20): | Chu trình Đường đi Ngẫu nhiên Thử thách |
Định nghĩa + Làm sao mà đây vẫn là một trò chơi "toán học"?
Các hình trong trò chơi này được dựa theo một lĩnh vực toán học được gọi là lý thuyết đồ thị!
Đồ thị là gì?
Đồ thị: Một biểu đồ bao gồm các đỉnh (nodes) và cạnh (edges).
Node: Các "đối tượng" mà đồ thị liên kết được gọi là các node. Trong Spider Web, các node là các vòng tròn.
Edge: Một cạnh là một mối liên kết trong biểu đồ giữa hai node. Trong Spider Web, các cạnh là các đường thẳng.
Mở rộng đường dẫn
Path (Đường đi): Đường đi là một chuỗi các cạnh được liên kết với node bắt đầu và node kết thúc.
Đường đi Euler: Đây là một đường dẫn sử dụng mỗi cạnh trong đồ thị chính xác một lần.
Mục tiêu trong trò chơi này là tìm ra một đường đi Euler.
Những đường đi Euler trong cuộc sống hàng ngày là gì?
Một chiếc máy cày tuyết, một chiếc xe tải dọn dẹp đường phố và một người đưa thư là những ví dụ cho ô tô và những người cần đi qua mỗi con phố nhưng muốn tránh đi qua một con phố hai lần.
Cái tên "Euler" nghe có quen thuộc không?
Lý thuyết đồ thị bắt đầu khi nhà toán học Leonhard Euler đang nghiên cứu loại đường đi này.
Euler đã viết một bài báo về Bảy cây cầu của Königsberg chứng minh rằng không thể đi bộ qua thành phố nếu đi qua mỗi cây cầu chính xác một lần.
Nhấp vào bản đồ của vấn đề bên dưới để đọc thêm về vấn đề đó.
Chu trình: Chu trình là một đường đi kết thúc trên node mà nó bắt đầu.
Chu trình Euler: Đây là một đường đi Euler mà cũng là một chu trình. Chọn "Chu trình" trong trò chơi của chúng tôi ở trên và giải pháp sẽ luôn là Chu trình Euler!
Hướng dẫn cài đặt trò chơi
Trong hộp văn bản bên cạnh Nodes, bạn có thể nhập bất kỳ số nào từ 6-20. Con số này sẽ là số lượng node được hiển thị trên biểu đồ. Số lượng càng lớn, giải pháp càng trở nên khó khăn!
Tiếp theo, chọn một Loại biểu đồ
Chu trình: Đường đi chiến thắng sẽ luôn kết thúc trên node mà chúng bắt đầu.
Đường đi: Đường đi chiến thắng sẽ không kết thúc trên node mà chúng bắt đầu.
Ngẫu nhiên: Đồ thị có thể cho phép một chu trình Euler hoặc một đường đi Euler. Đường đi chiến thắng có thể hoặc không thể kết thúc trên node mà chúng bắt đầu.
Thử thách: Đồ thị thủ công nơi các cạnh đi qua và do đó các cây cầu không thể được phát hiện một cách rõ ràng.
Cuối cùng, nhấp vào "Tạo một Web mới" để xem các thay đổi của bạn đối với cài đặt biểu đồ!
Tôi nên chọn nút nào đầu tiên?
Bậc: Bậc là một thuộc tính của một node. Đó là số cạnh được liên kết với nó. Chúng ta sẽ phân biệt giữa các node bậc lẻ và các node bậc chẵn, tùy thuộc vào bậc của chúng.
Đồ thị liên thông: Một đồ thị trong đó mỗi cặp nút có thể được liên kết thông qua một đường đi.
Cầu: Một cạnh là một cây cầu nếu hai đầu của cạnh không thể được kết nối bằng cách khác. Vì vậy, sau khi qua một cây cầu, người ta sẽ không quay trở lại bên trước đó. Loại bỏ một cây cầu sẽ tách đồ thị thành hai thành phần bị ngắt kết nối.
Đồ thị không định hướng : Một đồ thị trong đó các cạnh không có hướng được đính kèm. Chúng ta sẽ chỉ xem xét những đồ thị đó trong trò chơi này.
Đồ thị có hướng : Một đồ thị trong đó mỗi cạnh có một hướng được gắn liền như đường một chiều.
Đồ thị không định hướng chứa chu trình Euler khi tất cả các node đều có bậc chẵn (bậc 0, 2, 4, 6...) . Đối với trường hợp này, bạn có thể chọn bất kỳ node nào làm node bắt đầu của mình và vẫn giành chiến thắng. Chỉ cần lưu ý rằng bạn sẽ phải kết thúc ở node bạn đã bắt đầu.
Một đồ thị chứa một đường đi Euler, nhưng khôngchứa một chu trình Euler, khi chính xác hai node có bậc lẻ (bậc 1, 3, 5, 7...) và tất cả các node khác có bậc chẵn. Trong trường hợp này, bạn phải chọn một node có bậc lẻ làm node bắt đầu nếu không bạn sẽ không thể hoàn thành Đường đi Euler.
Tại sao chính xác là hai node?
Hãy nghĩ về mỗi bước di chuyển như đi "ra" khỏi node mà bạn đến từ và "vào" node mà bạn đi đến. Hầu hết các nút sẽ tuân theo mô hình ghép nối này, vì vậy chúng sẽ có bậc chẵn.
Khi bạn bắt đầu trò chơi, cạnh đầu tiên bạn đánh dấu là bước di chuyển "ra" khỏi node bắt đầu. Điều này vẫn chưa được ghép nối khi bạn chơi trò chơi.
Để tạo chu trình Euler, cạnh cuối cùng bạn đánh dấu là bước di chuyển "vào" node bắt đầu. Điều này tạo ra một cặp với bước di chuyển đầu tiên, có nghĩa là nút bắt đầu có bậc chẵn.
Nếu Đường đi Euler của đồ thị không phải là một chu trình, cạnh cuối cùng bạn đánh dấu là một bước di chuyển không ghép nối "vào" một node không phải là nút bắt đầu. Node bắt đầu vẫn ở bậc lẻ và node kết thúc cũng sẽ có bậc lẻ.
Đừng lo lắng về bất kỳ trường hợp nào khác. Nếu số lượng node có bậc lẻ không chính xác là 0 hoặc 2, sẽ không có Đường đi Euler và không có Chu trình Euler, có nghĩa là không có cách nào để giành chiến thắng. Những đồ thị như thế không nên xuất hiện trong trò chơi này.
Câu hỏi sơ bộ
Có thể có một số lượng lẻ các node với một bậc lẻ không?
Không.
Tại sao?
Chứng minh:
Đếm tất cả các đầu của tất cả các cạnh cho cùng một số bằng với cộng tất cả các bậc của tất cả các node, bạn có đồng ý không?
Vì mỗi cạnh có 2 đầu nên tổng số đầu của tất cả các cạnh phải chẵn. (Cộng các số chẵn sẽ cho một số chẵn.)
Để cộng bậc của tất cả các node, người ta sẽ cộng các bậc chẵn cho ra một số chẵn rồi cộng vào đó các bậc lẻ.
Nếu có một số lượng lẻ các node bậc lẻ thì tổng đó sẽ là lẻ và sau đó chẵn + lẻ = lẻ, vì vậy tổng số bậc sẽ là lẻ. Nhưng nó bằng tổng số tất cả các đầu của tất cả các cạnh và đó là số chẵn. Do đó, số lượng node bậc lẻ không thể là lẻ, nó phải là số chẵn.
Ví dụ, 1 là một số lẻ, vì vậy không có đồ thị nào chỉ có 1 node bậc lẻ.
Khi nào một đường đi hoặc chu trình Euler tồn tại?
Nếu một node có bậc chẵn, tức là 2, 4, 6,... Các cạnh được gắn vào node, sau đó khi đến node đó, còn lại một số lượng lẻ các cạnh không được sử dụng lớn hơn 0, vì vậy người ta sẽ có thể rời khỏi node đó và tiếp tục đi. Nếu bậc là lẻ, tức là 1, 3, 5,.. các cạnh được liên kết thì khi đó người ta phải bắt đầu đường đi tại node này hoặc đường đi sẽ kết thúc tại nút này. Bởi vì một đường đi chỉ có 2 đầu, chỉ có thể có 2 node với bậc lẻ. Do đó:
Để có chu trình Euler, một đồ thị phải có duy nhất các node bậc chẵn và để có Đường đi Euler, nó phải có 2 node bậc lẻ, một node sẽ là điểm bắt đầu và một node sẽ là điểm cuối của đường đi.
Làm thế nào để tìm thấy một đường đi hoặc chu trình Euler?
Như đã trình bày ở trên, nếu không có node bậc lẻ nào, thì người ta có thể bắt đầu tại bất kỳ node nào và sẽ kết thúc tại cùng một node đó. Nếu có chính xác 2 node bậc lẻ, thì người ta cần bắt đầu ở bất kỳ một trong 2 node này và sẽ tự động kết thúc ở node còn lại.
Có thể có điều gì đó không ổn xảy ra khi mở rộng đường đi không?
Đúng, có thể xảy ra điều gì đó không ổn. Ví dụ như:
2 4 / \ / \ 1---3---5
Bậc của tất cả các node là 2 ngoại trừ node 3 có bậc 4. Vì vậy, tất cả các bậc đều chẵn và chúng ta có thể bắt đầu ở bất cứ đâu. Chúng ta hãy bắt đầu từ node 1 và đi đến node 3 và chúng ta hãy loại bỏ tất cả các cạnh đã được đi ngang qua.
2 4 / \ / \ 1 3---5
Cạnh 3-2 trở thành cây cầu. Đi qua và loại bỏ cạnh 3-2 này tạo ra một đồ thị không liên thông.
2 4 / / \ 1 3---5
mà không thể được đi ngang qua hoàn toàn nữa. Do đó, người ta nên tiếp tục từ 3 đến 4 hoặc đến 5 để hoàn thành chu trình Euler.
Làm thế nào người ta có thể ngăn chặn việc đi qua một cây cầu?
Để kiểm tra xem một cạnh có phải là một cây cầu hay không, người ta sẽ bắt đầu ở một đầu của cạnh và đi qua tất cả các node lân cận và các node lân cânk của các node đấy, rồi tiếp tục như vậy. Nếu một người không đi đến được phía bên kia của cạnh, thì cạnh đó là một cây cầu. Một tìm kiếm đầy đủ như vậy của tất cả các node lân cận không phải là rất tốn kém. Nhưng nếu một người phải làm điều đó trước khi đi qua từng cạnh, thì phải bỏ ra nỗ lực lớn. Thuật toán hoàn chỉnh được gọi là thuật toán Fleury, có từ năm 1883.
Có thuật toán nào hiệu quả hơn không?
Một thuật toán hiệu quả hơn là của Hierholzer (1873).
Nếu đồ thị có 2 node bậc lẻ, thì người ta tìm thấy một đường đi hoặc là một chu trình, trong cả hai trường hợp đều rất nhanh mà không cần kiểm tra xem có cầu hay không.
1) Sau khi loại bỏ tất cả các cạnh đã được sử dụng, bậc của các cạnh không sử dụng còn lại là chẵn cho tất cả các node.
Tại sao?
Nếu bậc của một node là chẵn, thì khi đó nó thường được tiếp cận như nhau khi nó còn lại, vì vậy nó vẫn là chẵn. Nếu bậc là lẻ, thì nó là node bắt đầu hoặc node cuối cùng của đường đi đầu tiên và sau đó nó được để lại + tiếp cận tổng cộng một số lượng lần lẻ, vì vậy bậc còn lại là lẻ - lẻ = chẵn.
2) Phải có ít nhất một node với các cạnh liền kề đã và không được sử dụng.
Tại sao?
Bởi vì đồ thị ban đầu đã được liên kết.
Bởi vì 1) người ta có thể tìm thấy một chu kỳ của các cạnh không sử dụng, bắt đầu và kết thúc tại node này. Bởi vì 2) chu trình này có thể được bao gồm trong đường đi / chu trình đầu tiên khi nó đến node này. Việc áp dụng các chu trình của các cạnh chưa sử dụng cho đến nay được lặp lại cho đến khi tất cả các cạnh được sử dụng và do đó một chu trình có đường đi Euler hoặc chu trình Euler sử dụng tất cả các cạnh.
Giá của phiên bản nhanh hơn này là bao nhiêu?
Người ta phải ghi nhớ đường đi / chu trình trước đó để người ta có thể bao gồm chu trình bổ sung.
Ví dụ:
2 4 / \ / \ 1---3---5
Ta đặt chu trình đầu tiên là 1-3-2-1. Node 3 xảy ra trong chu trình này và trong chu trình không sử dụng 3-4-5-3. Chúng tôi thêm nó vào chu trình đầu tiên và nhận được chu trình 1-3-4-5-3-2-1. Không còn các cạnh không sử dụng nữa nên thuật toán kết thúc ở đây, chúng tôi đã tìm thấy chu trình Euler.
Làm thế nào một chu trình có thể được thêm vào bằng cách sử dụng giao diện của chúng tôi?
Người ta có thể nhấp vào 'Hoàn tác' cho đến khi người ta đạt đến node gần đây nhất có các cạnh đã và chưa được sử dụng, như node 3 ở trên, sau đó trải qua chu trình 3-4-5-3 và sau đó tiếp tục với các cạnh chưa hoàn thành.
Nếu có một node bậc lẻ, thì người ta có cần tìm cả hai để vẽ một đường đi đầu tiên từ node này sang node kia không?
Không. Nếu một người chỉ tìm thấy một, thì người ta có thể bắt đầu đường đi tại node này và một node sẽ tự động kết thúc ở node bậc lẻ khác cho dù người ta có sử dụng tất cả các cạnh hay không.
Tại sao?
Bởi vì khi một người đến một node bậc chẵn, thì một số lượng lẻ các cạnh đính kèm đã được sử dụng.
Tại sao?
Mỗi khi một người đến một node, đồng thời một người rời khỏi node đó, vì vậy, một số cạnh chẵn đã được sử dụng. Bây giờ, một người đến và sử dụng một cạnh trên một node bậc chẵn, do đó, một người sử dụng tổng cộng một số cạnh lẻ trên node bậc chẵn đó.
Chẵn − lẻ = lẻ, do đó còn lại một số lẻ các cạnh không sử dụng. Một số lẻ luôn không phải là số không, vì vậy có ít nhất một cạnh không được sử dụng có thể được sử dụng để rời khỏi node đó. Do đó, người ta sẽ tự động kết thúc ở node bậc lẻ cho dù tất cả các cạnh đã được sử dụng hay chưa.
Bạn có gợi ý làm thế nào để một người có thể tìm thấy một node bậc lẻ không?
Tất nhiên, người ta có thể kiểm tra bậc của mỗi node cho đến khi người ta tìm thấy một node bậc lẻ. Đây là một cách mà không cần đếm.
Người ta có thể chọn bất kỳ node nào. Nếu bậc của nó là lẻ, thì người ta đã tìm thấy một node. Nếu không, thì người ta bắt đầu tại node này để vẽ một chu trình. Nó sẽ kết thúc ở một node bậc lẻ, sau đó người ta đã tìm thấy một node bậc lẻ hoặc một node sẽ kết thúc ở node bắt đầu. Nếu vậy, thì người ta bỏ qua tất cả các cạnh được sử dụng và thực hiện lại điều đó, tức là chọn một node và vẽ một đường đi hoặc chu trình. Điều này tiếp tục cho đến khi người ta tìm thấy một node bậc lẻ hoặc không còn các cạnh không sử dụng nữa. Sau đó, tất cả các node có một bậc chẵn.
Điều gì sẽ xảy ra nếu biểu đồ giống như một thành phố có các con đường 1 chiều?
Một đồ thị có các cạnh chỉ có thể đi qua theo một hướng được gọi là đồ thị có hướng. Sau lập luận trên, 2 nhận định sau đây là hợp lý.
Một đồ thị có hướng cho phép một chu trình Euler, nếu và chỉ khi, đối với mỗi node, số cạnh đi bằng số cạnh đến.
Một đồ thị có hướng cho phép một Đường đi Euler, nếu và chỉ khi
• một node có nhiều cạnh đi hơn các cạnh đến,
• một nút có nhiều cạnh đến hơn các cạnh đi và
• Tất cả các cạnh khác có cùng số cạnh đi và đến.
Theo dõi cập nhật sắp tới