sách gpt4 ăn đã đi

Ví dụ về phép nhân ma trận viết bằng java (thuật toán Strassen)

In lại Tác giả: qq735679552 Thời gian cập nhật: 29-09-2022 22:32:09 27 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài blog CFSDN này sử dụng các ví dụ về phép nhân ma trận (thuật toán Strassen) viết bằng java do tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.

Thuật toán Strassen được nhà toán học người Đức Strassen đề xuất vào năm 1969. Phương pháp này đưa ra bảy biến trung gian, mỗi biến chỉ yêu cầu một phép nhân. Thuật toán đơn giản yêu cầu 8 phép tính nhân.

nguyên tắc

  。

Nguyên lý của thuật toán Strassen như sau. Sử dụng Symy để xác minh tính đúng đắn của thuật toán Strassen.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
nhập khẩu sympy như s
 
A = s.Ký hiệu( "MỘT" )
B = s.Ký hiệu( "B" )
C = s.Ký hiệu( "C" )
D = s.Ký hiệu( "Đ" )
E = s.Ký hiệu( "E" )
F = s.Ký hiệu( "F" )
G = s.Ký hiệu( "G" )
H = s.Ký hiệu( "H" )
p1 = A * (F - H)
p2 = (A + B) * H
p3 = (C + D) * E
p4 = D * (G - E)
p5 = (A + D) * (E + H)
p6 = (B - D) * (G + H)
p7 = (A - C) * (E + F)
 
in(A * E + B * G, (p5 + p4 - p2 + p6).simplify())
in(A * F + B * H, (p1 + p2).simplify())
in(C * E + D * G, (p3 + p4).simplify())
in(C * F + D * H, (p1 + p5 - p3 - p7).simplify())

Phân tích độ phức tạp

$$f(N)=7\lần f(\frac{N}{2})=7^2\lần f(\frac{N}{4})=...=7^k\lần f(\frac{N}{2^k})$$ 。

Độ phức tạp cuối cùng là $7^{log_2 N}=N^{log_2 7}$.

phép nhân ma trận java (thuật toán Strassen)

  。

