Lấy sản phẩm của hai ma trận 3x3 A*B=C
. Điều này đòi hỏi 27 phép nhân sử dụng standard algorithm. Nếu một người thông minh, bạn có thể làm điều này chỉ bằng 23 phép nhân, a result found in 1973 by Laderman. Kỹ thuật này liên quan đến việc lưu các bước trung gian và kết hợp chúng một cách đúng đắn.Nhân ma trận 3x3 của Laderman chỉ với 23 phép nhân, có xứng đáng không?
Bây giờ, hãy khắc phục ngôn ngữ và loại, giả sử C++ với các thành phần của double
. Nếu thuật toán Laderman được mã hóa cứng so với vòng lặp đôi đơn giản, chúng ta có thể mong đợi hiệu suất của một trình biên dịch hiện đại để vượt qua sự khác biệt của các thuật toán không?
Ghi chú về câu hỏi này: Đây là một lập trình trang web, và câu hỏi được hỏi trong bối cảnh của việc thực hành tốt nhất cho một vòng lặp bên trong thời gian rất quan trọng; sớm tối ưu hóa điều này là không. Lời khuyên về thực hiện được hoan nghênh rất nhiều như ý kiến.
"... chúng ta có thể mong đợi hiệu suất của một trình biên dịch hiện đại để cạnh ra sự khác biệt của các thuật toán?" Tại sao không thử nó? Mã hai lên, chạy chúng mỗi 1000 lần và so sánh thời gian chạy. – AndyPerfect
Câu trả lời chung cho câu hỏi đó là "không". Các thuật toán thông minh vẫn cần thiết trên thế giới. – phs
@phs: Trả lời câu hỏi trong tiêu đề hoặc câu hỏi ngay phía trên ghi chú? Họ đối diện. – MSalters