Nhờ góp ý bài viết về Độ phức tạp thuật toán

Em mới viết 1 bài viết về độ phức tạp thuật toán (có tham khảo và có rút tỉa những ý chính). Mong mọi người nhận xét (về nội dung, về độ dễ hiểu,…) để em sửa ạ.
Rất hoan nghênh những đóng góp ý kiến của mọi người!

Có link github ở bên cạnh tag algorithm ạ, mong là ai cũng thấy để không có cmt “Bạn ơi mình không thấy link” :smile:

https://github.com/neihousaigaai/DNHWiki/blob/master/Algorithm/Others/complexity-of-algorithms.md

14 Likes

Một ông khác lại bảo. Còn có cách khác nhanh hơn :smile:

bool is_prime(int n) {
    if (n < 2) return false;

    if ((n > 2) && (n % 2 == 0)) return false;

    const int max_divisor = floor(sqrt(n));

    for (int k = 3; k <= max_divisor; k += 2) 
        if (n % k == 0) return false;
    return true;
}

Không rõ cú pháp C cho lắm :smile:

3 Likes

Cũng được đấy =)) Nhưng mà viết code này không biết có em newbie nào nuốt nổi không :v

1 Like

CS105 là sao ạ?
20 char…

1 Like

computer science 105

1 Like

105 vs 101 có ý nghĩa gì ạ?

CS có nhiều khóa học, giông ở Việt Nam học nhập môn lâp trinh-lâp trinh căn bản-cấu trúc dữ liệu… vậy đó:
Tùy theo mỗi trường mà nó có thể khác khác xí, thường thì hao hao nhau, ví dụ:
http://ucsd.edu/catalog/courses/CSE.html

2 Likes

UPD: Đã sửa theo góp ý của @graktung
Anh @nguyenhuuca có nhận gì về bài viết không ạ? Cho em học hỏi từ anh với ạ!

1 Like

Nếu được thì em phân lớp độ phực tạp thuật toán ra: hang số, logN, N ,N^2, 2^N…
Mà viết vậy là khá đó chứ :D.

2 Likes

Em cảm ơn anh ạ :smile:

+1 và merge req rồi nhé :))

Mà mình nghĩ nên viết thêm vô là có phải lúc nào độ phức tạp nhỏ cũng xài được không?
Vd: Linear Search mất O(n) và Binary Search mất O(logn).
Nhìn có vẻ Binary Seach nhanh hơn hẳn Linear Search, tuy nhiên Binary Search chỉ áp dụng đươc khi dữ liệu được sắp xếp.
Vậy nếu dữ liệu chưa được sắp xếp thì sao? Khi đó cái nào sẽ tiện hơn? :smiley:

Rồi như Distribution Counting sort mất O(n), tuy nhiên các giải thuật khác đều là O(n2) -> O(nlogn) thì tại sao không dùng Distribution Counting.

4 Likes

Cái đó về phần sorting, sẽ viết riêng 1 bài luôn.

2 Likes

Mà Eratosthene là O(nlogn/loglogn) :slight_smile:

2 Likes

Em thấy trên wiki là O(log log n) ạ.

1 Like

ủa nhầm O(n * loglogn).

1 Like

A, tội lỗi quá :’( cảm ơn anh đã chỉ ạ.

1 Like

Bài viết khá dễ hiểu, thích hợp cho người mới làm quen. Nếu có thể, tác giả nên viết thêm một số phương pháp tìm giới hạn chặt Big Theta. Một số cách chứng minh độ phức tạp thuật toán.

1 Like

cái ví dụ O(n^3) lấy nhân ma trận bằng cách thông thường cho nó bình dân, O(2^n) thì ví dụ là sinh tất cả các tập con của 1 tập hợp. Mấy cái log log n hay n log log gì bỏ hết đi có thường gặp đâu…

3 Likes

Cho em hỏi, có phải để đánh giá độ phức tạp của thuật toán bất kỳ, đầu tiên chúng ta phải xem trong đó có những phép tính toán gì, sau đó từng phép tính toán có độ phức tạp riêng rồi cộng tất cả lại phải không ạ? Em xem bài rồi vẫn thấy hơi lơ mơ tí

1 Like

Về nguyên tắc là vậy nhưng sẽ có trường hợp không gộp chung được (như số phép cộng và số phép nhân, hay số phép swap và so sánh). Rõ hơn thì phép cộng là O(n) còn phép nhân không phải O(n).

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?