Lấy cảm hứng từ câu hỏi gần đây về lưới 2d ở Haskell, tôi tự hỏi liệu nó có thể tạo ra một dây kéo hai chiều để theo dõi vị trí trong danh sách các danh sách hay không. Một dây kéo một chiều trong danh sách cho phép chúng tôi thực sự di chuyển cục bộ trong một danh sách lớn (ví dụ phổ biến là trình chỉnh sửa văn bản). Nhưng cho phép nói rằng chúng tôi có thứ nguyên thứ hai như sau:Dây kéo hai chiều
grid =
[[ 1, 2, 3, 4, 5]
,[ 6, 7, 8, 9,10]
,[11,12,13,14,15]
,[16,17,18,19,20]
,[21,22,23,24,25]]
Chúng tôi có thể tạo một số loại cấu trúc dữ liệu dây kéo để di chuyển không hiệu quả sang trái và phải nhưng lên xuống trong lưới ở đây? Nếu vậy, điều gì sẽ xảy ra nếu chúng ta thay thế danh sách các danh sách bằng một danh sách vô hạn các danh sách vô hạn, chúng ta có thể tiếp tục chuyển động hiệu quả không?
"Một trong những khía cạnh quan trọng của cách dây kéo công việc là họ đại diện cho một vị trí trong một cấu trúc bởi một con đường sử dụng để đạt được nó". Tại sao có một con đường duy nhất một yêu cầu quan trọng cho dây khóa kéo?Tôi có thể nghĩ rằng bất kỳ cách nào để đại diện cho một "vị trí" trong một cấu trúc dữ liệu sẽ đủ –
@AnupamJain: Bởi vì các mảnh vỡ được sử dụng để xây dựng lại là những phần của cấu trúc nguyên bản, bất biến, nếu một trong số đó chứa một đường dẫn khác "giống nhau" vị trí, khi bạn lắp ráp lại nó đường dẫn đó vẫn sẽ có giá trị ban đầu. Cách duy nhất để xử lý nó là đi xuống cả hai đường dẫn và thực hiện cả hai thay thế - tức là, xem xét cả hai đường dẫn với nhau như là đường dẫn "duy nhất". –
@AnupamJain: Có nhiều đường dẫn dư thừa hơn, bạn càng tạo ra ít hiệu quả. Kịch bản trường hợp xấu nhất là một cái gì đó giống như một danh sách cyclic, nơi có một số lượng vô hạn của các đường dẫn và mỗi đường dẫn chứa toàn bộ cấu trúc, mà buộc bạn phải xây dựng lại tất cả mọi thứ. –