nashwade
Senior Member
Bác lưu 20000 cái queue tương ứng do mỗi độ cao, rồi duyệt queue từ nhỏ đến lớn.Chưa hiểu ý này lắm. Tại sao độ cao max là 20000 thì k cần dùng heap. Nếu k dùng heap thì dùng gì để thay cho heap?
Bác lưu 20000 cái queue tương ứng do mỗi độ cao, rồi duyệt queue từ nhỏ đến lớn.Chưa hiểu ý này lắm. Tại sao độ cao max là 20000 thì k cần dùng heap. Nếu k dùng heap thì dùng gì để thay cho heap?
T không nghĩ là cách này work. Vì thím bỏ toàn bộ độ cao vào sau đó duyệt để lấy từ nhỏ đến lớn. => cái ô đầu tiên mà thím lấy được nó có độ cao nhỏ nhất nhưng vị trí của nó có thể nằm ở giữa chứ k phải ngoài biên => sai ngay từ bước đầu tiên rồi.Bác lưu 20000 cái queue tương ứng do mỗi độ cao, rồi duyệt queue từ nhỏ đến lớn.

Cái độ cao mà mình nói là cái giá trị thím cho vào heap để so sánh đấy.Chưa hiểu ý này lắm. Tại sao độ cao max là 20000 thì k cần dùng heap. Nếu k dùng heap thì dùng gì để thay cho heap?
Ok, t hiểu ý thím rồi. Thay vì pop, push trong heap (O(logn)) thì cách này đơn giản là chỉ cần access vào trong cái mảng O(1). Nhưng khi search để tìm ra cái min tiếp theo thì phải dùng linear search đúng k? vậy thì độ phức tạp phải là O(m*n*20000) mới đúng chứ nhỉ. Đâu phải O(m*n + 20000) đâu. Hay t đang hiểu sai cách của thím?

Trong code của thím biến curMax chỉ có tăng lên nên để tìm cái min tiếp theo mình cứ pop từ cái queue ở độ cao curMax ra hết, nếu không còn thì lại tiếp tục tăng curMax lên. Độ phức tạp của 1 lần pop có thể lên tới O(20000) nhưng độ phức tạp của cả process cũng chỉ là O(m*n + 20000) vì mỗi phần tử chỉ được pop ra O(1) lần.Ok, t hiểu ý thím rồi. Thay vì pop, push trong heap (O(logn)) thì cách này đơn giản là chỉ cần access vào trong cái mảng O(1). Nhưng khi search để tìm ra cái min tiếp theo thì phải dùng linear search đúng k? vậy thì độ phức tạp phải là O(m*n*20000) mới đúng chứ nhỉ. Đâu phải O(m*n + 20000) đâu. Hay t đang hiểu sai cách của thím?![]()
Ok, Mình đã hiểu. Cảm ơn đã giải thích nhé.Trong code của thím biến curMax chỉ có tăng lên nên để tìm cái min tiếp theo mình cứ pop từ cái queue ở độ cao curMax ra hết, nếu không còn thì lại tiếp tục tăng curMax lên. Độ phức tạp của 1 lần pop có thể lên tới O(20000) nhưng độ phức tạp của cả process cũng chỉ là O(m*n + 20000) vì mỗi phần tử chỉ được pop ra O(1) lần.
.
. @_Gia_Cat_Luong_Chuẩn đét luôn, mình cũng mới biết cách này, khá hay đấy chứ. Thank thím @nashwade đã chia sẻ.Ok, Mình đã hiểu. Cảm ơn đã giải thích nhé..
Tóm lại là ntn: giả sử phần tử lớn nhất trong matrix có giá trị là k, khi đó sẽ cần m*n lần push O(1) và k lần pop O(1). Nên => dpt là O(m*n + k) đúng k?
cách tính dpt ntn ổn chưa? Mời các cao nhân nhận xét.. @_Gia_Cat_Luong_
for i in range(n):
for j in range(n):
x = i * i
y = j * j
z = i * j
for k in range(n):
w = a*k + 45
v = b*b

Thì đọc tìm hiểu thôi bác. LinkedList là kiến thức cơ bản, trước sau gì cũng phải học hếtXem tệp đính kèm 728107
Hôm nay tới 2 bài này. Cái đứng hình luôn. Em có biết linked list biểu diễn ntn đâu mà làm. Huhu![]()

Nhưng linked list trong JS em ko nhìn thsây được hình dạng nó ntn nên khó hình dung quáThì đọc tìm hiểu thôi bác. LinkedList là kiến thức cơ bản, trước sau gì cũng phải học hết![]()
Thím nên thử qua linked list single cho đơn giản rồi tiến đến các dạng khác, linked list như array thôi nhưng nó linh động hơn nhiều do không bị giới bởi bộ nhớNhưng linked list trong JS em ko nhìn thsây được hình dạng nó ntn nên khó hình dung quá
https://lmgtfy.app/?q=js+linked+list+implementationNhưng linked list trong JS em ko nhìn thsây được hình dạng nó ntn nên khó hình dung quá
Linked list khác array nhé, array truy xuất O(1), linked list truy xuất O(n).Thím nên thử qua linked list single cho đơn giản rồi tiến đến các dạng khác, linked list như array thôi nhưng nó linh động hơn nhiều do không bị giới bởi bộ nhớ
Viết cái hàm in nội dung nó ra.Nhưng linked list trong JS em ko nhìn thsây được hình dạng nó ntn nên khó hình dung quá