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

Chào mọi người, nay mình lập thread này để học tập về thuật toán, mình sẽ post các bài tập về thuật toán từ các nguồn trên mạng thường xuyên lên để mọi người cùng thảo luận. Thank you!

Bài 1:

1606214601027.png
 
Chào mọi người, nay mình lập thread này để học tập về thuật toán, mình sẽ post các bài tập về thuật toán từ các nguồn trên mạng thường xuyên lên để mọi người cùng thảo luận. Thank you!

Bài 1:

View attachment 301611

Ý tưởng thuật toán:
  • Với mỗi i, cho j lặp tăng dần đến khi x^i + y^j > bound thì chuyển sang giá trị i tiếp theo
  • Độ phức tạp thuật toán: O(i*j)

Cài đặt bằng Go:
https://play.golang.org/p/O24uG_IEa4M
 
Last edited:
Bài này mình thấy như này k biết đúng hay sai
1. Lấy max i,j
2. So sánh i,j để chạy vòng lặp
3. Nếu i<j độ phức tạp O(i) + O(j-i)^i
Nếu i>j độ phức tạp O(j) + O(j-i)^k

via theNEXTvoz for iPhone
k là gì đấy thím?
Nếu tính O là cận trên của độ phức tạp thì vẫn là O(i*j) thôi mà thím
 
k là gì đấy thím?
Nếu tính O là cận trên của độ phức tạp thì vẫn là O(i*j) thôi mà thím
Nói thật mình dốt toán lắm, chỉ nghĩ sao quote thôi ak.
K ở đây là không - ý câu này là không biết đúng hay sai ấy.
Còn về tiệm cận thì mình k nghĩ ra đc là độ phức tạp i*j ở đâu.
Nếu thím loop i ( loop j) thì sẽ là i^j chứ nhỉ?

via theNEXTvoz for iPhone
 
Nói thật mình dốt toán lắm, chỉ nghĩ sao quote thôi ak.
K ở đây là không - ý câu này là không biết đúng hay sai ấy.
Còn về tiệm cận thì mình k nghĩ ra đc là độ phức tạp i*j ở đâu.
Nếu thím loop i ( loop j) thì sẽ là i^j chứ nhỉ?

via theNEXTvoz for iPhone
Độ phức tạp mọi người vẫn hay tính giá trị của vòng for mà.
Còn ký hiệu O hay big-O là đại diện cho trường hợp worst case.
Thím có thể tham khảo ở đây: https://vnoi.info/wiki/translate/to...md#lưu-ý-khi-phân-tích-độ-phức-tạp-thuật-toán
 
Bài này kích thước nhỏ nên vét cạn cũng được, không cần thuật toán gì phức tạp.
Bound <= 1e6 thì i, j < 20, tốn cùng lắm là 400 lần lặp.

Sent from Xiaomi Redmi 5A using vozFApp
 
Độ phức tạp mọi người vẫn hay tính giá trị của vòng for mà.
Còn ký hiệu O hay big-O là đại diện cho trường hợp worst case.
Thím có thể tham khảo ở đây: https://vnoi.info/wiki/translate/to...md#lưu-ý-khi-phân-tích-độ-phức-tạp-thuật-toán

Big O không liên quan đến worst case đâu. Nó là chặn trên của độ phức tạp, có nghĩa là bất kỳ hàm f(n) nào tăng nhanh hơn g(n) thì đều là big-O của nó. Một thuật toán dùng n^2 phép tính thì gọi nó là O(n^3) hay O(2^n) cũng đều đúng cả.

Để chính xác thì nên dùng Theta, nhưng xác định Theta thường khó hơn nhiều.

Sent from Xiaomi Redmi 5A using vozFApp
 
Bước 1: Tính max i sao cho x^i < bound, max j sao cho y^j < bound. Dùng log là ra
Bước 2: Tính array A: x^0 -> x^i. Array B: y^0 -> y ^j
Bước 3: Tính tất cả các cặp của array A và B sao cho tổng nhỏ hơn bound
Ở bước 2 thì có thuật toán nào không ạ ? Hay chỉ for 2 mảng thôi bác ?
 
Back
Top