phát hiện chu kỳ đồ thị - giải thích đơn giản


9

một số xin vui lòng giúp tôi hiểu làm thế nào để tìm chu kỳ trong đồ thị trong điều khoản laymans?

Tôi đã đọc các câu hỏi khác, chẳng hạn như Câu hỏi này và một số trang wikipedia, nhưng chúng dường như đi xuống khá nhanh vào thuật ngữ toán học.

Tôi có một mô hình đồ thị trong java, mô hình các nút và các cạnh 'trong' và 'ra' - và mô hình biết các nút chỉ được kết nối theo một hướng, điều này cho phép tôi tìm các nút lá làm điểm bắt đầu, kế hoạch của tôi là để sao lưu biểu đồ từ mỗi nút lá này, cho mỗi "bước đi", giữ một danh sách tất cả các nút khác mà tôi đã tìm thấy trên tuyến đường của mình. Nếu tôi thấy một cái gì đó đã có trong danh sách tại bất kỳ thời điểm nào, tôi sẽ biết tôi đã tìm thấy một chu kỳ trong biểu đồ. Điều này tuy nhiên cảm thấy một chút đơn giản.

Tôi chắc chắn đây là một vấn đề đã được giải quyết, sẽ thật tuyệt nếu nó có thể được giải thích bằng những thuật ngữ đơn giản.

-át chủ

Câu trả lời:


6

Cách đơn giản nhất mà tôi có thể nghĩ ra để giải thích các chu kỳ đồ thị phát hiện theo thuật ngữ của giáo dân, là một cái gì đó như thế này:

  • Đầu tiên, tôi giả sử bạn biết những điều cơ bản về đồ thị là gì, và các nút và cạnh là gì. Ví dụ này giả định rằng bạn có một biểu đồ trong đó tất cả các cạnh chỉ là một chiều.
  • Tạo biểu đồ của bạn và chọn một nút làm điểm bắt đầu.
  • Tạo một đối tượng chứa một số loại (một danh sách hoặc hàm băm sẽ hoạt động tốt nhất). Gọi nó là "Đã truy cập".
  • Tạo một đối tượng container thứ hai (một hàng đợi sẽ là lý tưởng ở đây) và gọi nó là "Mở".
  • Thêm nút bắt đầu vào danh sách Mở.
  • Lặp lại trong khi danh sách Mở không trống:
    • Xóa mục đầu tiên khỏi Mở và gọi nó là Hiện tại
    • Nếu Hiện tại tồn tại trong Lượt truy cập, bạn có một chu kỳ.
    • Nếu không, hãy thêm Hiện tại vào Lượt truy cập, sau đó thêm tất cả các nút mà Hiện tại có thể tiếp cận từ các cạnh ngoài của nó vào Mở.
  • Nếu Open kết thúc trống và không có chu kỳ nào được phát hiện, thì bạn không có bất kỳ chu kỳ nào. (Ít nhất là không phải trong tập hợp có thể truy cập bắt nguồn từ điểm bắt đầu, không nhất thiết là toàn bộ biểu đồ của bạn nếu bạn có đảo trong biểu đồ của mình.)

0

Về cơ bản, bạn thực hiện tìm kiếm đầu tiên trên biểu đồ và theo dõi các nút bạn đã truy cập bằng cách sử dụng hàm băm.

Tại bất kỳ thời điểm nào, nếu bạn gặp phải một nút đã được truy cập (hiện diện trong hàm băm), thì bạn biết rằng có một chu kỳ trong biểu đồ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.