- Bộ nhớ phù hợp .
Trong đó tính dễ sử dụng là một yêu cầu cơ bản nhất.
Khái niệm thuật toán chính xác liên quan đến các khái niệm máy Turing, hàm đệ qui, thuật toán Marcop, ngôn ngữ hình thức của N.Chomsky. Những khái niệm này không nằm trong khuôn khổ Giáo trình này. Chúng tôi trình bày một khái niệm quan trọng liên quan trực tiếp đến thuật toán. Đó là độ phức tạp thuật toán. Nhờ có khái niệm này chúng ta có thể đánh giá và so sánh được các thuật toán với nhau. Hay nói một cách khác, chúng ta có thể có công cụ đo, để lựa chọn một thuật toán tốt cho lời giải bài toán cần giải quyết. Thông thường chúng ta có hai loại đánh giá: Một là độ phức tạp về thời gian tính của thuật toán, hai là độ phức tạp về phạm vi bộ nhớ dùng cho thuật toán. Đối với một thuật toán, thời gian tính và phạm vi bộ nhớ cần dùng thường mâu thuẫn nhau. Có nghĩa là, nếu thời gian tính của thuật toán là ngắn thì thông thường phạm vi bộ nhớ dùng cho thuật toán đó lại lớn. Mà chúng ta lại muốn chọn một thuật toán thời gian tính thì ngắn và bộ nhớ dùng cũng nhỏ. Như vậy, trong từng trường hợp cụ thể, chúng ta sẽ quyết định chọn lựa thuật toán nào. Trong phạm vi Giáo trình này chúng ta chỉ trình bày về độ phức tạp thời gian tính. Đó là độ phức tạp thường được đề cập nhiều nhất. Đồng thời, trong phạm vi giới hạn của giáo trình, chúng ta cũng chỉ trình bày độ phức tạp của thuật toán theo góc độ tin học.
Giả sử T là thuật toán giải quyết bài toán A. Chúng ta gọi T(n) là độ phức tạp thời gian của thuật toán T. Thông thường T(n) được biểu diễn dưới dạng sau: T(n) = O(g(n)). Trong đó hàm g(n) là cấp của T(n); n là độ dài thông tin đưa vào.
Ví dụ: T(n) = O(n2)
Chúng ta hiểu f(n) = O(g(n)), nếu ∃ hằng số C và số nguyên n0.
Sao cho:
∀n ≥ n0 ta luôn có: f(n) ≤ Cg(n)
(Nói cách khác là g(n) là hàm chặn trên của f(n) từ một chỉ số nào đó trở đi).
Rõ ràng, trong quá trình đánh giá thuật toán, nếu có g(n) nhỏ nhất thì đó là sự đánh giá chính xác nhất.
Có thể thấy rằng, bài toán tìm g(n) nhỏ nhất khá phức tạp.
Bây giờ, chúng ta đưa ra độ phức tạp thời gian là hàm nhiều biến. Giả sử T(n1,... , nk ) là độ phức tạp thời gian của thuật toán T và T(n1,... , nk) = O(g(n1,....nk)). Khi đó chúng ta hiểu rằng tồn tại các số C , n01...n0k sao cho với mọi n1 ≥ n01, ...., nk
≥ n0k
Ví dụ: Đầu vào là R = {a1,..., an}, r = {h1,..., hm}
Chúng ta có T(n,m) = O(g(n,m))
Trong trường hợp có nhiều đối số thì phức tạp thời gian được tính theo đối số có giá trị lớn nhất.
Ví dụ: T(n,m) = O(n2+2m). Khi đó độ phức tạp thời gian của thuật toán T là hàm số mũ.
Việc đánh giá như trên gọi là độ phức tạp thời gian tồi nhất.
Trong thực tế có nhiều cách đánh giá độ phức tạp thời gian. Ví dụ như độ phức tạp thời gian trung bình. Độ phức tạp này gắn với nhiều độ đo khác nhau (độ đo xác suất). Giáo trình này đánh giá độ phức tạp thời gian theo cách tồi nhất (tìm g(n) chặn trên).