Có mối quan hệ trực tiếp giữa độ phức tạp của thuật toán (chẳng hạn như trường hợp tốt nhất / xấu nhất của sắp xếp nhanh) và lớp automata có thể thực hiện thuật toán.
Câu hỏi mà lớp automata nào có thể thực hiện một thuật toán nhất định như sắp xếp nhanh là rất khó, bởi vì không rõ điều gì sẽ được tính là việc thực hiện thuật toán đó. Để sắp xếp nhanh, các so sánh được thực hiện chắc chắn phải giống nhau, nhưng phải theo thứ tự so sánh xảy ra cũng giống nhau? Điều gì về thứ tự truy cập đọc vào các yếu tố cụ thể của đầu vào? Thứ tự của các hoạt động sao chép, di chuyển và trao đổi cho các yếu tố cụ thể?
Bạn sẽ phải xác định khá một số thầy mo đối với những hoạt động mà quan trọng với bạn, nhưng sau đó bạn đã có trong một tình huống rất cụ thể dựa trên các thuật toán, và khá xa từ các lớp học chung của automata thường nghiên cứu. Cách giải quyết vấn đề nan giải này là nói về các vấn đề thay vì thuật toán và chính thức hóa các vấn đề bằng cách nói về các ngôn ngữ.
Ví dụ, có một phạm vi phức tạp đẩy xuống automata có thể thể hiện?
Không thực sự, bởi vì một automata đẩy xuống có thể đọc đầu vào của nó chỉ một lần và chỉ theo hướng chuyển tiếp. Tuy nhiên, nếu bạn chia máy thành một phần được phép đọc đầu vào tiến và lùi theo ý muốn và duy trì số lượng con trỏ hữu hạn cho các vị trí đầu vào cụ thể (NL) và một phần là tự động đẩy xuống nhận được đầu vào của nó từ phần khác, sau đó bạn nhận được lớp phức tạp LOGCFL , bằng với SAC 1 (một lớp mạch).
Nếu bạn không tách hai bộ phận và chỉ cần thêm một ngăn xếp để NL, sau đó bạn sẽ có được lớp automata AuxPDA , tương đương với lớp phức tạp P . Nhưng nếu bạn quyết định giới hạn thời gian chạy của automata đó (với bộ lưu trữ phụ trợ stack và logarit) theo thời gian đa thức, thì bạn nhận được NAuxPDA P , một lần nữa bằng với LOGCFL. (Và nếu bạn nhấn mạnh vào thời gian chạy đa thức xác định, loại bỏ ngăn xếp, nhưng cho phép lưu trữ phụ trợ polylogarithmic, thì bạn nhận được SC .)
Mặt khác, nếu bạn giữ hạn chế rằng automata chỉ có thể đọc đầu vào của nó một lần và chỉ theo hướng chuyển tiếp, và yêu cầu thêm rằng nó chỉ có thể sử dụng ngăn xếp của mình theo cách rất xác định trực tiếp dựa trên đầu vào (tức là ký hiệu đầu vào xác định xem automata có đẩy thứ gì đó trên ngăn xếp, bật thứ gì đó từ ngăn xếp hay không để ngăn xếp ngăn xếp), sau đó bạn kết thúc với một automata đẩy xuống rõ ràng, có thể nhận ra chính xác các ngôn ngữ được lồng vào nhau , cũng có thể được nhận ra trong không gian logarit xác định .