Mô hình tính toán nào được sử dụng để phân tích thời gian chạy của thuật toán nhân ma trận?


7

Mặc dù tôi đã học được điều gì đó về thời gian chạy tiệm cận của thuật toán nhân ma trận (thuật toán của Strassen và những thứ tương tự), tôi chưa bao giờ tìm thấy bất kỳ tài liệu tham khảo rõ ràng và thỏa đáng nào cho một mô hình tính toán, được sử dụng để đo lường mức độ phức tạp này. Trong thực tế, tôi đã tìm thấy ba câu trả lời có thể, không có câu trả lời nào trong số đó có vẻ hoàn toàn thỏa đáng:

  • Wikipedia nói rằng mô hình được sử dụng ở đây là Máy Turing Multitape. Điều này dường như không có ý nghĩa nhiều đối với tôi, vì trong phân tích nhân ma trận, phép nhân vô hướng được cho là có độ phức tạp thời gian không đổi. Đây không phải là trường hợp trên Turing Machines.
  • Một số văn bản mô tả sự phức tạp chỉ mơ hồ như số lượng các phép toán số học được sử dụng. Tuy nhiên, chính xác các hoạt động số học trong bối cảnh này là gì? Tôi cho rằng phép cộng, phép nhân và có thể là phép trừ. Nhưng những gì về phân chia, phân chia số nguyên, phần còn lại, vv? Và những gì về hoạt động bitwise - làm thế nào để chúng phù hợp với cài đặt này?
  • Cuối cùng, gần đây tôi đã phát hiện ra một bài báo, sử dụng máy BSS làm mô hình tính toán. Tuy nhiên, điều này cũng có vẻ hơi lạ đối với tôi, vì, ví dụ, ma trận số nguyên, đối với tôi không có ý nghĩa gì khi không cho phép các hoạt động như, ví dụ: chia số nguyên.

Tôi sẽ biết ơn bất cứ ai, những người có thể giúp tôi sắp xếp những thứ này.


Đối với sự phức tạp, chúng tôi chỉ quan tâm đến một biện pháp: các bước của một TM. Trong phân tích thuật toán, bạn khó có thể có được thứ gì đó chính xác hơn "số lượng thao tác cơ bản", tương ứng với các hoạt động truy cập ALU / bộ nhớ cơ bản trong bộ xử lý. Tôi nghĩ rằng bạn đang yêu cầu phân tích thuật toán, không phải là vấn đề phức tạp?
Raphael

@Raphael "Đối với sự phức tạp, chúng tôi chỉ quan tâm đến một biện pháp: các bước của một TM." Xin lỗi nhưng điều đó hoàn toàn sai. Trước hết, có rất nhiều mô hình tính toán không phải là máy Turing: mạch chẳng hạn. Sau đó, bạn nhận được những thứ như phức tạp hình học và mô tả. Ngay cả trong các lĩnh vực của máy Turing, không gian cũng là một thước đo quan trọng như thời gian. Và loại máy Turing nào? Tất cả các máy xác định, không phá hủy, xen kẽ và xác suất đều có các yêu cầu tài nguyên khác nhau. Truy cập ngẫu nhiên rất có ý nghĩa nếu bạn muốn phân loại tốt hơn "thời gian đa thức".
David Richerby

@DavidR Richby: Tất cả đều đúng. Tuyên bố của chúng tôi là tương thích; Tôi nên làm cho phạm vi của tôi rõ ràng hơn. "Đối với sự phức tạp về thời gian như được xem xét trong các lớp cổ điển như P, NP, v.v., chúng tôi quan tâm ...".
Raphael

@Raphael Nhưng đây không phải là câu hỏi về P, NP, v.v ... Đó là câu hỏi về một vấn đề cụ thể. Giới hạn trên cho bất kỳ vấn đề nào sẽ liên quan đến phân tích thuật toán vì vậy tôi không nghĩ rằng thực sự có thể chia hai. Phải nói rằng, vâng, dường như sự phức tạp của Strassen và v.v. được thể hiện dưới dạng "các phép toán số học", chứ không phải trên bất kỳ mô hình tính toán tiêu chuẩn nào.
David Richerby

Về cách tiếp cận thứ hai của bạn (đếm các phép toán số học): Bạn có thể chỉ cần đếm số lượng của từng thao tác (nhân, cộng, hoạt động theo bit, v.v.) một cách riêng biệt. Bạn có thể tìm thấy một ví dụ trong đó được thực hiện, ví dụ như trong Sedgewick & Flajolet: Giới thiệu về Phân tích thuật toán (ở đó họ phân tích Quicksort khá chính xác). Với phép nhân ma trận tôi tin rằng số phép nhân liên quan chiếm ưu thế còn lại, vì vậy về cơ bản bạn đang tính điều đó.
john_leo

Câu trả lời:


7

