30/09/2018, 18:17
Cách tính độ phức tạp của thuật toán?
Cho mình hỏi bạn nào biết cách tính độ phức tạp của các thuật toán có thể giải thích ngắn gọn cho mình cách tính hoặc có tài liệu nào dễ hiểu chút cho mình xin để tìm hiểu. Kỳ này mình học môn Trí Tuệ Nhân Tạo có liên quan khá nhiều đến thuật toán mà lại không biết gì về cách tính độ phức tạp thuật toán. Mình cảm ơn.
Bài liên quan
Mình cũng hóng Hồi trước làm mấy đề thi hsg có ghi độ phức tạp mà mình không hiểu lắm
P/s: Vẫn biết là đào mộ, nhưng mình vẫn cmt.
ví dụ đơn giản:
int n = b + c;
Có độ phức tạp là O(1)
int n = b + c; // Độ phức tạp là 1
for(int index = 0; index < n; index++)
{
}
có độ phức tạp là 1 + n => O(n) vì 1 quá nhỏ nên bỏ qua
int n = b + c;
for(int index = 0; index < n; index++)
{
for(;n;)
}
Có độ phức tạp là 1 + n mũ 2 ==> O(n mũ 2)
Còn mấy cái phức tạp như O(log(n)) thì lên mạng search sẽ có chỉ cách tính =))
Khi tính phải cẩn trọng với độ phức tạp của các câu lệnh thành phần. Ngoài ra nếu có
break;
thì chuyện nó không đơn giản đâu.Cách tính độ phức tập của thuật toán có 2 dạng. Hồi mới học mình cũng loay hoay phân vân khó hiểu.
1 là tính độ phức táp trên code đã có sắn hoặc đã có giả mã. ( thường lập trình viên làm cách này. Nghĩ ra thuật toán thì code r mới đánh giá)
2 là tính độ phức tạp khi chưa có giải mã hay code. Mà tính khi mới hình thành ý tưởng, khi phân tích trên cơ sở toán học. Cái này kiến thức toán phải vững (thường mấy người học chuyên toán hoặc khmt. Theo hướng nghiên cứu. Phân tích thiết kế thuật toán hay làm cách này)