Không có thứ gọi là bất biến của bất cứ điều gì: bất kỳ vòng lặp nào cũng có rất nhiều bất biến. Bạn cần tìm một bất biến thú vị. Vì bạn đang cố chứng minh rằng vòng lặp tính toán nhân ma trận, nên bất biến của bạn phải ngụ ý rằng khii = j = k = n, các hệ số của C là những sản phẩm của ma trận A × B, I E
∀ i ∈ [ 1 , n ] , ∀ j ∈ [ 1 , n ] , C( i , j ) =Σk = 1nMột ( i , k ) ⋅ B ( k , j )
Nó là khá tự nhiên để chuyên gia tài sản này của
Tôi và
j để phỏng đoán một bất biến cho các vòng lặp bên ngoài và giữa:
- ∀ j ∈ [ 1 , n ] , C( i , j ) =Σnk = 1Một ( i , k ) ⋅ B ( k , j ) ở vòng ngoài
- C( i , j ) =Σnk = 1Một ( i , k ) ⋅ B ( k , j ) trên vòng lặp giữa
Mỗi lần chạy của vòng lặp bên trong sẽ thêm kthuật ngữ thứ cho tổng, dẫn đến bất biến được đề xuất:
C( i , j ) =Σl = 1kMột ( i , l ) ⋅ B ( l , j )
Thật dễ dàng để thấy rằng nếu bất biến này giữ, thì bất biến được đề xuất cho vòng lặp giữa giữ, và từ đó, bất biến được đề xuất cho vòng lặp bên ngoài giữ, và chương trình thực hiện những gì được mong đợi.
Những gì còn lại phải được chứng minh là điều kiện ban đầu. Bạn cần chứng minh rằng∀ i , ∀ j , C( i , j ) =Σ0l = 1Một ( i , l ) ⋅ B ( l , j ), I E ∀ i , ∀ j , C( i , j ) = 0khi vào chương trình. Bạn đã khởi tạo tốt hơnCvì vậy mà nó là như vậy. Ngoài ra, bạn có thể đạt được thuộc tính này bằng cách thực hiện khởi tạo bên trong vòng lặp giữa, ngay trước khi vào vòng lặp bên trong.