thảo luận [Học Tập] Topic thuật toán

  • Người tạo chủ đề Người tạo chủ đề unknowpc90
  • Ngày bắt đầu Ngày bắt đầu
Theo giang hồ đồn thì thông thạo recursion, greedy rồi chuyển qua practice cho quen thì thôi :sexy_girl:

via theNEXTvoz for iPhone
Đúng rồi đó Bác. Thằng QHĐ nó khác ở greedy là cái kết quả trước là kiểu như ảnh hưởng đến kết quả hiện tại. Còn recursion kết hợp với lưu lại kết quả là QHĐ rồi 😁. QHĐ này khó là tìm cái công thức chuyển từ bài toán con nhỏ sang bài toán lớn.
 
Các vị huynh đài cho mình hỏi muốn theo thuật toán với cấu trúc dữ liệu cần nắm chắc phần nào trong toán trước ạ?
 
2 năm gần đây thì trở nên khó hơn do số lượng ứng viên apply đông quá. 1000 ông thì kiểu thì chả vài chục ông ACM chuyên tin các kiểu :D Những thanh niên này có thể yếu eng hoặc lười tìm công ty gì đó, nên không giải được medium cũng hơi khó cạnh tranh :D Vòng test thì lọc còn 1-200, cuối cùng chọn ra vài chục (khoảng 50) fresher thôi.

Bạn mình năm ngoái được cho câu này: https://leetcode.com/problems/maximal-rectangle/

Vào được fresher thì vào, không thì tìm công ty khác mà apply, mấy slot intern mình thấy không ổn lắm :D
em làm bài này time o(n^3) thì có pass đc ko thím, trên leetcode thì pass
 
push/pop/getmedian mà O(1) thì ko thể nào, nếu có thể thì xài ctdl này để (comparison) sort trong thời gian O(n), cực kì vô lý vì cận dưới của comparison sort đã được chứng minh là Ω(nlogn) rồi
Nó không sort đâu. Nó tính median mới khi push và pop dựa vào median cũ. Ý là sau khi thực hiện 1 loạt push pop thì lấy đc luôn median
 
2 năm gần đây thì trở nên khó hơn do số lượng ứng viên apply đông quá. 1000 ông thì kiểu thì chả vài chục ông ACM chuyên tin các kiểu :D Những thanh niên này có thể yếu eng hoặc lười tìm công ty gì đó, nên không giải được medium cũng hơi khó cạnh tranh :D Vòng test thì lọc còn 1-200, cuối cùng chọn ra vài chục (khoảng 50) fresher thôi.

Bạn mình năm ngoái được cho câu này: https://leetcode.com/problems/maximal-rectangle/

Vào được fresher thì vào, không thì tìm công ty khác mà apply, mấy slot intern mình thấy không ổn lắm :D
Thanks a ạ, em cũng tàn tàn thôi chăm thì chăm dc mà giờ tới mức hard thì cày khó quá chắc quẹo lựa đường khác coi sao, algo không phải thế mạnh của em lắm
 
ý tôi là dùng cái stack có push/pop/getMedian trong O(1) này để thực hiện sort trên 1 mảng. Khi đó sort mảng chỉ mất O(n) là bất khả thi.

https://stackoverflow.com/questions...al-data-structure-o1-to-find-median-of-set-o1

cho 1 magic stack có push và getMedian trong O(1)

sort mảng A như sau:
  • tìm min, max trong A, O(n)
  • push các phần tử trong mảng A vào magic stack, n lần O(1) là O(n)
  • push n-1 lần giá trị min-1 vào magic stack, O(n). Khi này median sẽ là phần tử nhỏ nhất trong mảng A. Gọi getMedian để lấy ra phần tử đó.
  • lặp lại n-1 lần: insert 2 lần giá trị max+1 vào magic stack. Khi này median sẽ là phần tử nhỏ tiếp theo trong mảng A, gọi getMedian để lấy ra phần tử đó. Lặp n-1 lần, mỗi lần push/getMedian O(1) thì tổng cộng là O(n)
