Thời gian mà máy tính khi thực hiện một thuật toán không chỉ phụ thuộc vào bản thân thuật toán đó, ngoài ra còn tùy thuộc từng máy tính. Để đánh giá hiệu quả của một thuật toán, có thể xét số các phép tính phải thực hiện khi thực hiện thuật toán này. Thông thường số các phép tính được thực hiện phụ thuộc vào cỡ của bài toán, tức là độ lớn của đầu vào. Vì thế độ phức tạp thuật toán là một hàm phụ thuộc đầu vào. Tuy nhiên trong những ứng dụng thực tiễn, chúng ta không cần biết chính xác hàm này mà chỉ cần biết một ước lượng đủ tốt của chúng.
Để ước lượng độ phức tạp của một thuật toán ta thường dùng khái niệm bậc O-lớn và bậc Θ (bậc Theta).
Gọi k là độ lớn đầu vào. Tùy thuộc từng bài toán mà
có thể nhận những giá trị khác nhau. Chẳng hạn, bài toán tính giai thừa thì
chính là số cần tính giai thừa. Nhiều bài toán số trị, chẳng hạn tính sai phân thì
là số chữ số có nghĩa cần đạt được. Trong các phép tính đối với ma trận thì
là số hàng hoặc cột của ma trận.
Độ phức tạp không phải là độ đo chính xác lượng tài nguyên máy cần dùng, mà đặc trưng cho động thái của hệ thống khi kích thước đầu vào tăng lên. Chẳng hạn với thuật toán có độ phức tạp tuyến tính (xem phần dưới), nếu kích thước đầu vào tăng gấp đôi thì có thể ước tính rằng tài nguyên cần dùng cũng tăng khoảng gấp đôi. Nhưng với thuật toán có độ phức tạp bình phương thì tài nguyên sẽ tăng gấp bốn. Mặt khác, với thuật toán có độ phức tạp hàm mũ thì chỉ cần công thêm 2 đơn vị vào độ lớn đầu vào cũng đã làm tài nguyên tăng gấp 4 lần (tức là theo cấp số nhân) rồi.
Định nghĩa trên mang tính "an toàn" theo nghĩa nó chỉ xét sự tiêu tốn tài nguyên không vượt quá một ngưỡng nào đó, chứ không nhất thiết đúng bằng (chú ý dấu bất đẳng thức). Theo đó, một thuật toán có độ phức tạp cỡ thì đồng thời sẽ có độ phức tạp cỡ ; với hàm ý rằng thuật toán này không bao giờ có động thái phức tạp hóa vượt qua ngưỡng đa thức bậc hai.
Như vậy nếu xét một cách chặt chẽ, ký hiệu Θ mới biểu thị độ phức tạp của thuật toán một cách chặt chẽ. Tuy nhiên qua một thời gian dài ký hiệu cũng đã được dùng phổ biến, chẳng hạn .
👁️
1 | 🔗 | 💖 | ✨ | 🌍 | ⌚
**Lý thuyết độ phức tạp tính toán** (tiếng Anh: _computational complexity theory_) là một nhánh của lý thuyết tính toán trong lý thuyết khoa học máy tính và toán học tập trung vào phân loại
Trong khoa học máy tính, **độ phức tạp tính toán** hoặc đơn giản là **độ phức tạp** của thuật toán là lượng tài nguyên cần thiết để chạy nó. Tập trung đặc biệt được đưa
Thời gian mà máy tính khi thực hiện một thuật toán không chỉ phụ thuộc vào bản thân thuật toán đó, ngoài ra còn tùy thuộc từng máy tính. Để đánh giá hiệu quả của
Trong lý thuyết độ phức tạp tính toán, **BPP** (viết tắt của cụm từ tiếng Anh **bounded-error probabilistic polynomial**) là lớp các bài toán quyết định giải được bằng máy Turing ngẫu nhiên trong thời
Trong lý thuyết độ phức tạp tính toán, **RP** (viết tắt của "randomized polynomial time") là lớp độ phức tạp bao gồm các bài toán sao cho tồn tại máy Turing ngẫu nhiên với các
Trong lý thuyết độ phức tạp tính toán, **ZPP** (viết tắt của zero-error probabilistic polynomial time - thời gian đa thức với xác suất sai bằng không) là lớp độ phức tạp bao gồm các
Trong lý thuyết độ phức tạp tính toán, **NL** (viết tắt tiếng Anh - Nondeterministic Logarithmic-space) là lớp độ phức tạp bao gồm các bài toán quyết định có thể giải bằng máy Turing không
Trong lý thuyết độ phức tạp tính toán, **NP** là viết tắt của "nondeterministic polynomial time" (thuật toán bất định trong thời gian đa thức). Cụ thể hơn, **NP** là tập hợp các bài toán
nhỏ| Để tìm kiếm một mục đã cho trong một danh sách theo thứ tự nhất định, có thể sử dụng cả thuật toán [[Tìm kiếm tuần tự|tìm kiếm nhị phân và tuyến tính (bỏ
Trong khoa học máy tính và vận trù học, **thuật toán xấp xỉ** là các thuật toán tìm lời giải xấp xỉ cho các bài toán tối ưu hóa. Thuật toán xấp xỉ thường được
Trong lý thuyết độ phức tạp tính toán, **chứng minh có thể kiểm chứng ngẫu nhiên (PCP** - viết tắt của probabilistically checkable proof) là một chứng minh có thể được kiểm tra bởi một
**Thuật toán RHO** (còn gọi là thuật toán **Pollard's rho**) là một thuật toán phân tích số nguyên thành thừa số. được phát minh bởi John Pollard vào năm 1975. Nó tỏ ra hiệu quả
Trong khoa học máy tính và trong toán học, **thuật toán sắp xếp** là một thuật toán sắp xếp các phần tử của một danh sách (hoặc một mảng) theo thứ tự (tăng hoặc giảm).
Trong khoa học máy tính, **thuật toán Floyd-Warshall** (còn được gọi là **thuật toán Floyd**, **thuật toán Roy-Warshall**, **thuật toán Roy-Floyd** hoặc **thuật toán WFI**) là một thuật toán để tìm đường đi ngắn nhất
nhỏ|Lưới cho tâm thất trái, ở ba độ phân giải lưới khác nhau và phân phối sợi/tấm Trong khoa học máy tính, và đặc biệt hơn trong lý thuyết tính toán và lý thuyết độ
Trong lý thuyết độ phức tạp tính toán, **P**, còn được gọi là **PTIME** hoặc **DTIME**, là một trong những lớp cơ bản nhất trong các lớp độ phức tạp tính toán. Nó bao gồm
Trong lý thuyết độ phức tạp tính toán và tính toán lượng tử, bài toán Simon là một bài toán thuộc dạng cây quyết định hay dạng truy vấn, được diễn tả bởi Daniel Simon
Trong lý thuyết tính toán, một **thuật toán không đơn định** là một thuật toán có một hoặc nhiều điểm lựa chọn, mà tại đó có nhiều hướng đi tiếp khác nhau mà không được
** Thuật toán so khớp chuỗi Knuth–Morris–Pratt** (hay **thuật toán KMP**) tìm kiếm sự xuất hiện của một "từ" W
trong một "xâu văn bản" S
bằng cách tiếp tục quá trình tìm kiếm khi
Trong tính toán lượng tử, **thuật toán lượng tử** là một thuật toán chạy bằng mô hình thực tế của tính toán lượng tử, mô hình được sử dụng phổ biến nhất là mô hình
phải|nhỏ|[[Lưu đồ thuật toán (thuật toán Euclid) để tính ước số chung lớn nhất (ưcln) của hai số _a_ và _b_ ở các vị trí có tên A và B. Thuật toán tiến hành bằng
**Thuật toán Shor** là một thuật toán lượng tử giúp phân tích nhân tử một số nguyên ở dạng _N_ = _p_._q_, với _p_ và _q_ là các số nguyên tố, tức là tìm ra
Trong khoa học máy tính, **A*** (đọc là _A sao_) là thuật toán tìm kiếm trong đồ thị. Thuật toán này tìm một đường đi từ một nút khởi đầu tới một nút đích cho
Trong khoa học máy tính, **thuật toán Kosaraju-Sharir** là một thuật toán tìm thành phần liên thông mạnh trong đồ thị có hướng. Theo Aho, Hopcroft và Ullman, thuật toán này xuất hiện trong một
Bài viết này là **danh sách các thuật toán** cùng một mô tả ngắn cho mỗi thuật toán. ## Thuật toán tổ hợp ### Thuật toán tổ hợp tổng quát * Thuật toán Brent: tìm
**Độ phức tạp** đặc trưng cho hành vi của một hệ thống hoặc mô hình có các thành phần tương tác theo nhiều cách và tuân theo các quy tắc cục bộ, có nghĩa là
Trong khoa học máy tính, **thuật toán Prim** là một thuật toán tham lam để tìm cây bao trùm nhỏ nhất của một đồ thị vô hướng có trọng số liên thông. Nghĩa là nó
**Thuật toán tìm kiếm Grover** là một thuật toán lượng tử dùng trong việc tìm kiếm trên một cơ sở dữ liệu chưa sắp xếp gồm N phần tử trong độ phức tạp về thời
} ## Bối cảnh thực tế Bài toán tìm đường đi ngắn nhất giữa hai đỉnh của đồ thị liên thông có nhiều ứng dụng thực tế như: * Bài toán chọn hành trình
Trong khoa học máy tính và lý thuyết đồ thị, **thuật toán Edmonds–Karp** là một trường hợp đặc biệt của thuật toán Ford–Fulkerson cho việc tìm luồng cực đại trong mạng. Nó có độ phức
Trong khoa học máy tính, **thuật toán dòng dữ liệu** là thuật toán để xử lý các dòng dữ liệu trong đó dữ liệu vào được cung cấp dưới dạng một dãy các phần tử,
Trong khoa học máy tính, **thuật toán tất định** là một thuật toán có đầu ra (output) hoàn toàn có thể dự đoán được (xác định được) qua đầu vào (input), và máy chạy thuật
**Thuật toán Dijkstra**, mang tên của nhà khoa học máy tính người Hà Lan Edsger Dijkstra vào năm 1956 và ấn bản năm 1959, là một thuật toán giải quyết bài toán đường đi ngắn
Ví dụ về một bài toán xếp ba lô giới hạn 1 chiều: chọn các hộp nào để tổng giá trị các hộp trong ba lô là lớn nhất mà tổng khối lượng dưới 15 kg?
thumb|Thuật toán Euclid để tìm ước chung lớn nhất (ƯCLN) của hai đoạn thẳng BA và DC, độ dài của cả hai đều là bội của một "đơn vị" độ dài chung. Vì độ dài
**Thuật toán Ford- Fulkerson** (đặt theo L. R. Ford và D. R. Fulkerson) tính toán luồng cực đại trong một mạng vận tải. Tên Ford-Fulkerson cũng thường được sử dụng cho thuật toán Edmonds-Karp, một
**Thuật toán Luhn** hoặc **công thức Luhn**, cũng được biết là thuật toán "modulus 10" hay "mod 10", nó được đặt theo tên người sáng tạo ra nó, nhà khoa học của IBM Hans Peter
Các **thuật toán tìm đường đi trong mê cung** là những phương pháp được tự động hóa để giải một mê cung. Các thuật toán chọn đường ngẫu nhiên, bám theo tường, Pledge, và Trémaux
thumb|Tarjan's Algorithm Animation **Thuật Toán Tarjan** (được đặt theo tên của người tìm ra nó - Robert Tarjan) là một thuật toán trong lý thuyết đồ thị dùng để tìm thành phần liên thông mạnh
Trong lý thuyết độ phức tạp tính toán (_Computational complexity theory_), **Đồ thị con đẳng cấu** là một bài toán quyết định (_decision problem_) thuộc loại NP-đầy đủ (_NP-complete_). Phát biểu của bài toán quyết
Trong toán học và khoa học máy tính, **lý thuyết số tính toán**, còn được gọi là **lý thuyết số thuật toán**, là nghiên cứu về các thuật toán để thực hiện tính toán lý
nhỏ|Nếu người bán hàng xuất phát từ điểm A, và nếu khoảng cách giữa hai điểm bất kì được biết thì đâu là đường đi ngắn nhất mà người bán hàng có thể thực hiện
**Lý thuyết thông tin thuật toán** là một lĩnh vực của lý thuyết thông tin và khoa học máy tính liên quan đến mối quan hệ giữa tính toán và thông tin. Theo Gregory Chaitin,
Trong lý thuyết độ phức tạp tính toán, **PSPACE** là tập hợp các bài toán quyết định giải được bằng máy Turing trong không gian/bộ nhớ đa thức. ## Định nghĩa được định nghĩa
**Biến đổi Fourier lượng tử** là một phép biến đổi tuyến tính trên các qubit (đơn vị cơ bản của thông tin lượng tử), phép biến đổi này tương tự như biến đổi Fourier rời
Trong lý thuyết độ phức tạp tính toán, lớp **NP-đầy đủ** là một lớp các bài toán quyết định. Một bài toán _L_ là NP-đầy đủ nếu nó nằm trong lớp NP (lời giải cho
**Hệ thống phức tạp** là một hệ thống bao gồm nhiều thành phần có thể tương tác với nhau. Ví dụ về các hệ thống phức tạp là khí hậu toàn cầu, sinh vật, não
Bài này nói về từ điển các chủ đề trong toán học. ## 0-9 * -0 * 0 * 6174 ## A * AES * ARCH * ARMA * Ada Lovelace * Adrien-Marie Legendre *
**Vật lý tính toán** là việc nghiên cứu và thực hiện phân tích số để giải quyết các vấn đề trong vật lý học mà đã tồn tại một lý thuyết định lượng. Trong lịch
Trong lý thuyết độ phức tạp tính toán, **co-NP** là một lớp độ phức tạp. Một ngôn ngữ nằm trong co-NP khi và chỉ khi phần bù của nó nằm trong **NP**. Nói