Algoritma adalah prosedur komputasi yang terdefinisi dengan baik yang mengambil beberapa nilai atau serangkaian nilai sebagai input dan menghasilkan beberapa nilai atau serangkaian nilai sebagai output . Kita juga dapat menjadikan algoritma sebagai alat ukur untuk memecahkan suatu masalah komputasi. Dalam suprastruktur intelektual rekayasa perangkat lunak, "algoritma" adalah jargon yang menahan beban. Algoritma yang dapat ditemukan, dibedakan, dan transparan melayani tujuan membangun sistem perangkat lunak yang transparan, dapat dipahami, dan andal. Ini sering kali selaras dengan perhatian sosial yang dimiliki programmer dan non-programmer dengan desain sistem perangkat lunak. Algoritma berarti urutan langkah-langkah secara terstruktur untuk menyelesaikan suatu tugas atau masalah tertentu dengan cara yang paling efisien dan terukur. Algoritma merupakan blueprint logis untuk menyelesaikan permasalahan komputasi secara terstruktur dan dapat diprediksi. Dalam konteks komputasi, algoritma dikarakteristikkan oleh beberapa properti kunci:
- Determinisme: Setiap langkah dapat diprediksi.
- Finiteness: Memiliki titik akhir.
- Menerima nol atau lebih masukan
- Output: Menghasilkan satu atau lebih keluaran
- Efektivitas: Dapat diselesaikan dalam jumlah langkah terbatas.
2.2 Kompleksitas Algoritma
2.2.1 Kompleksitas Waktu
Kompleksitas waktu dalam analisis algoritma adalah pengukuran waktu yang dibutuhkan oleh algoritma untuk menyelesaikan suatu masalah berdasarkan ukuran inputnya. Kompleksitas waktu biasanya juga dihitung berdasarkan jumlah tahapan komputasi yang diperlukan untuk menjalankan algoritma. Biasanya dinyatakan dalam notasi Big O (O(n)), yang menggambarkan laju pertumbuhan waktu eksekusi algoritma seiring bertambahnya ukuran input dan mengekspresikan pertumbuhan kompleksitas:
- O(1): Konstan
- O(log n): Logaritmik