Là đơn sắc hữu ích trong tối ưu hóa?


7

Nhiều hoạt động phổ biến là đơn sắc . Haskell đã tận dụng sự quan sát này để làm cho nhiều hàm bậc cao hơn trở nên chung chung hơn ( Foldablelà một ví dụ).

Có một cách rõ ràng trong đó sử dụng các đơn sắc có thể được sử dụng để cải thiện hiệu suất: các lập trình viên đang khẳng định tính kết hợp của hoạt động và do đó các hoạt động có thể được song song.

Tôi tò mò liệu có cách nào khác để trình biên dịch có thể tối ưu hóa mã hay không, biết rằng chúng ta đang xử lý một monoid.


Thật trùng hợp, tác giả của thư viện HLearn có một loạt bài viết về điều này ngay bây giờ.
Xodarap

Câu trả lời:


7

Trình biên dịch có thể tối ưu hóa lũy thừa với các đơn sắc. Đặt là toán tử nhị phân có thể tính toán được trong thời gian không đổi sao cho và dạng đơn hình. Sau đó là hoạt độnga1,a2,...A

[1..n]ak=akakakn times

thường mất thời gian với thuật toán bình phương và nhân chỉ trong thời gian nếu trình biên dịch biết rằng tuân theo luật đơn trị.O(n)O(logn)


1
Quan sát tốt đẹp. Có lẽ bạn nên xác định rằng bạn đang giả sử rằng có thể được tính trong thời gian . akakO(1)
Zach Langley

0

Nếu bạn đang ở trong bước truyền liên tục gấp / liên tục, bất cứ khi nào bạn nhận ra danh tính của monoid, bạn có thể bỏ qua nó nếu nó nhân các biểu thức không hằng khác.


Tôi đã suy nghĩ về điều này - bạn có biết nếu nó thực sự nhanh hơn?
Xodarap

Nó có thể tạo ra sự khác biệt trong một vòng lặp, ví dụ.
Roberto Mizzoni
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.