Lý thuyết thể loại, độ phức tạp tính toán và kết nối tổ hợp?


17

Tôi đã cố gắng đọc Ngọc trai của thiết kế thuật toán chức năng , và sau đó là Đại số lập trình , và có một sự tương ứng rõ ràng giữa các kiểu dữ liệu được xác định đệ quy (và đa thức), có cùng định nghĩa đệ quy và sau đó dẫn đầu đến cùng một loạt hình thức điện (hoặc các chức năng tạo ra), như trong lời giới thiệu với các loài tổ hợp (tôi đọc “ loài và functors và các loại, Oh My! ”).

Vì vậy, đối với câu hỏi đầu tiên, có cách nào để phục hồi phương trình tạo (đệ quy) từ chuỗi lũy thừa không? Đó là một suy nghĩ mặc dù.

Tôi đã quan tâm nhiều hơn đến khái niệm đại số ban đầu và đại số cuối cùng như là một loại quy trình xác định về cấu trúc dữ liệu. Có một số quy tắc thực tế trong lập trình chức năng, liên quan đến thành phần, sản phẩm ánh xạ giữa đại số và tương tự, được mô tả ví dụ trong hướng dẫn này. Đối với tôi, dường như đây có thể là một cách khá mạnh mẽ để tiếp cận sự phức tạp và ví dụ, có vẻ khá đơn giản để khôi phục định lý của Master trong bối cảnh như vậy (ý tôi là, bạn phải thực hiện cùng một lý lẽ, vì vậy không đạt được nhiều trong trường hợp này), và sự dị hình duy nhất từ ​​đại số ban đầu và thực tế (tôi có nhầm không?) rằng đại số giữa A và FA cho functor đa thức là đẳng cấu, khiến tôi thấy rằng cách tiếp cận như vậy có thể có nhiều lợi ích trong việc phân tích độ phức tạp của hoạt động trên cấu trúc dữ liệu.

Từ quan điểm thực tế, trông giống như các quy tắc hợp nhất (về cơ bản, các cách để kết hợp các hình thái đại số với nhau, các hình thái đại số và hình thái chung) là kỹ thuật tối ưu hóa rất mạnh mẽ để chuyển đổi và tái cấu trúc chương trình. Tôi có đúng không khi nghĩ rằng việc sử dụng đầy đủ các quy tắc này có thể tạo ra chương trình tối ưu (không có cấu trúc dữ liệu trung gian không cần thiết hoặc các hoạt động bổ sung khác).

Tôi có ở trên một cái gì đó (và những gì) ở đây? Có phải là người thụ hưởng (từ quan điểm học tập) để cố gắng nhìn về sự phức tạp tính toán theo cách này? Các cấu trúc, mà chúng ta có thể có các đại số ban đầu "đẹp" bằng cách nào đó quá hạn chế cho một số vấn đề?

Tôi hầu như đang cố gắng tìm cách suy nghĩ về sự phức tạp về cấu trúc của không gian tìm kiếm và cách "không gian tìm kiếm" và "thuật toán tìm kiếm" tương tác thông qua một số đối tượng "đẹp" như đại số ban đầu của functor và để hiểu nếu nó hữu ích để cố gắng xem mọi thứ theo cách này, khi nhìn vào các cấu trúc phức tạp hơn.


5
bạn có thể định dạng lại để làm cho điều này có thể đọc được?
Lev Reyzin

11
Có hai vấn đề tiềm ẩn với ý tưởng của bạn. Thứ nhất, không phải tất cả các cấu trúc dữ liệu có thể được biểu diễn bằng các đại số ban đầu. Bất kỳ đồ thị chung hoặc cấu trúc con trỏ phức tạp sẽ không phải là đại số ban đầu của bất kỳ functor nào. Thứ hai, các quy tắc hợp nhất và vv nói chung sẽ chỉ cải thiện hiệu quả của mã, thay vì thay đổi hiệu quả của O (-) - của thuật toán (mặc dù tôi biết về các ngoại lệ).
Dave Clarke

Cảm ơn, Dave, tôi đang cố gắng đọc cuốn sách lý thuyết Trò chơi thuật toán, và các thuật toán trong các phương pháp điều trị truyền thống được chỉ định chủ yếu là hoạt động, có thể nói, và tự hỏi liệu có cách nào chung để tiếp cận chúng hay không, và đại số ban đầu v.v ... , nhưng thiếu sự tương ứng giữa cấu trúc dữ liệu chung và functor là một vấn đề. @sclv: Cảm ơn, tôi sẽ xem xét!
Stefan Petrov

Tôi muốn chỉ ra rằng có nhiều cách khác để biểu diễn đồ thị hơn là bằng các cấu trúc con trỏ phức tạp. Đặc biệt, người ta có thể đại diện cho chúng theo cách tự cảm, bằng một loạt các thay đổi hoặc bổ sung @DaveClarke. Tôi chắc chắn điều tương tự cũng đúng với các cấu trúc khác như thế này, mặc dù tôi không muốn nói một cách cụ thể vì tôi không phải là chuyên gia về đại số ban đầu và những hạn chế của chúng.
Samuel Schlesinger

Câu trả lời:


7

Nhận xét của Dave Clarke khá quan trọng. Nói chung, phản ứng tổng hợp không làm thay đổi hiệu quả O (-). Tuy nhiên, mối quan tâm đặc biệt là tác phẩm của Liu, Cheng và Hudak về Mũi tên giao hoán nhân quả. Các chương trình được viết với chúng nhất thiết phải tối ưu hóa, một phần thông qua phản ứng tổng hợp luồng, đến một vòng lặp duy nhất không có phân bổ bộ nhớ động và cấu trúc trung gian: http://haskell.cs.yale.edu/?post_type=publication&p=72


6

Các loài kết hợp của Jidel, "các công trình đáng ngưỡng mộ" của Phân tích kết hợp phân tích và các loài Haskell của Horge là tất cả đều tốt.

Power Series Power Serious của McIlroy của UNIX diff fame cũng là một cuốn sách nên đọc, cũng như chương về sự ăn mòn trong Con đường Haskell đến Toán học và Lập trình Logic.

Các tác phẩm lịch sử của Buchi do Saunders MacLane và Chomsky / Schützenberger biên tập tạo nên sự kết nối giữa các chuỗi sức mạnh, đại số, cây cối và tự động trạng thái hữu hạn. Phương thức ma trận chuyển được mô tả trong Stanley chỉ cho bạn cách tính các hàm tạo từ automata có trọng số.

Tôi vẫn đang tìm ra cách tốt nhất để dịch giữa các miền (GF, automata có trọng số, đại số, cây, đệ quy) một cách hiệu quả. Ngay bây giờ tôi sẽ chia sẻ với SymPy vì chưa có gói biểu tượng Haskell tốt.

Cá nhân, tôi đã lấy biểu đồ lặp của một endofulation sau đó tính toán một tập hợp thống trị tối thiểu trên nó để có được một tìm kiếm hộp đen chính xác bị ràng buộc, http://oeis.org/A186202 Không chắc chắn về loại kết quả phức tạp mà bạn đang tìm kiếm, nhưng kỹ thuật đó rất mạnh mẽ trong việc kiểm tra bất kỳ sự kết thúc nào qua một tập hợp hữu hạn.

- Bản gốc ngày 2 tháng 10 năm14 lúc 15:37 trả lời--

Hãy xem luận điểm của Brent Yorge theo bài báo mà anh ấy trích dẫn. http://www.cis.upenn.edu/%7Ebyorgey/hosted/thesis.pdf

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.