Có thuật toán O (log n) cho phép lũy thừa ma trận không?


9

Có một thuật toán để nâng một ma trận lên nsức mạnh thứ O(logn) thời gian?

Tôi đã tìm kiếm trực tuyến, nhưng cho đến nay đã không thành công.


1
Bạn có nghĩa là bạn có một ma trận kích thước cố định? trong thực tế nếu ma trận của bạn có kích thướcm bạn không thể tìm thấy O(log n)thuật toán.

Mọi người thường gọi vấn đề này là cung cấp năng lượng ma trận. Ma trận lũy thừa có nghĩa là tìmeX
Shitikanth

@Shitikanth Ok, cảm ơn. Tôi sẽ thay đổi điều đó ngay bây giờ.
Jack H

Câu trả lời:


11

Đây là mã giả cho một O(lgn)thuật toán lũy thừa ma trận. Lưu ý rằng toán tử * biểu thị phép nhân ma trận thông thường.

MATHPOWER (M, n)
if n == 1
    then return M
else
    P = MATHPOWER (M, floor(n/2))
    if n mod 2 == 0
        then return P * P
    else
        return P * P * M

Đối với những người đến từ tương lai, đây là một câu trả lời khủng khiếp. Nó hoạt động O (n ^ 3 * log (n)) khi có thuật toán O (n ^ 3) thay thế. Xem câu trả lời từ Yuval dưới đây. Như một vấn đề thực tế, điều này thường được thực hiện bằng phân tách SVD, sau đó nâng các phần tử N của ma trận D lên công suất và nhân lại ma trận trở lại.
Michael O

@Michael O, tôi nghĩ bạn thực sự đã bỏ lỡ quan điểm. Bạn đã hiểu nhầm những gì OP yêu cầu, tức là làm thế nào để nâng một ma trận lênn- sức mạnh thứ O(lgn)steps. Điều quan trọng là OP chỉ yêu cầu số bước thực hiện là O(lgn), không phải là sự phức tạp chung vì điều này cũng đòi hỏi phải tính đến thứ tự ma trận.
Massimo Cafaro

Rõ ràng là phương pháp phân chia và chinh phục được đề xuất có độ phức tạp trong trường hợp xấu nhất O(lgn) chỉ khi thứ tự ma trận là O(1), vì trong trường hợp này phương trình lặp lại tương ứng là T(n)=T(n/2)+O(1)(ví dụ, đối với ma trận 3 x 3, phép nhân ma trận có thể được thực hiện bằng cách sử dụng một số nhân và phép cộng vô hướng không đổi). Một ứng dụng khả thi của thuật toán mà tôi đã đưa ra, là tính toánnSố thứ tự Fibre, bằng cách theo dõi ma trận có các mục nhập là a11=1,a12=1,a21=1,a22=0 để n- sức mạnh thứ.
Massimo Cafaro

Cuối cùng, cũng lưu ý rằng điều này đã được sắp xếp và hiểu đầy đủ: chỉ cần xem bình luận cho câu hỏi được cung cấp bởi @ user742.
Massimo Cafaro

7

Có hai thuật toán khác có thể có hoặc không có liên quan. Thuật toán đầu tiên cắt chéo ma trận của bạn (thường có thể), viết nó thànhM=PDP1, Ở đâu M,Dnói chung có thể có giá trị phức tạp. Sau đó bạn tính toánM=PDnP1. Lưu ý rằng rất dễ dàng để nâng một ma trận đường chéo lênnsức mạnh thứ. NếuMkhông thể chéo, bạn tìm biểu mẫu Jordan của nó và tiếp tục như trước đây (bây giờ bạn cũng phải tính toán một số hệ số nhị thức). Thuật toán này có thể không ổn định về số lượng.

Một thuật toán khác sử dụng thực tế là Mthỏa mãn đa thức đặc trưng của nó (hoặc thậm chí là đa thức tối thiểu của nó). Giả sửP(M)=0 cho một số P, nói đa thức đặc trưng. Sau đó chúng ta có thể tính toánMn kết thúc R[M]/(P(M))và sau đó thay thế M. Điều đó có nghĩa là chúng tôi tính toánMn như một đa thức, sử dụng thực tế rằng P(M)=0và chỉ ở cuối thay thế các giá trị của M. Chúng tôi thậm chí có thể tính toán trước tất cả các quyền hạn cần thiết củaM và tất cả các giá trị của Mk(modP(M)) cho k<2degP1và sau đó thuật toán này có thể nhanh hơn thuật toán là câu trả lời của Massimo Cafaro. Nó có thể ổn định hơn về mặt số so với thuật toán trướ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.