Làm thế nào mà Strassen nghĩ ra phương pháp nhân ma trận của mình?


18

Thuật toán nhân ma trận nổi tiếng của Strassen là một điều trị thực sự đối với chúng tôi, vì nó làm giảm độ phức tạp thời gian từ O (n 3 ) truyền thống sang O (n 2.8 ).

Nhưng trong tất cả các tài nguyên tôi đã trải qua, ngay cả cuốn sách của Cormen và Steven Skienna, họ rõ ràng không nói rõ Strassen nghĩ gì về nó.

Lý do của thuật toán nhân ma trận của Strassen là gì? Đây có phải là một tai nạn may mắn hay có một cái gì đó sâu sắc hơn trong nó?


Tôi đã được thông báo rằng không ai thực sự biết, mọi thứ sẽ chủ yếu là đầu cơ. Tuy nhiên, tôi đã tìm thấy cái này có thể áp dụng được (mặc dù tôi chưa đọc nó).
Công tước

Tôi nghĩ rằng Strassen alg. là rõ ràng trong wikipedia.
Nguyên soáiSHI

4
@meshuai Tôi nghĩ rằng chỉ giải thích tại sao nó hoạt động chứ không phải cách anh ấy nghĩ về nó , như với hầu hết các tài nguyên khác.
Công tước

2
Bạn có thể xem bài báo gốc của Strassen: scgroup.hpclab.ceid.upatras.gr/ class / SC / Papers /Strassen.pdf
Axel Kemper

Câu trả lời:


26

Ngoài Strassen, không ai có thể nói cho bạn biết Strassen đã có ý tưởng như thế nào. Howeber, tôi có thể nói với bạn, làm thế nào bạn có thể tự mình tìm ra công thức đó với điều kiện là bạn quan tâm đến hình học đại số và lý thuyết biểu diễn. Điều này cũng cung cấp cho bạn các công cụ để chỉ ra rằng công thức của Strassen tốt nhất có thể, hay chính xác hơn là không có công thức nào tính toán sản phẩm của hai ma trận 2 × 2 sử dụng ít hơn 7 phép nhân .

Vì bạn quan tâm đến ma trận, tôi giả sử bạn biết đại số tuyến tính cơ bản và sẽ hơi mờ đối với các chi tiết nâng cao hơn.

Đầu tiên hãy là E tập hợp tất cả các ánh xạ tuyến tính từ mặt phẳng sang mặt phẳng. Về cơ bản, đây là tập hợp của tất cả các ma trận 2 × 2, nhưng chúng ta quên mất một hệ tọa độ cụ thể, bởi vì, nếu có một hệ tọa độ tốt hơn so với một mặc định, thì chúng ta có thể quan tâm đến việc sử dụng nó để nhân ma trận. Chúng tôi cũng biểu thị bởi E † không gian kép của EX = P (E⊗E † ⊗E †) không gian xạ liên quan đến sản phẩm tensor E⊗E † ⊗E † .

Một phần tử của X = P (E⊗E E †) có dạng đặc biệt [c⊗α⊗β] có thể được hiểu là một phép toán cơ bản trên ma trận, trong một số hệ tọa độ thích hợp, đọc một hệ số của ma trận một và một hệ số của một ma trận B và viết các sản phẩm của các hệ số trong một số ma trận C . Một yếu tố chung của X là sự kết hợp của các hoạt động tiểu, vì vậy sản phẩm π của hai ma trận, hiểu như là một bản đồ từ P (E) × P (E) để P (E), là một điểm trong X .

Công thức sản phẩm ma trận thông thường và công thức của Strassen có thể được biểu diễn dưới dạng kết hợp của các hoạt động tuyến tính này, vì vậy hãy để tôi biểu thị bằng W₁ tập hợp các hoạt động cơ bản này [cα⊗β] và để tôi mô tả hình học các kết hợp của chúng.

Hãy W₂ được sự đa dạng của secants của W₁ trong X. Nó thu được bằng cách lấy (đóng cửa) công đoàn của tất cả các dòng đi qua hai điểm (generic) của W₁ . Chúng ta có thể nghĩ về nó như là một tập hợp của tất cả các kết hợp của hai hoạt động elemantic.

Đặt W₃ là sự đa dạng của các mặt phẳng tiếp tuyến của W₁ trong X. Nó có được bằng cách lấy liên kết (đóng của) tất cả các mặt phẳng đi qua ba điểm (chung) của W₁ . Chúng ta có thể nghĩ về nó như là một tập hợp của tất cả các kết hợp của ba hoạt động elemantic.

Tương tự, chúng tôi xác định các giống secant cho các chỉ số lớn hơn. Lưu ý rằng các giống này phát triển ngày càng lớn hơn, đó là W₁⊂W₂⊂W₃⊂ ⋯ Do đó công thức sản phẩm ma trận cổ điển cho thấy sản phẩm của ma trận là một điểm của W₈ . Thực ra

ĐỀ XUẤT (Strassen) - Sản phẩm của ma trận π nằm trong W₇.

Theo như tôi biết, Strassen đã không đặt mọi thứ theo cách đó, tuy nhiên đây là một quan điểm hình học cho câu hỏi này. Quan điểm này rất hữu ích, bởi vì nó cũng cho phép bạn chứng minh rằng công thức của Strassen là tốt nhất, nghĩa là, π không nằm trong W₆ . Các phương pháp hình học được phát triển ở đây cũng có thể được sử dụng cho một loạt các vấn đề.

Tôi hy vọng, tôi bắt gặp sự tò mò của bạn. Bạn có thể đi xa hơn bằng cách đọc bài viết này của Landsberg và Man Xoay:

http://arxiv.org/abs/math/0601097

Tôi sẽ không sửa lỗi đánh máy này, vì tôi bị cảm lạnh.


Thật đơn giản để chỉ ra rằng việc có thể thực hiện một sản phẩm ma trận (3x3) với 21 phép nhân sẽ dẫn đến một thuật toán nhanh hơn không có triệu chứng. Bất kỳ ý tưởng nếu điều này là có thể / không thể / không biết?
gnasher729

3

Tôi vừa được giao nhiệm vụ làm bài tập về nhà và tôi nghĩ rằng tôi đã có một bản hùng ca gọn gàng: Thuật toán của Strassen hy sinh "chiều rộng" của các thành phần tổng kết trước của nó để sử dụng ít thao tác hơn để đổi lấy các thành phần tiền tổng hợp "sâu hơn" vẫn có thể được sử dụng để trích xuất câu trả lời cuối cùng. (Đây không phải là cách tốt nhất để nói, nhưng thật khó để tôi giải thích nó).

Tôi sẽ sử dụng ví dụ nhân hai số phức với nhau để minh họa sự cân bằng của " hoạt động so với các thành phần ":

Phương trình cho số phức.

Lưu ý rằng chúng tôi sử dụng 4 phép nhân, kết quả là 4 thành phần sản phẩm :

Chúng tôi có 4 thành phần sản phẩm.

Lưu ý rằng 2 thành phần cuối cùng mà chúng ta muốn: phần thực và phần ảo của số phức, thực sự là các phương trình tuyến tính: chúng là tổng của các sản phẩm có tỷ lệ. Vì vậy, chúng tôi đang xử lý hai hoạt động ở đây: cộngnhân.

Thực tế là 4 thành phần sản phẩm của chúng tôi có thể đại diện cho 2 thành phần cuối cùng của chúng tôi nếu chúng tôi chỉ cần thêm hoặc bớt các thành phần của chúng tôi:

Thành phần sản phẩm của chúng tôi có thể đại diện cho những người cuối cùng của chúng tôi.

Nhưng, 2 thành phần cuối cùng của chúng tôi có thể được biểu diễn dưới dạng tổng của các sản phẩm. Đây là những gì tôi nghĩ ra:

Chúng tôi thực sự chỉ cần 3 thành phần sản phẩm riêng biệt.

Nếu bạn có thể thấy, chúng tôi thực sự chỉ cần 3 thành phần sản phẩm riêng biệt để tạo ra hai thành phần cuối cùng:

3 thành phần riêng biệt của chúng tôi.

Nhưng chờ đã! Mỗi chữ in hoa đều nằm trong chính sản phẩm của mình! Nhưng điều hấp dẫn là chúng ta biết rằng chúng ta có thể tạo (A + B + C + D) từ (a + b) (c + d), chỉ là 1 phép nhân.

Vì vậy, cuối cùng, thuật toán của chúng tôi được tối ưu hóa để sử dụng các thành phần ít hơn, nhưng "béo hơn", trong đó chúng tôi trao đổi số lượng nhân cho hoạt động tổng hợp nhiều hơn.

Một phần của những gì cho phép đây là thuộc tính phân phối, cho phép A (B + C) tương đương với (AB + AC). Lưu ý cách đầu tiên có thể được tính bằng cách sử dụng 1 phép cộng và 1 phép nhân, trong khi lần thứ hai yêu cầu 2 bội số và 1 tổng.

Thuật toán của Strassen là một phần mở rộng của tối ưu hóa mà chúng tôi đã áp dụng cho các sản phẩm số phức, ngoại trừ có nhiều điều khoản sản phẩm mục tiêu hơn và có thể sử dụng nhiều thành phần sản phẩm hơn để có được các điều khoản đó. Đối với ma trận 2x2, thuật toán của Strassen biến đổi một thuật toán cần 8 phép nhân thành một phép nhân cần 7 phép nhân và tận dụng thuộc tính phân phối để "hợp nhất" hai phép nhân vào một thao tác và thay vào đó lấy đi nút "fatter" mới để trích xuất một hạn sản phẩm hoặc khác, vv

Một ví dụ điển hình: để có được (-1) và (2) và (5), bạn có thể nghĩ về nó như (-1), (2), (5) hoặc bạn có thể nghĩ về nó như (2-3 ), (2), (2 + 3). Các hoạt động thứ hai sử dụng số ít khác biệt, mặc dù. Điều hấp dẫn là số lượng các số riêng biệt tương đương với số lượng thành phần sản phẩm bạn cần tính toán để nhân ma trận. Chúng tôi chỉ đơn giản tối ưu hóa điều này để tìm một cái nhìn nhất định về các hoạt động cơ bản tận dụng các đầu ra đẳng hình bằng cách sử dụng một biến thể khác nhau thông qua thuộc tính phân phối.

Có lẽ điều này có thể được liên kết với cấu trúc liên kết theo một cách nào đó? Đây chỉ là cách hiểu của giáo dân tôi.

Chỉnh sửa: Đây là hình ảnh ghi chú của tôi mà tôi đã vẽ trong quá trình thực hiện giải thích số phức:

Một số lưu ý để tìm ra phần số phức.

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.