Tối thiểu hóa chương trình


10

Tối thiểu hóa mạch là vấn đề để giảm thiểu kích thước của một mạch nhất định. Có bất cứ điều gì tương tự cho các chương trình chung?

Cụ thể câu hỏi của tôi là -

Có tồn tại các thuật toán để giảm thiểu # hướng dẫn cho một chương trình nhất định. Tôi biết đó là một vấn đề không thể giải quyết được nhưng tôi không tìm kiếm một giải pháp nào trả lại một cái gì đó tối ưu.

Mặc dù người ta có thể áp dụng các phép biến đổi trình biên dịch có sẵn để thực hiện điều này, tôi đang tìm kiếm thứ gì đó mà tôi không phải xác định một tập hợp các phép biến đổi và thuật toán rất hẹp để tìm kiếm chúng trước đó.

Chỉnh sửa: Một câu hỏi khác tôi có là liệu người ta có thể có một phép tính âm thanh và hoàn chỉnh cho phép chúng ta khám phá toàn bộ không gian của các chương trình tương đương về mặt ngữ nghĩa như vậy hay không.


2
Câu trả lời cho câu hỏi khác của bạn phụ thuộc vào định nghĩa của bạn về "một phép tính". Việc HALT không nằm trong coRE khiến câu trả lời là "không" cho hầu hết các định nghĩa như vậy.

hai trường có liên quan trong đó một cách tiếp cận khác là chuyển đổi các chương trình sang họ mạch để thay đổi kích cỡ đầu vàofn
vzn

Câu trả lời:


10

Có một thuật toán ngây thơ cho các chương trình có đầu vào kích thước giới hạn: liệt kê tất cả các chương trình theo thứ tự tăng chiều dài (hoặc thời gian thực hiện, là hàm giới hạn của độ dài). Nếu bạn có thể chứng minh rằng chương trình tương đương với bản gốc, hãy dừng lại; nếu không thì tiếp tục tìm kiếm.

Thuật toán này là âm thanh. Để hoàn thành, bạn cần chứng minh tất cả các chương trình bị từ chối không tương đương với bản gốc. Điều này có thể có trong các mô hình máy tinh xảo, miễn là bạn có một ràng buộc cho kích thước đầu vào.

Lưu ý rằng khi thời gian thực hiện chương trình phụ thuộc vào đầu vào, có thể không có giải pháp tối ưu. Nếu bạn tìm ví dụ bị ràng buộc trong trường hợp xấu nhất, bạn sẽ nhanh chóng gặp phải các vấn đề tương đương không thể giải quyết được khi bạn định lượng trên tất cả các đầu vào không liên kết có thể và vào các vấn đề không thể khắc phục nếu đầu vào bị chặn.

Một thập kỷ trước, Hồi Denali: Một Superoptimizer hướng mục tiêu của Rajeev Joshi, Greg Nelson và Keith Randall đã có thể tìm thấy các chương trình tối ưu của khoảng 5 hướng dẫn máy. Tôi đã không nhìn vào kết quả gần đây hơn.


5
Một trong những sinh viên của chúng tôi ở đây tại Đại học Sussex đã sử dụng siêu tối ưu hóa để rút ngắn thời lượng của một số thói quen Java cốt lõi (chẳng hạn như bổ sung). Ông đã đốt một lượng lớn tính toán Amazon EC2 để làm điều này. Luận án của ông là đây . Rõ ràng không phải là một cách tiếp cận khả thi cho bất cứ điều gì nhưng các chương trình thực sự ngắn.
Martin Berger
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.