Vì vậy, tôi đã làm điều này một cách kỳ lạ. Tôi nhận thấy rằng có hai mẫu trong cách hình thành mảng.
Đầu tiên là cách mẫu hàng trên cùng có sự khác biệt giữa mỗi thuật ngữ tăng từ 1 -> h trong đó h là chiều cao và l là chiều dài. Vì vậy, tôi xây dựng hàng trên cùng dựa trên mẫu đó
Đối với ma trận mờ (3,4), max RoC = 3
chúng ta sẽ thấy hàng trên cùng của biểu mẫu
1, (1+1), (2+2), (4+3) = 1, 2, 4, 7
Thay vào đó, giả sử thay vì mờ (3,9), max RoC = 3
chúng ta sẽ thấy một hàng trên cùng của
`1, (1+1), (2+2), (4+3), (7+3), (10+3), (13+3), (16+3), (19+3) = 1, 2, 4, 7, 10, 13, 16, 19, 22
Mẫu thứ hai là cách các hàng thay đổi lẫn nhau. Nếu chúng ta xem xét ma trận:
1 2 4 7 11
3 5 8 12 16
6 9 13 17 20
10 14 18 21 23
15 19 22 24 25
và trừ từng hàng từ hàng bên dưới (bỏ qua hàng thừa) chúng tôi nhận được
2 3 4 5 5
3 4 5 5 4
4 5 5 4 3
5 5 4 3 2
Khi nhìn thấy ma trận này, chúng ta có thể nhận thấy ma trận này là chuỗi 2 3 4 5 5 4 3 2
trong đó mỗi hàng là 5 số hạng của mẫu này được dịch chuyển 1 cho mỗi hàng. Xem dưới đây để trực quan.
|2 3 4 5 5| 4 3 2
2 |3 4 5 5 4| 3 2
2 3 |4 5 5 4 3| 2
2 3 4 |5 5 4 3 2|
Vì vậy, để có được ma trận cuối cùng, chúng tôi lấy hàng đầu tiên của chúng tôi, chúng tôi đã tạo và xuất ra hàng đó được thêm vào với 5 điều khoản cần thiết của mẫu này.
Mẫu này sẽ luôn có các đặc điểm bắt đầu 2-> max value
và kết thúc max value -> 2
trong đó max value = min(h+1, l)
và số lần giá trị tối đa sẽ xuất hiện là appearances of max = h + l -2*c -2
ở đâuc = min(h+1, l) - 2
Vì vậy, trong toàn bộ phương pháp tạo hàng mới của tôi trông giống như
1 2 3 7 11 + |2 3 4 5 5|4 3 2 = 3 5 8 12 16
3 5 8 12 16 + 2|3 4 5 5 4|3 4 2 = 6 9 13 17 20
6 9 13 17 20 + 2 3|4 5 5 4 3|4 2 = 10 14 18 21 23
10 14 18 21 23 + 2 3 4|5 5 4 3 2| = 15 19 22 24 25
Mã liên quan dưới đây. Nó không kết thúc ngắn nhưng tôi vẫn thích phương pháp này.
o,r=len,range
def m(l,h):
a,t=[1+sum(([0]+[x for x in r(1,h)]+[h]*(l-h))[:x+1]) for x in r(l)],min(l,h+1);s,c=[x for x in r(2,t)],[a[:]]
for i in r(h-1):
for j in r(o(a)):
a[j]+=(s+[t]*(l+h-2*(t-2)-2)+s[::-1])[0+i:l+i][j]
c+=[a[:]]
for l in c:print(l)
Hãy thử trực tuyến!