Cấu trúc dữ liệu cấu trúc


20

Tuyên bố miễn trừ trách nhiệm: Tôi không phải là nhà lý luận CS.

Đến từ đại số trừu tượng, tôi đã quen với việc xử lý những thứ tương đương với một đẳng cấu - nhưng tôi gặp khó khăn khi dịch khái niệm này sang cấu trúc dữ liệu. Đầu tiên tôi nghĩ rằng các hình thái sinh học lý thuyết ngay lập tức sẽ đủ, nhưng tôi đã chạy vào một bức tường khá nhanh - đó chỉ là các mã hóa và không nắm bắt được bản chất tính toán của cấu trúc dữ liệu.

Có một định nghĩa hạn chế hơn (nhưng hữu ích hơn)? (Hoặc nếu không, tại sao?) Có một định nghĩa chính tắc về loại "cấu trúc dữ liệu được xây dựng" không?

Câu trả lời:


16

Không có một phạm trù kinh điển như vậy, vì cùng một lý do không có phạm trù tính toán chính tắc. Tuy nhiên, có các cấu trúc đại số lớn và hữu ích trên các cấu trúc dữ liệu.

Một trong những cấu trúc tổng quát như vậy, vẫn còn hữu ích, là lý thuyết về các loài tổ hợp. Một loài là functor , trong đó B là loại tập hợp hữu hạn và các mệnh đề giữa chúng. Bạn có thể nghĩ về các loài như là họ của các cấu trúc được lập chỉ mục bởi các vị trí trừu tượng. Điều này giải thích sự phù hợp với B - những gia đình như vậy phải bất biến đối với việc đổi tên các nhãn trừu tượng. Sau đó, tính toán của các loài về cơ bản phát lại các phương thức hàm ở cấp độ functorial, để tạo ra các bộ cấu trúc dữ liệu thay vì đếm.F:BBBB

Để xem lý thuyết này được thực hiện bằng ngôn ngữ lập trình, bạn có thể đọc bài viết về Hội nghị chuyên đề Haskell của Brent Yorge, Các loài và functor và các loại, oh my! . Tôi nghĩ Sage cũng có một gói loài, mặc dù tất nhiên nó hướng tới đại số máy tính hơn là lập trình.


14

Thật vậy, có một khái niệm khác với đẳng cấu là hữu ích hơn trong lập trình. Nó được gọi là "tương đương hành vi" (đôi khi được gọi là "tương đương quan sát") và nó được thiết lập bằng cách đưa ra "mối quan hệ mô phỏng" giữa các cấu trúc dữ liệu thay vì các mệnh đề. Các nhà đại số đã đến và thiết lập một khu vực gọi là "các kiểu dữ liệu đại số" trong Khoa học Máy tính, nơi họ đã đẩy các đẳng cấu và đại số ban đầu trong một thời gian. Cuối cùng, các nhà khoa học máy tính nhận ra rằng họ đang bị lừa. Một bài báo hay nói về những vấn đề này là "Về tương đương quan sát và đặc tả đại số" của Sannella và Tarlecki.

Tôi đã viết một câu trả lời cho một câu hỏi khác trong cstheory về các mối quan hệ logic và mô phỏng nói về lịch sử tổng quát hơn của các mối quan hệ mô phỏng trong Khoa học máy tính. Bạn được chào đón để đọc điều đó và theo dõi các tài liệu tham khảo được đưa ra ở đó. Chương 5 của "Craft of Lập trình" của Reynold đặc biệt được khai sáng.

Một cuốn sách văn bản về Lý thuyết tự động đại số của Holcombe có trích dẫn thú vị sau (trang 42):

Có nhiều kết quả khác liên quan đến đồng cấu và chỉ tiêu ... Mặc dù chúng có mối quan tâm đại số độc lập nhưng chúng chưa được chứng minh là đặc biệt hữu ích trong nghiên cứu về automata và các lĩnh vực liên quan. Trên thực tế, lý thuyết đại số của máy móc tách rời khỏi hướng đi trong các lý thuyết đại số khác ở một khía cạnh quan trọng ... Tuy nhiên, sự nhấn mạnh trong lý thuyết automata không phải là [trên] những gì máy móc "trông giống" mà là "chúng có thể làm gì" . Chúng tôi sẽ coi hai máy là có liên quan rất chặt chẽ nếu cả hai có thể "làm cùng một việc", tuy nhiên chúng có thể không phải là đẳng cấu đại số!


