Sản phẩm ma trận boolean thưa thớt nhanh với tiền xử lý có thể


12

Các thuật toán hiệu quả thực tế nhất để nhân hai ma trận boolean rất thưa thớt (giả sử, N = 200 và chỉ có một số phần tử 100-200 khác không)?

Trên thực tế, tôi có lợi thế là khi tôi nhân A với B, B được xác định trước và tôi có thể thực hiện quá trình tiền xử lý phức tạp tùy ý trên chúng. Tôi cũng biết rằng kết quả của các sản phẩm luôn thưa thớt như ma trận ban đầu.

Thuật toán "khá ngây thơ" (quét A theo hàng; với mỗi 1 bit của hàng A, HOẶC kết quả với hàng B tương ứng) hóa ra rất hiệu quả và chỉ cần vài nghìn lệnh CPU để tính toán một sản phẩm , do đó, sẽ không dễ dàng vượt qua nó và nó chỉ có thể vượt qua bởi một yếu tố không đổi (vì kết quả có hàng trăm bit một). Nhưng tôi không mất hy vọng và nhờ cộng đồng giúp đỡ :)


1
Tôi nghi ngờ chúng ta có thể đánh bại đáng kể hằng số 10 lệnh máy cho mỗi từ đầu ra. Có thể một số hình thức ngầm của đầu ra sẽ được chấp nhận?
Warren Schudy

Có miễn là nó có thể được nhân lên bởi Bs hơn nữa.
jkff

Các phép toán cộng và nhân (đối với bit) mà phép nhân ma trận được xác định dựa trên là gì? Thuật toán ngây thơ của bạn cho thấy câu trả lời lần lượt là "hoặc" và "và", nhưng đó là một phép nhân ma trận khá kỳ lạ vì chúng không xác định một trường. Bạn có nghĩa là "xor" thay vì "hoặc"?
Warren Schudy

Không, ý tôi là "hoặc" và "và". Tôi không cần các hoạt động để xác định một lĩnh vực, đó thực sự là một vấn đề giống như khả năng tiếp cận đồ thị (Tôi đang tính toán thành phần của một số chức năng một-nhiều).
jkff

Câu trả lời:


11

Tôi miễn cưỡng trả lời điều này, bởi vì kết quả lý thuyết duy nhất tôi biết dọc theo những dòng này có tên của tôi trên giấy ...

Về mặt lý thuyết, có thể xử lý trước một ma trận Boolean n × dày đặc A để các phép nhân vectơ ma trận thưa thớt với A (trong quá trình tạo nửa của OR và AND) có thể được thực hiện nhanh hơn thời gian chạy ngây thơ. Có lẽ cần một lượng hack đáng kể để thực hiện nó trong thực tế, nhưng tôi nghĩ nó sẽ có giá trị tốt trong thực tế cho n đủ lớn và thực hiện đúng.n×nAAn

. so với ma trận kề kề ban đầu.)

Tờ báo là

Guy E. Blelloch, Virginia Vassilevska, Ryan Williams: Cách tiếp cận kết hợp mới cho các vấn đề đồ thị thưa thớt. ICALP (1) 2008: 108-120

và kết quả có liên quan từ giấy là đối với mỗi , có một O ( n 2 + ε ) thuật toán thời điểm đó, đưa ra bất kỳ n × n 0-1 ma trận A , các hoạt động sau đây được hỗ trợ:ε>0O(n2+ε)n×nA

- Đối với bất kỳ vector chỉ với t nonzeroes, Một câu có thể được tính trong O ( n ( t / k + n /) / log n ) thời gian, nơi , k là tham số tự do thỏa mãn (vtAvO(n(t/k+n/)/logn)k. (Một khung cảnh đẹp là=logcnk=ε(logn)/loglogn, do đó thời gian chạy khoảngnt/logn+n2/logcnđối với bất kỳ hằng mong muốnc.(k)nε=logcnk=ε(logn)/loglognnt/logn+n2/logcnc

- Row và cột cập nhật có thể được tính trong O ( n 1 + ε ) thời gian.AO(n1+ε)

Chúng tôi đã sử dụng cấu trúc dữ liệu này để đưa ra các thuật toán lý thuyết nhanh hơn cho APSP trong các biểu đồ không có trọng số thưa thớt.


3
Tôi chỉ nhận thấy rằng bạn cũng cho rằng đầu ra của phép nhân ma trận cũng thưa thớt. Trong trường hợp đó, thậm chí còn có các thuật toán nhanh hơn; thực hiện tìm kiếm trên web cho "nhân ma trận nhạy cảm đầu ra".
Ryan Williams

Ryan Williams - Tôi có một câu hỏi nhanh: bạn có biết hay bạn đã khám phá bất kỳ phương pháp nào khái quát đến các ma trận có giá trị thưa thớt (thay vì chỉ đơn giản là Boolean)? {1,0,1}
Alexandre Cassagne

4

Tôi nghĩ những gì bạn gọi là một ma trận "hypersparse" (nnz <n). Tôi đã viết một bài báo vài năm trước về cách nhân chúng. Về cơ bản, đây là một sản phẩm bên ngoài tham gia với sự hợp nhất đa chiều thông minh để loại bỏ việc thực hiện các bộ ba trung gian.

Buluc và Gilbert, IPDPS 2008: http://gauss.cs.ucsb.edu/publication/hypersparse-ipdps08.pdf

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.