Algoritme
Algoritme bisa diklasifikasikan berdasarkan jumlah waktu yang dibutuhkan untuk selesai dibandingkan dengan ukuran inputnya. Ada berbagai varietas: beberapa algoritme selesai dalam waktu linear relatif terhadap ukuran input, beberapa selesai dalam jumlah waktu yang eksponensial atau lebih buruh, dan beberapa berhenti. Sebagai tambahan, beberapa masalah bisa memiliki berbagai algoritme dengan kompleksitas yang berbeda, sementara permasalahan yang lain bisa saja tidak memiliki algoritme atau tidak diketahui algoritmanya yang efisien. Ada juga pemetaan dari beberapa algoritme terhadap permasalahan lain. Karena itu, lebih cocok untuk mengklasifikasikan permasalahan itu sendiri bukannya algoritme menjadi kelas-kelas yang sama berdasarkan kompleksitas dari kemungkinan algoritme terbaik baginya.
Masalah jarak terpendek
Jika merepresentasikan mesin abstrak nondeterministik dengan graf dimana busur dideskripsikan sebagai keadaan dan node dideskripsikan transisi yang mungkin, algoritme jarak terpendek dapat digunakan untuk mencari sekuens optimal dari berbagai pilihan untuk mencapai keadaan yang dituju, atau untuk mendirikan batas bawah dari waktu yang dibutuhkan untuk mencapai keadaan yang diberikan. Sebagai contoh, jika busur merepresentasikan keadaan dari puzzle seperti kubik rubik dan tiap node yang dituju berhubungan ke pergerakan tunggal atau belokan, algoritme jarak terpendek dapat digunakan untuk mencari solusi yang menggunakan pergerakan minimum yang memungkinkan.