Mã như sau. Bạn có thể xem định nghĩa của cấu trúc dữ liệu và trao đổi thời gian cho không gian.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
công cộng lớp học Ma trận {
     riêng tư cuối cùng Ma trận[] _matrixArray;
     riêng tư cuối cùng số nguyên N;
     riêng tư số nguyên yếu tố;
     công cộng Ma trận( số nguyên N) {
         cái này .n = n;
         nếu như (số != 1 ) {
             cái này ._matrixArray = mới Ma trận[ 4 ];
             ( số nguyên tôi = 0 ; tôi < 4 ; tôi++) {
                 cái này ._matrixArray[i] = mới Ma trận(n / 2 );
             }
         } khác {
             cái này ._matrixArray = vô giá trị ;
         }
     }
     riêng tư Ma trận( số nguyên N, Boolean cầnInit) {
         cái này .n = n;
         nếu như (số != 1 ) {
             cái này ._matrixArray = mới Ma trận[ 4 ];
         } khác {
             cái này ._matrixArray = vô giá trị ;
         }
     }
     công cộng vô hiệu bộ( số nguyên Tôi, số nguyên j, số nguyên Một) {
         nếu như (số lượng == 1 ) {
             phần tử = a;
         } khác {
             số nguyên kích thước = n / 2 ;
             cái này ._matrixArray[(i / kích thước) * 2 + (j / kích thước)].set(i % kích thước, j % kích thước, a);
         }
     }
     công cộng Ma trận đa (Ma trận m) {
         Kết quả ma trận = vô giá trị ;
         nếu như (số lượng == 1 ) {
             kết quả = mới Ma trận( 1 );
             kết quả.set( 0 , 0 , (phần tử * phần tử m));
         } khác {
             kết quả = mới Ma trận(n, SAI );
             kết quả._ma trậnArray[ 0 ] = P5(m).thêm(P4(m)).trừ(P2(m)).thêm(P6(m));
             kết quả._ma trậnArray[ 1 ] = P1(m).thêm(P2(m));
             kết quả._ma trậnArray[ 2 ] = P3(m).thêm(P4(m));
             kết quả._ma trậnArray[ 3 ] = P5(m).thêm(P1(m)).trừ(P3(m)).trừ(P7(m));
         }
         trở lại kết quả;
     }
     công cộng Ma trận thêm(Ma trận m) {
         Kết quả ma trận = vô giá trị ;
         nếu như (số lượng == 1 ) {
             kết quả = mới Ma trận( 1 );
             kết quả.set( 0 , 0 , (phần tử + phần tử m));
         } khác {
             kết quả = mới Ma trận(n, SAI );
             kết quả._ma trậnArray[ 0 ] = cái này ._matrixArray[ 0 ].thêm(m._matrixArray[ 0 ]);
             kết quả._ma trậnArray[ 1 ] = cái này ._matrixArray[ 1 ].thêm(m._matrixArray[ 1 ]);
             kết quả._ma trậnArray[ 2 ] = cái này ._matrixArray[ 2 ].thêm(m._matrixArray[ 2 ]);
             kết quả._ma trậnArray[ 3 ] = cái này ._matrixArray[ 3 ].thêm(m._matrixArray[ 3 ]);;
         }
         trở lại kết quả;
     }
     công cộng Ma trận trừ(Ma trận m) {
         Kết quả ma trận = vô giá trị ;
         nếu như (số lượng == 1 ) {
             kết quả = mới Ma trận( 1 );
             kết quả.set( 0 , 0 , (phần tử - m.element));
         } khác {
             kết quả = mới Ma trận(n, SAI );
             kết quả._ma trậnArray[ 0 ] = cái này ._matrixArray[ 0 ].trừ(m._matrixArray[ 0 ]);
             kết quả._ma trậnArray[ 1 ] = cái này ._matrixArray[ 1 ].trừ(m._matrixArray[ 1 ]);
             kết quả._ma trậnArray[ 2 ] = cái này ._matrixArray[ 2 ].trừ(m._matrixArray[ 2 ]);
             kết quả._ma trậnArray[ 3 ] = cái này ._matrixArray[ 3 ].trừ(m._matrixArray[ 3 ]);;
         }
         trở lại kết quả;
     }
     được bảo vệ Ma trận P1(Ma trận m) {
         trở lại _matrixArray[ 0 ].multi(m._matrixArray[ 1 ]).trừ(_matrixArray[ 0 ].multi(m._matrixArray[ 3 ]));
     }
     được bảo vệ Ma trận P2(Ma trận m) {
         trở lại _matrixArray[ 0 ].multi(m._matrixArray[ 3 ]).thêm(_mảng ma trận[ 1 ].multi(m._matrixArray[ 3 ]));
     }
     được bảo vệ Ma trận P3(Ma trận m) {
         trở lại _matrixArray[ 2 ].multi(m._matrixArray[ 0 ]).thêm(_mảng ma trận[ 3 ].multi(m._matrixArray[ 0 ]));
     }
     được bảo vệ Ma trận P4(Ma trận m) {
         trở lại _matrixArray[ 3 ].multi(m._matrixArray[ 2 ]).trừ(_matrixArray[ 3 ].multi(m._matrixArray[ 0 ]));
     }
     được bảo vệ Ma trận P5(Ma trận m) {
         trở lại (_matrixArray[ 0 ].thêm(_mảng ma trận[ 3 ])).multi(m._matrixArray[ 0 ].thêm(m._matrixArray[ 3 ]));
     }
     được bảo vệ Ma trận P6(Ma trận m) {
         trở lại (_matrixArray[ 1 ].trừ(_ma trậnMảng[ 3 ])).multi(m._matrixArray[ 2 ].thêm(m._matrixArray[ 3 ]));
     }
     được bảo vệ Ma trận P7(Ma trận m) {
         trở lại (_matrixArray[ 0 ].trừ(_ma trậnMảng[ 2 ])).multi(m._matrixArray[ 0 ].thêm(m._matrixArray[ 1 ]));
     }
     công cộng số nguyên lấy( số nguyên Tôi, số nguyên j) {
         nếu như (số lượng == 1 ) {
             trở lại yếu tố;
         } khác {
             số nguyên kích thước = n / 2 ;
             trở lại cái này ._matrixArray[(i / kích thước) * 2 + (j / kích thước)].get(i % kích thước, j % kích thước);
         }
     }
     công cộng vô hiệu trưng bày() {
         ( số nguyên tôi = 0 ; tôi < n; tôi++) {
             ( số nguyên j = 0 ; j < n; j++) {
                 System.out.print(lấy(i, j));
                 Hệ thống.out.print( " " );
             }
             System.out.println();
         }
     }
    
     công cộng tĩnh vô hiệu main(String[] args) {
         Ma trận m = mới Ma trận( 2 );
         Ma trận n = mới Ma trận( 2 );
         m.set( 0 , 0 , 1 );
         m.set( 0 , 1 , 3 );
         m.set( 1 , 0 , 5 );
         m.set( 1 , 1 , 7 );
         n.set( 0 , 0 , 8 );
         n.set( 0 , 1 , 4 );
         n.set( 1 , 0 , 6 );
         n.set( 1 , 1 , 2 );
         Ma trận res = m.multi(n);
         res. display();
     }
 
}

Tóm tắt

  。

Đến đây là kết thúc bài viết về phép nhân ma trận viết bằng Java. Để biết thêm thông tin về phép nhân ma trận trong Java (thuật toán Strassen), vui lòng tìm kiếm các bài viết trước của tôi hoặc tiếp tục duyệt các bài viết liên quan bên dưới. Tôi hy vọng bạn sẽ ủng hộ tôi trong tương lai! .

Liên kết gốc: https://blog.csdn.net/wj310298/article/details/44857175.

Cuối cùng, bài viết này về các ví dụ nhân ma trận (thuật toán Strassen) viết bằng java kết thúc tại đây. Nếu bạn muốn biết thêm về các ví dụ nhân ma trận (thuật toán Strassen) viết bằng java, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục Duyệt các bài viết liên quan, tôi hy vọng bạn. sẽ ủng hộ blog của tôi trong tương lai! .

27 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress