Câu hỏi:
Có quy trình hoặc lý thuyết được thiết lập để tạo mã áp dụng hiệu quả phép nhân vectơ ma trận hay không, khi ma trận dày đặc và chỉ chứa các số 0 và số không? Lý tưởng nhất là mã được tối ưu hóa sẽ sử dụng có hệ thống các thông tin được tính toán trước đó để giảm công việc trùng lặp.
Nói cách khác, tôi có một ma trận và tôi muốn thực hiện một số tiền mã hóa dựa trên , điều đó sẽ làm cho tính toán hiệu quả nhất có thể khi sau này tôi nhận được vectơ .
là một ma trận nhị phân dày đặc hình chữ nhật được biết đến tại "thời gian biên dịch", trong khi là một vectơ thực không xác định chỉ được biết đến tại "thời gian chạy".
Ví dụ 1: (cửa sổ trượt)
Hãy để tôi sử dụng một ví dụ nhỏ dễ dàng để minh họa quan điểm của tôi. Hãy xem xét ma trận, Giả sử chúng ta áp dụng ma trận này cho vectơ để có . Sau đó, các mục của kết quả là,
Thực hiện phép nhân vectơ ma trận chuẩn sẽ tính toán chính xác theo cách này. Tuy nhiên, rất nhiều công việc này là dư thừa. Chúng tôi có thể thực hiện cùng một phép tính ma trận với chi phí thấp hơn bằng cách theo dõi "tổng chạy" và cộng / trừ để có được số tiếp theo:
Ví dụ 2: (cấu trúc phân cấp)
Trong ví dụ trước, chúng ta chỉ cần theo dõi tổng số đang chạy. Tuy nhiên, thông thường người ta sẽ cần tạo và lưu trữ một cây kết quả trung gian. Ví dụ: hãy xem xét Người ta có thể tính toán w = Mv một cách hiệu quả bằng cách sử dụng một cây kết quả trung gian:w=Mv
- Tính toán và và thêm chúng để có .
- Tính toán và và thêm chúng để nhận .
- Thêm và để nhậnw 3 w 1
Cấu trúc trong các ví dụ trên rất dễ nhìn thấy, nhưng đối với các ma trận thực tế mà tôi quan tâm, cấu trúc không đơn giản như vậy.
Ví dụ 3: (thứ hạng thấp)
Để làm sáng tỏ một số nhầm lẫn, ma trận thường không thưa thớt. Cụ thể, một phương pháp giải quyết vấn đề này cần có khả năng tìm ra các phương pháp hiệu quả để áp dụng ma trận trong đó các khối lớn chứa đầy các khối. Ví dụ, xem xét
Ma trận này có thể được phân tách thành một sự khác biệt của hai ma trận hạng 1,
do đó, hành động của nó trên một vectơ có thể được tính toán hiệu quả bằng cách,
Động lực:
Tôi đang làm việc trên một phương pháp số để xử lý một số hình ảnh và có một số ma trận dày đặc với các cấu trúc khác nhau được cố định cho mọi thời đại. Sau đó, các ma trận này sẽ cần được áp dụng cho nhiều vectơ chưa biết sẽ phụ thuộc vào đầu vào của người dùng. Ngay bây giờ tôi đang sử dụng bút chì và giấy để đưa ra mã hiệu quả trên cơ sở từng ma trận, nhưng tôi tự hỏi liệu quy trình có thể được tự động hóa hay không.v tôi
Chỉnh sửa: (phần tái bút)
Tất cả các câu trả lời ở đây cho đến nay (kể từ ngày 9/5/15) đều thú vị, nhưng không có câu trả lời nào thỏa đáng như tôi mong đợi. Có lẽ hóa ra đây là một câu hỏi nghiên cứu khó khăn, và không ai biết một câu trả lời hay.
Vì thời gian đã hết, tôi trao phần thưởng cho câu trả lời của EvilJS vì nó giải quyết đúng câu hỏi. Tuy nhiên, tôi muốn câu trả lời có giải thích rõ ràng và chi tiết hơn.
Câu trả lời của tranisstor tạo ra mối liên hệ giữa câu hỏi này và vấn đề Nhân vectơ ma trận Boolean (OMv) trực tuyến, nhưng kết nối không chính xác là câu hỏi này đang hỏi. Cụ thể, giả định sau đây không thực sự phù hợp (nhấn mạnh đậm của tôi),
Bây giờ giả sử rằng với tất cả và tất cả ma trận n × n M chúng ta biết một thuật toán , rằng với tất cả các vectơ tính trong thời gian thực sự phụ, tức là trong thời gian cho một số . v M v O ( n 2 - ε ) ε > 0
Có hay không tồn tại các thuật toán phụ cho tất cả các ma trận là trực giao với câu hỏi tìm một thuật toán cho một ma trận cụ thể càng nhanh càng tốt. Hầu hết các ma trận 0-1 trông giống như nhiễu ngẫu nhiên và (nếu tôi đoán) có lẽ không có thuật toán phụ. Tuy nhiên, thực tế là có những ma trận thực sự tồi tệ ngoài kia không ngăn tôi tìm ra thuật toán nhanh trên một ma trận tốt, ví dụ, ma trận "cửa sổ trượt".
câu trả lời vzn của, câu trả lời đầu tiên , câu trả lời thứ hai là thú vị (và theo ý kiến của tôi không xứng đáng để nhiều downvotes), nhưng họ không áp dụng cho câu hỏi vì lý do thảo luận trong các ý kiến đó.