Các thuật toán nhân ma trận được phân tích theo độ phức tạp số học . Mô hình tính toán là các chương trình đường thẳng với hướng dẫn của biểu mẫuabc, Ở đâu {+,,×,÷}, a là một biến và b,ccó thể là biến, đầu vào hoặc hằng. Ngoài ra, một số biến được phân biệt là đầu ra . Ví dụ, đây là cách nhân hai2×2 ma trận sử dụng thuật toán thông thường, với ma trận đầu vào aij,bij và ma trận đầu ra cij:

x11a11×b11y11a12×b21c11x11+y11x12a11×b12y12a12×b22c12x12+y12x21a21×b11y21a22×b21c21x21+y21x22a21×b12y22a22×b22c22x22+y22
Số đo phức tạp là số lượng dòng trong chương trình.

Đối với phép nhân ma trận, người ta có thể chứng minh một dạng bình thường cho tất cả các thuật toán. Mọi thuật toán có thể được chuyển đổi thành một thuật toán có dạng sau, với chi phí chỉ là sự gia tăng nhân số không đổi về độ phức tạp:

  1. Một số kết hợp tuyến tính αi của ma trận đầu vào ajk được tính toán.
  2. Một số kết hợp tuyến tính βi của ma trận đầu vào bjk được tính toán.
  3. γiαi×βi.
  4. Mỗi mục trong ma trận đầu ra là sự kết hợp tuyến tính của γiS.

Đây được gọi là hình thức bình thường song tuyến . Trong thuật toán nhân ma trận hiển thị ở trên,xjk,yjk có chức năng như γi, nhưng trong thuật toán của Strassen, các kết hợp tuyến tính thú vị hơn; họ làMitrong mô tả của Wikipedia .

Sử dụng phương pháp kéo căng (nghĩa là áp dụng đệ quy cùng một thuật toán), tương tự như phân tích tiệm cận của thuật toán Strassen, người ta có thể chỉ ra rằng thuật toán đó được nhân lên như vậy để nhân lên n×n ma trận với r sản phẩm r biến γi), sau đó tùy ý N×N ma trận có thể được nhân lên trong sự phức tạp O(Nlognr); do đó chỉ có số lượng sản phẩm quan trọng không có triệu chứng. Trong thuật toán của Strassen,n=2r=7và vì vậy, ràng buộc là O(Nlog27).

Vấn đề tìm số lượng sản phẩm tối thiểu cần thiết để tính toán nhân ma trận có thể được đặt ra khi tìm thứ hạng của một tenxơ bậc ba (một "ma trận" với ba chỉ số chứ không phải hai), và điều này tạo ra mối liên hệ với lý thuyết phức tạp đại số. Bạn có thể tìm thêm thông tin trong cuốn sách này hoặc những ghi chú bài giảng (tiếp tục ở đây ).


Lý do mô hình này được sử dụng là gấp đôi: thứ nhất, nó rất đơn giản và dễ phân tích; thứ hai, nó liên quan chặt chẽ với mô hình RAM phổ biến hơn.

Các chương trình đường thẳng có thể được triển khai trong mô hình RAM và độ phức tạp trong cả hai mô hình có liên quan chặt chẽ: các phép toán số học có chi phí đơn vị trong một số biến thể của mô hình (ví dụ: mô hình RAM với số thực) và mặt khác có liên quan đến đa thức đến kích thước của các con số. Do đó, trong trường hợp nhân ma trận mô-đun, độ phức tạp số học cung cấp giới hạn trên về độ phức tạp trong mô hình RAM. Trong trường hợp nhân ma trận số nguyên hoặc hợp lý, người ta có thể chỉ ra rằng đối với các thuật toán song tuyến xuất phát từ phép kéo căng, kích thước của các số không tăng quá nhiều và do đó, độ phức tạp số học cung cấp giới hạn trên cho mô hình RAM, cho đến các yếu tố logarit .

Nó có thể là một trường hợp mà một máy RAM có thể tạo ra một số thủ thuật mà mô hình số học không biết. Nhưng thông thường chúng ta muốn các thuật toán nhân ma trận hoạt động cho ma trận trên các trường tùy ý (hoặc thậm chí là các vòng) và trong trường hợp đó, thuật toán thống nhất chỉ nên sử dụng các phép toán số học được chỉ định bởi mô hình. Vì vậy, mô hình này là một chính thức của các thuật toán "độc lập trường".


Có một mô hình máy Turing?
T ....

Hóa ra bạn không cần. Thông thường người ta giới thiệu máy Turing để giới thiệu tính đồng nhất - một đoạn mã hoạt động cho tất cản. Mặc dù mô hình tôi đã mô tả là không đồng nhất, nhưng hóa ra bạn có thể tiếp cận số mũ tối ưuω thậm chí đồng đều, bằng cách bắt buộc một thuật toán tốt trên một số kích thước ma trận nhỏ hơn nhiều so với n.
Yuval Filmus
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.