Suy ngẫm về Holcombe trích dẫn thêm, tôi nhận thấy rằng về cơ bản, ông nói rằng đại số truyền thống liên quan đến những thứ "trông như thế nào", tức là cấu trúc của chúng, nhưng chúng không xử lý được "chúng có thể làm gì", tức là hành vi của chúng. Điều này dường như chỉ ra một hạn chế cơ bản của đại số truyền thống đối với Khoa học Máy tính. Đáng buồn thay, tôi nghĩ rằng Lý thuyết loại cũng thuộc về cùng một trại. Nhưng Lý thuyết loại có trạng thái "con bò thần thánh" và nói về những hạn chế của nó được coi là không hay. Hy vọng, các nhà khoa học máy tính sẽ thu thập đủ can đảm để nói to hơn.
Uday Reddy

Uday, bạn có thể giải thích thêm một chút về cách (giả thuyết?) Của lý thuyết thể loại có vẻ không phù hợp?
Łukasz Lew

@ UkaszLew, Nếu lý thuyết danh mục phù hợp, bạn có thể nói rằng tất cả các biểu thức loại tính toán lambda được gõ với biến loại X là hàm functor. Nhưng họ không, ví dụ, F (X) = (X -> X) không phải là functor.
Uday Reddy

7

Thay vì hỏi làm thế nào chúng ta có thể củng cố / làm suy yếu khái niệm đẳng cấu, một khả năng khác là hỏi: khái niệm đúng về sự tương đương giữa các cấu trúc tính toán là gì và cấu trúc toán học nằm dưới khái niệm này là gì.

Một gia đình lớn của các cấu trúc là than đá. Các cấu trúc như danh sách, cây, automata, cả hai loại hữu hạn và vô hạn có thể được mô tả như các khối than. Sau đó chúng ta có thể nghiên cứu đồng cấu hoặc đẳng cấu giữa các than.

Tuy nhiên, ngay cả sự đồng hình giữa các con than cũng không nói lên toàn bộ câu chuyện. Bạn có thể thấy hữu ích khi tìm kiếm mô phỏng, chia nhỏ và các mối quan hệ logic khác. Nếu bạn hoàn toàn thích một cách tiếp cận đại số (trái ngược với phương pháp quan hệ), các kết nối Galois là một lựa chọn. Dưới đây là một số điểm bắt đầu.


2

Tuyên bố miễn trừ trách nhiệm: Tôi không chắc là tôi hiểu câu hỏi của bạn. Bạn có muốn nói về sự đẳng cấu giữa hai cấu trúc dữ liệu hoặc giữa hai "thông số cấu trúc dữ liệu" không? (Đôi khi chúng được gọi là Kiểu dữ liệu trừu tượng.)

Nếu bạn xem xét mô hình thăm dò tế bào, thì tôi nghĩ rằng một khái niệm đẳng cấu dễ dàng phát sinh. Đó là bởi vì mô hình mô hình thăm dò tế bào tính toán bằng cây quyết định, do đó, đẳng cấu rất dễ xác định. Mô hình thăm dò tế bào sẽ giúp tôi, cả hai nếu bạn xem xét sự đồng hình giữa việc triển khai cấu trúc dữ liệu và nếu bạn xem xét các đặc tả cấu trúc dữ liệu.

Để biết thông tin về mô hình thăm dò tế bào, xem ví dụ khảo sát về Miltersen. (Độ phức tạp của đầu dò tế bào: Một khảo sát )

Nếu bạn nói thêm về lý do tại sao bạn cần xác định đẳng cấu giữa các cấu trúc dữ liệu, có thể cung cấp thêm trợ giúp. Hãy nhắn tin cho tôi.

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.