Một chƣơng trình máy tính thƣờng đƣợc cài đặt dựa trên một thuật toán đúng để giải quyết bài toán hay vấn đề. Tuy nhiên, ngay cả khi thuật toán đúng, chƣơng trình vẫn có thể không sử dụng đƣợc đối với một dữ liệu đầu vào nào đó vì thời gian để cho ra kết quả là quá lâu hoặc sử dụng quá nhiều bộ nhớ (vƣợt quá khả năng đáp