Jestem zainteresowany obliczania „th moc macierzy . Załóżmy, że mamy algorytm mnożenia macierzy, który działa w czasie . Następnie można łatwo obliczyć w czasie . Czy można rozwiązać ten problem w mniejszym stopniu złożoności?n × n A O ( M ( n ) ) A n O ( M ( n ) log ( n ) )
Wpisy w macierzy mogą na ogół pochodzić z semiringu, ale można założyć dodatkową strukturę, jeśli to pomoże.
Uwaga: rozumieć, że zasadniczo obliczeniowym w czas dałoby algorytm potęgowania. Ale wiele interesujących problemów sprowadza się do specjalnego przypadku potęgowania macierzy, gdzie m = , a ja nie byłem w stanie udowodnić tego samego na temat tego prostszego problemu. o ( M ( n ) log ( m ) )
Odpowiedzi:
Jeżeli matryca jest diagonalizable następnie biorąc th mocy mogą być wykonane w czasie gdzie jest czas diagonalize .n
Aby uzupełnić szczegóły, jeśli z przekątną , toA=P−1DP D
i można obliczyć, po prostu przenosząc każdy element przekątnej (każdą wartość własną ) na tą moc.Dn A n
źródło
Jednym dobrym wyjściem jest SVD . Biorąc pod uwagę rzeczywistym macierzy z pełno SVD rozdziela się od siebie, jak A = U Ď U , T , gdzie Σ jest macierzą diagonalną, w czasie O ( n- 3 ) . Według właściwości SVD, A m = U Σ m U T , więc tylko macierz diagonalna musi być potęgowana wykładniczo, i można to zrobić w O ( n log m )n×n A A=UΣUT Σ O(n3) Am=UΣmUT O(nlogm) czas. Przeprowadzenie końcowego mnożenia wymaga O ( n 2,3727 ) , więc mamy w sumie operacje O ( n 3 + n log m ) . U×Σm×UT O(n2.3727) O(n3+nlogm)
Aktualizacja po komentarzu Chodzi o to, że po znalezieniu SVD każda moc potrzebuje tylko do obliczenia według własnego algorytmu CW. Ale to nie jest twoje pytanie. Jeśli naprawdę istniałby algorytm o ( M ( n ) log ( m ) ) , natychmiast przekształciłby się w algorytm o ( log n ) dla liczb całkowitych. Podejrzewam, że jeden taki nie istnieje.O(n2.3727+nlogm) o(M(n)log(m)) o(logn)
źródło