=> tổng là O(n)

vd A = 1,4,5,3,2
min = 1, max = 5, n = 5
push các phần tử trong A vào magic stack M, M chứa 2,3,5,4,1
push 4 lần giá trị 0 vào M, M chứa 0,0,0,0,2,3,5,4,1, getMedian trả về 1.
lặp lại 4 lần:
push 2 lần giá trị 6 vào M, M chứa 6,6,0,0,0,0,2,3,5,4,1, getMedian trả về 2.
push 2 lần giá trị 6 vào M, M chứa 6,6,6,6,0,0,0,0,2,3,5,4,1, getMedian trả về 3.
push 2 lần giá trị 6 vào M, M chứa 6,6,6,6,6,6,0,0,0,0,2,3,5,4,1, getMedian trả về 4.
push 2 lần giá trị 6 vào M, M chứa 6,6,6,6,6,6,6,6,0,0,0,0,2,3,5,4,1, getMedian trả về 5.
=> sorted A = 1,2,3,4,5

mảng A được sort trong O(n) là vô lý nên ko có magic stack này

Hay quá thím!

Nhưng vấn đề bài này là định nghĩa cái median của đề bài có phải định nghĩa median như bên thống kê ko? Median là phần tử "không nhỏ hơn và cũng ko lớn hơn phần tử còn lại". Theo định nghĩa này thì có thể ko cần sort mảng để tìm median, vì có thể tính ra median sau mổi thao tác push/pop. Với mổi thao tác push/pop chỉ cần đảm bảo median ko phải là phần tử min duy nhất hay max duy nhất là được.
 
Sửa lần cuối:
20228f498a0a-854c-487b-b083-a2f8474eb15a.png

JavaScript:
var getRow = function(rowIndex) {
  var res = Array(rowIndex + 1);
  res[0] = 1;
  for (var i = 1; i <= rowIndex; i++) {
    res[i] = res[i - 1] * ((rowIndex - i + 1) / i);
  }
  return res;
};

mn cho em hỏi bài dễ này với. 119. Pascal's Triangle II
sao mà tìm được công thức : res[i] = res[i - 1] * ((k - i + 1) / i) này nhỉ
 
thắc mắc về multi threading:
Giả sử có n thread cùng m task (không liên quan đến nhau) và m chia hết cho n. Như vậy thì chia đều task cho mỗi thread so với để thread tự lấy task thì hiệu năng có khác biệt không các bác. Thằng bạn hỏi mà em chưa học multi threading nên không biết như thế nào.
Tự lấy task để xử lý thì nhanh hơn
Chia đều vậy có task xử lý nhanh, xử lý chậm -> sẽ có thread xong trước. E chém thế :ROFLMAO:

Sent from vsmart Live via nextVOZ
 
Luyện Algo mà luyện Leetcode thì chỉ dành cho người có năng khiếu thôi. Chứ kiến thức chưa Master mà cứ luyện luyện luyện thì 10 năm cũng khó lên trình. Thường là dân chuyên nghiệp thi Competitive Programming như Gennady Korotkevich đọc đề là phải biết lời giải rồi. Korotkevich hồi phỏng vấn cũng có nói là: "Tôi không phải thiên tài. Tôi chỉ đơn giản là giỏi". Đặc điểm của Korotkevich là giải đề rất nhanh. Và anh này đạt nhiều giải thưởng do giải nhanh chứ không phải do giải được bài khó. Vòng Final Round của FB Hacker Cup 2021 có 3 bài siêu khó. Thì đều có người giải được. Trong khi Korotkevich không giải được bài nào.
cuối cùng là luyện algo ở đâu để lên trình vậy bác
 

Thống kê chủ đề

Ngày tạo
unknowpc90,
Người trả lời cuối
Spaghetti Code,
Trả lời
1.460
Lượt xem
154.040
Quay lại
Lên đầu trang