Anda di halaman 1dari 49

Pengertian Algoritma

langkah (algoritma) yang telah ditentukan Perkembangan ilmu pengetahuan


dan teknologi memungkinkan manusia menghasilkan karya yang semakin
canggih dan kompleks. Meskipun komputer dapat melakukan perhitungan
lebih cepat daripada manusia pada umumnya, komputer tidak dapat
memecahkan masalah tanpa diajarkan oleh manusia melalui urutan
sebelumnya.

Selain digunakan untuk menyelesaikan masalah oleh komputer, algoritma juga


dapat diterapkan untuk menyelesaikan masalah sehari-hari yang
membutuhkan serangkaian proses atau langkah-langkah prosedural. Untuk
lebih memahami apa itu algoritma, mari kita pelajari apa artinya dari beberapa
sumber.

Pengertian umum dari suatu algoritma adalah urutan dari sejumlah langkah
logis dan sistematis untuk memecahkan suatu masalah tertentu.

Beberapa ahli menganggap algoritma sebagai urutan langkah-langkah yang


harus diikuti dalam matematika atau perhitungan untuk memecahkan masalah
lain, terutama komputer.

Artinya semua susunan logis yang disusun dalam urutan sistem pembelajaran
tertentu dan digunakan untuk memecahkan suatu masalah tertentu, dapat kita
katakan seperti sebuah algoritma.

Umumnya algoritma akan digunakan untuk dapat melakukan perhitungan,


melakukan inferensi otomatis, dan mengolah data pada komputer dengan
menggunakan software tertentu.

Selain itu, Algoritma juga berisi serangkaian instruksi terbatas serta instruksi
khusus untuk menghitung fungsi yang, ketika dieksekusi dan diproses,
menghasilkan output tertentu dan kemudian berhenti pada kondisi terminasi
yang ditentukan.

Algoritma adalah suatu langkah atau metode yang telah direncanakan secara
matang sehingga terurut dan terorganisir dengan baik dan biasanya digunakan
untuk memecahkan suatu masalah dengan memberikan suatu instruksi
sehingga menjadi suatu tindakan.
Sedangkan dalam Kamus Besar Bahasa Indonesia (KBBI), algoritma adalah
suatu prosedur sistematis untuk menyelesaikan masalah matematika dalam
langkah-langkah terbatas atau urutan pengambilan keputusan yang logis untuk
memecahkan masalah tersebut.

Dari pengertian tersebut dapat dikatakan bahwa algoritma ini digunakan untuk
menyelesaikan atau menyelesaikan suatu masalah dengan langkah-langkah
logis yang terurut.

Inilah sebabnya mengapa algoritma harus digunakan pada elektronik komputer


karena dengan algoritma komputer akan dapat memproses data, melakukan
perhitungan, membuat inferensi otomatis dan memecahkan masalah di
komputer.

Ketika algoritma tersebut digunakan pada komputer, maka akan menghasilkan


output yang kemudian akan berhenti pada keadaan awal. Tidak hanya pada
komputer atau dalam kehidupan sehari-hari, algoritma juga digunakan oleh
banyak perusahaan terutama yang bergerak di bidang keuangan.

Hampir semua bidang perusahaan keuangan menggunakan algoritma, mulai


dari perdagangan saham dan aset hingga manajemen utang dan penetapan
harga pinjaman. Trading menggunakan algoritma sering disebut
sebagai trading otomatis.

Perdagangan otomatis sering menggunakan program komputer untuk menjual


atau membeli sekuritas dengan cepat, mengapa menggunakan program
komputer? Hal ini karena transaksi bisnis terjadi sangat cepat, sehingga
kecepatan tidak mungkin dihitung sama manusia.

Sejarah Algoritma
Saat itu, Al-Khawarizmi menulis sebuah buku dengan judul Al Jabar wal-
Muqabala yang artinya Buku Pemulihan dan Pengurangan (The Book of
Restoration and Reduction) . Dari judul buku kita juga mendapatkan kata
“aljabar” atau lebih dikenal dengan istilah algebra.
Abu Abdullah Ibn Musa al-Khawarizmi (770- 840M) lahir di Khawarizm (Kheva),
sebuah kota di selatan Sungai Oxus (sekarang disebut Uzbekistan) pada 770 M.
Al Khawarizmi adalah salah satu ilmuwan terkenal pada masanya. Ada
beberapa cabang matematika yang ditemukannya antara lain yang disebut
astronom dan ahli geografi.

Awalnya, algoritma adalah istilah yang mengacu pada aturan aritmatika yang
berguna untuk memecahkan masalah menggunakan angka Arab.

Pada tahun 1950, kata algoritma pertama kali digunakan dalam “Algoritma
Euclidean”. Euclid, seorang matematikawan Yunani (lahir pada 350 M). Dalam
bukunya Elements menulis langkah-langkah untuk menemukan pembagi
persekutuan terbesar (common greatest divisor atau gcd), dari dua bilangan
bulat, m dan n [KNU 73] (tentu saja Euclid tidak menyebut metodenya sebagai
algoritma, itu hanya di zaman modern orang menyebut
metodenya (“algoritma Euclidean”).

Pembagi persekutuan terbesar dari dua bilangan bulat non-negatif adalah


bilangan bulat positif terbesar yang membagi dua bilangan sama rata.

Misalnya, m= 80 dan n =12. Semua faktor pembagi 80 adalah


1,2,4,5,8,10,16,20,40,80

dan semua faktor pembagi 12 adalah 1,2,3,4,6,12,

maka gcd (80,12) = 4.

Langkah-langkah mencari gcd (80,12) dengan algoritma Euclidean sebagai


berikut:

80 dibagi 12 hasilnya =6, sisa 8 (atau:80 =6.12+8)

12 dibagi 8 hasilnya = 1, sisa = 4 (atau:12 =1.8+4)

8 dibagi 4 hasilnya = 2, sisa =0 (atau:8 =4.2+0)


karena pembagian yang terakhir menghasilkan 0, maka sisa pembagian
terakhir sebelum 0, yaitu 4, menjadi gcd (80,12). Jadi, gcd (80,12) = gcd (12,8)
= gcd (8,4) = gcd (4,0)=4.

Jenis-Jenis Algoritma
Seorang matematikawan dan ilmuwan komputer bernama Dr. Christoph
Koutschan mengatakan bahwa setidaknya ada 32 algoritma dalam ilmu
komputer. Namun jika dilihat dari fungsinya, hanya ada enam algoritma dasar,
yaitu:

1. Rekursi
Sebuah algoritma rekursi adalah sesuatu yang akan memanggil dirinya sendiri
berulang-ulang sehingga masalah dapat diselesaikan dengan benar. Berikut
adalah beberapa kode yang dapat menemukan faktorial menggunakan
algoritma rekursi.

Fact(y)

If y is 0

return 1

return (y*Fact(y-1)) /* this is where the recursion happens*/

2. Divide and Conquer


Divide and Conquer akan membagi masalah besar menjadi banyak menjadi
masalah kecil. Jenis algoritma ini sendiri sebenarnya terdiri dari dua bagian
utama, yaitu:

 Memecah masalah menjadi submasalah yang lebih independen dan lebih


kecil dari masalah lain yang sejenis.
 Memecahkan masalah asli setelah dapat menyelesaikan masalah yang
lebih kecil secara terpisah.
Berikut ini adalah contoh kode semu dari algoritma divide and conquer:

MergeSorting(ar[], l, r)
If r > l

1. Find the mid-point to divide the given array into two halves:
middle m = (l+r)/2

2. Call mergeSorting for the first half:


Call mergeSorting(ar, l, m)

3. Call mergeSorting for the second half:


Call mergeSorting(ar, m+1, r)

4. Merge the halves sorted in step 2 and 3:


Call merge(ar, l, m, r)

3. Dynamic Programming
Dynamic Programming akan bekerja dengan mengingat hasil dari proses masa
lalu dan juga menggunakannya untuk menemukan hasil baru.

Dari penjelasan diatas, berarti bahwa Dynamic Programming memecahkan


masalah kompleks dengan memecahnya menjadi banyak submasalah
sederhana, kemudian menyelesaikannya satu per satu, lalu menyimpannya
untuk digunakan di masa mendatang.

Contoh Dynamic Programming adalah terdiri dari urutan Fibonacci, berikut


adalah contohnya:

Fibonacci(N) = 0 (for n=0)

= 0 (for n=1)

= Fibonacci(N-1)+ Finacchi(N-2)

4. Greedy
Tipe ini dapat digunakan untuk menyelesaikan masalah optimasi. Dalam
algoritma ini, kita akan menemukan solusi yang lebih optimal secara lokal
tanpa mengkhawatirkan konsekuensi yang akan terjadi di masa depan dan kita
dapat menemukan solusi yang lebih optimal secara global.
Namun, cara ini tidak menjamin Anda bisa mendapatkan solusi yang optimal.
Ada lima komponen yang terdapat dalam algoritma ini, yaitu:

 Himpunan kandidat yang solusinya akan dicari kemudian.


 Fungsi seleksi terakhir akan membantu memilih kandidat terbaik.
 Fitur kelayakan dapat membantu Anda mengidentifikasi kandidat mana
yang dapat digunakan untuk menemukan solusi.
 Fungsi tujuan mampu memberikan nilai ke solusi yang mungkin atau solusi
parsial.
 Fungsi solusi dapat memberitahu Anda tentang waktu yang diperlukan
untuk menemukan solusi untuk masalah tersebut.
5. Brute Force
Konsep dari algoritma ini sebenarnya sangat sederhana. Selama proses
ini, brute force mengintegrasikan semua solusi yang mungkin untuk
menemukan satu atau lebih solusi yang mungkin untuk memecahkan masalah.

Berikut adalah contoh pencarian sekuensial yang dilakukan


menggunakan brute force:

Algorithm S_Search (A[0..n], X)

A[n] ← X

i←0

While A [i] ≠ X do

i←i+1

if i < n return i

else return -1

6. Algoritma Backtracking
Backtracking adalah teknik yang dapat memecahkan masalah yang berbeda
secara rekursi dan mencoba mereka untuk menemukan solusi dengan
memecahkan satu bagian dari masalah pada waktu yang sama. Jika solusi
gagal, kita dapat menghapusnya dan kembali mencari solusi lain.

Artinya algoritma ini akan menyelesaikan sub masalah dan jika gagal maka
algoritma akan membatalkan langkah terakhir dan memulai kembali untuk
mencari solusi dari masalah tersebut.

Fungsi Algoritma
Setelah mengetahui definisi dan karakteristik algoritma, Anda harus
mengetahui fungsi dari algoritma tersebut. Benarkah algoritma hanya
dibutuhkan dalam pemrograman?

Seperti disebutkan sebelumnya, algoritma dapat diterapkan ke banyak jalur


kehidupan. Hanya saja penerapan algoritma yang lebih sering dibahas dalam
pemrograman komputer.

Dalam hal pemrograman, algoritma pemrograman membantu tim


pemrograman untuk memecahkan masalah. Serangkaian solusi untuk masalah
ini yang dapat dikembangkan oleh seorang programmer menjadi sebuah
program.

Selain itu, beberapa fungsi lain dari algoritma adalah sebagai berikut:

 Membantu Anda memecahkan masalah tertentu dengan cara yang logis


dan sistematis. Algoritma dapat digunakan lebih dari satu kali untuk
menyelesaikan masalah yang sama.
 Algoritma juga dapat digunakan untuk membantu memecahkan masalah
yang kompleks dengan lebih sederhana.
 Bagi programmer, algoritma akan memudahkan mereka untuk melacak
setiap kesalahan yang muncul.
 Memungkinkan pemrogram untuk dengan mudah memodifikasi program
tanpa mengubah total algoritma dan tanpa harus mengulang dari awal.
 Pemrogram hanya perlu melakukan perubahan pada waktu tertentu, dan
program dapat diperbarui untuk memperbaiki masalah yang muncul.

5 Karakteristik Algoritma
Menurut Donald E. Knuth, algoritma harus memiliki lima karakteristik penting
yang saling berhubungan. Kriteria untuk algoritma ini meliputi:
1. Finiteness (Keterbatasan)
Algoritma harus berhenti setelah mengambil sejumlah langkah yang terbatas,
yaitu ada tujuan akhir yang tercapai, sehingga program akan berhenti ketika
tujuan akhir telah tercapai. Program yang tidak pernah berhenti menunjukkan
bahwa program tersebut mengandung algoritma yang salah.

2. Definiteness (Kepastian)
Setiap langkah harus didefinisikan dengan tepat dan tidak ambigu. Ada
instruksi yang jelas dan tidak ambigu, sehingga tidak ada kesalahan dalam
menghasilkan output.

3. Input (Masukan)
Input ini adalah masalah yang diketahui dan solusi akan diselidiki. Algoritma ini
tidak memiliki atau lebih input, yang merupakan jumlah yang disediakan untuk
algoritma untuk diproses.

4. Output (Keluar)
Algoritma tidak memiliki atau lebih nilai output. Output ini tentunya harus
menjadi solusi atau solusi dari suatu masalah. Output dapat berupa pesan atau
kuantitas yang terkait dengan input.

5. Effectiveness (keefektivitasan)
Algoritma harus efisien, setiap urutan atau langkah harus sesederhana
mungkin, sehingga dapat diimplementasikan dalam waktu yang wajar.

Contoh Algoritma
Untuk lebih memahami algoritma, perlu diketahui bahwa algoritma tidak
hanya berlaku dalam pemrograman tetapi dapat diterapkan dalam kehidupan
sehari-hari.

Contoh Soal:

Data yang diberikan berupa nama pegawai dan hasil evaluasi kinerja. Jika hasil
evaluasi kinerja lebih besar atau sama dengan 75, maka pegawai tersebut
dinyatakan telah mencapai KPI. Sedangkan jika nilainya kurang dari 75,
pegawai tersebut dinyatakan gagal mencapai KPI.
Contoh penulisan algoritmanya adalah seperti berikut ini:

Contoh 1

Algoritmanya akan sebagai berikut:

baca nama dan nilai karyawan.

jika nilai >= 75 maka

keterangan = berhasil

tetapi jika =< 75

keterangan = tidak berhasil.

tulis nama dan keterangan

Contoh diatas merupakan algoritma narasi

Contoh 2

Deklarasi dari tipe datanya akan seperti berikut:

Nama = string

Nilai = integer

Keterangan = string

Algoritmanya akan seperti berikut:

read (nama, nilai)

if nilai >= 75 then


keterangan = ‘berhasil’

else

keterangan = ‘tidak berhasil’

write(nama, keterangan)

Contoh diatas merupakan algoritma Pseudo Code

Contoh 3

Sementara itu, contoh lain dari algoritma juga dapat dilihat pada teknologi
khususnya pada mesin pencari yang penggunaannya membutuhkan internet.
Untuk lebih memahami contoh algoritma dalam teknologi, Anda dapat melihat
contoh di bawah ini.

1. Tentukan informasi yang ingin Anda temukan


2. Masukkan informasi yang ingin Anda cari ke mesin pencari
3. Tunggu sebentar
4. Informasi muncul sebagai artikel yang dicari secara berurutan
5. Pilih saja artikel yang berisi informasi yang tepat
Pada umumnya search engine semua memiliki algoritma masing-masing, jadi
artikel yang akan muncul di urutan pertama adalah artikel yang layak untuk
diurutkan di urutan pertama, kemudian artikel kedua dan seterusnya.

Oleh karena itu, jika Anda ingin membuat artikel yang muncul di halaman
pertama atau urutan pertama mesin pencari, Anda harus menentukan
algoritma mesin pencari terlebih dahulu.

Di atas adalah 3 contoh algoritma yang ada dalam kehidupan sehari-hari dan
algoritma yang berhubungan dengan teknologi mesin pencari. Pada dasarnya,
masih banyak contoh algoritma, mungkin Anda bisa memberikan contoh
algoritma. Setelah mengenal definisi dan contoh algoritma, sepertinya Anda
sudah mulai memahami algoritma atau bahkan ingin menerapkannya dalam
kehidupan sehari-hari.
Konsep Algoritma
Berikut adalah beberapa konsep yang penting dalam algoritma:

1. Input: Algoritma membutuhkan input untuk melakukan tugas yang


ditentukan. Input ini dapat berupa data, informasi, atau instruksi.
2. Proses: Langkah-langkah yang spesifik yang digunakan dalam algoritma
untuk mengolah input dan menghasilkan output.
3. Output: Hasil dari tugas yang dilakukan oleh algoritma, biasanya berupa
data atau informasi.
4. Dekomposisi: Memecah masalah besar menjadi sub-masalah lebih kecil
yang lebih mudah diolah.
5. Abstraction: Menyederhanakan masalah dan memfokuskan pada aspek-
aspek yang penting saja.
6. Generalisasi: Menerapkan solusi yang sama pada masalah yang
berbeda.
7. Optimisasi: Menemukan solusi yang paling efisien dan cepat untuk
masalah tertentu.

Konsep-konsep ini membantu dalam memahami algoritma dan membuat


algoritma yang efektif dan efisien. Penting untuk memahami konsep-konsep ini
untuk dapat membuat algoritma yang tepat untuk masalah yang spesifik.

Sifat Algoritma
Berikut adalah beberapa sifat yang harus dimiliki oleh sebuah algoritma:

1. Unambiguity: Algoritma harus memberikan instruksi yang jelas dan tidak


ambigu sehingga dapat diterapkan dengan mudah.
2. Definiteness: Algoritma harus memiliki langkah-langkah yang jelas dan
pasti sehingga dapat diterapkan dengan mudah.
3. Finiteness: Algoritma harus memiliki jumlah langkah yang terbatas dan
tidak berkelanjutan sehingga dapat berakhir pada suatu saat.
4. Effectiveness: Algoritma harus memiliki solusi yang efektif dan efisien
untuk masalah yang spesifik.
5. Feasibility: Algoritma harus dapat diterapkan dengan sumber daya yang
tersedia, seperti memori dan waktu.
6. Input-Output Specification: Algoritma harus memiliki spesifikasi input
dan output yang jelas.
Sifat-sifat ini membantu untuk memastikan bahwa algoritma dapat bekerja
dengan baik. Selain itu memberikan solusi yang dapat diandalkan untuk
masalah yang spesifik.

Contoh Algoritma
Contoh algoritma dapat ditemukan dalam berbagai bidang, seperti pengolahan
data, pembelajaran mesin, dan bahkan dalam aktivitas sehari-hari. Berikut
adalah beberapa contoh algoritma yang umum:

1. Algoritma sorting: Algoritma ini digunakan untuk mengurutkan data,


seperti urutan abjad, angka, atau tanggal. Contohnya adalah algoritma
bubble sort, insertion sort, dan quick sort.
2. Algoritma pencarian: Algoritma ini digunakan untuk mencari data
tertentu dalam suatu dataset. Contohnya adalah algoritma linear search
dan binary search.
3. Algoritma pathfinding: Algoritma ini digunakan untuk menemukan jalur
terpendek antara dua titik dalam suatu peta. Contohnya adalah
algoritma Dijkstra dan A*
4. Algoritma pembelajaran mesin: Algoritma ini digunakan untuk
mempelajari dan membuat prediksi berdasarkan data. Contohnya
adalah algoritma regression, k-nearest neighbor, dan decision tree.
5. Algoritma kompresi data: Algoritma ini digunakan untuk mengkompresi
file agar ukurannya lebih kecil. Contohnya adalah algoritma Huffman
coding dan Lempel-Ziv-Welch (LZW).

Ini hanya beberapa contoh algoritma, ada banyak lagi algoritma yang
digunakan dalam berbagai bidang. Penting untuk memahami sifat-sifat dan
prinsip-prinsip dasar algoritma untuk dapat menentukan algoritma yang tepat
untuk masalah yang spesifik.

Berikut adalah contoh soal algoritma dalam kehidupan sehari-hari :

1. Buatlah Algoritma mencari luas persegi panjang


Jawab :
Input = Panjang, Lebar
Proses = Luas = panjang x lebar
Output = Luas
Algoritma :
Langkah 1 : Mulai / Start
2 : masukan nilai Panjang
3 : masukan nilai Lebar
4 : Luas = Panjang x Lebar
5 : Cetak Nilai Luas
6 : Selesai / End

2. Buatlah algoritma untuk menampilkan biodata mahasiswa Universitas


Mitra Lampung
Jawab :
Input : Nama Mahasiswa, NPM, Institusi, Prodi
Output : Nama Mahasiswa, NPM, Institusi, Prodi
Algoritma :
Langkah 1 : Mulai / Start
Langkah 2 : Masukan Nama, NPM, Institusi, Prodi
Langkah 3 : Cetak Nama, NPM, Institusi, Prodi
Langkah 4 : Selesai / End

Algoritma merupakan bagian penting dari dunia teknologi dan informatika dan
memainkan peran yang sangat besar dalam membantu untuk menyelesaikan
beragam masalah kompleks.

Definisi informal
Untuk penjelasan lebih rinci dari berbagai sudut pandang mengenai definisi "algoritme",
lihat Karakterisasi Algoritme.
Definisi informalnya bisa berarti "sekumpulan aturan yang secara tepat menentukan
seurutan operasi". [24] yang mengikutkan semua program komputer, termasuk program yang
tidak melakukan perhitungan numerik. Secara umum, sebuah program hanyalah sebuah
algoritme jika ia akan berhenti nantinya. [25]
Sebuah contoh prototipikal dari suatu algoritme adalah algoritme Euclid untuk menentukan
bilangan pembagi terbesar dari dua integer; sebagai contohnya (ada contoh yang lain)
dijelaskan dengan diagram alur di atas dan sebagai contoh di bagian lanjut.
(Boolos & Jeffrey 1974, 1999) memberikan sebuah makna informal dari kata algoritme
dalam persamaan berikut:
Tidak ada manusia yang dapat menulis begitu cepat, atau begitu lama, atau begitu kecil
("kecil, dan lebih kecil tanpa batas ... anda mungkin mencoba menulis di atas molekul, atom,
elektron") untuk mencatat semua anggota dari kumpulan bilangan tak terbatas dengan
menuliskan namanya, bergantian, dalam suatu notasi. Tapi manusia bisa melakukan sesuatu
yang sama bergunanya, pada kasus kumpulan bilangan tak terbatas: Mereka dapat
memberikan instruksi jelas untuk menentukan anggota ke-n dari set, untuk n terbatas acak.
Instruksi tersebut diberikan secara eksplisit, dalam bentuk yang dapat diikuti oleh mesin
penghitung, atau oleh manusia yang mampu melakukan hanya operasi-operasi dasar
dengan simbol-simbol. [26]
Suatu "bilangan tak-terbatas" adalah bilangan yang elemen-elemenya bisa
berkorespondensi satu-ke-satu dengan integer. Maka, Boolos dan Jeffrey mengatakan
bahwa sebuah algoritme berarti instruksi bagi sebuah proses yang "membuat" keluaran
integer dari sebuah "masukan" acak integer yang, secara teori, bisa sangat besar. Maka
sebuah algoritme dapat berupa persamaan aljabar seperti y = m + n -- dua variabel
masukan m dan n yang menghasikan keluaran y. Tapi berbagai penulis yang mencoba
mendefinisikan persamaan tersebut mengatakan bahwa kata algoritme mengandung lebih
dari itu, sesuatu yang kurang lebih (untuk contoh penjumlahan):
Instruksi rinci dan tepat (dalam bahasa yang dipahami oleh "komputer") [27] untuk
proses yang cepat, efisien, "baik"[28] yang menentukan "pergerakan" dari "komputer"
(mesin atau manusia, dibekali dengan informasi dan kemampuan internal yang
dibutuhkan)[29] untuk menemukan, dekode, dan kemudian mengolah masukan
integer/simbol m dan n, simbol + dan = ... dan "secara efektif"[30] menghasilkan,
dalam waktu yang "masuk akal",[31] keluaran integer y pada tempat dan format
tertentu.
Konsep dari algoritme juga digunakan untuk mendefinisikan notasi dari desidabilitas.
Notasi tersebut adalah pusat untuk menjelaskan bagaimana sistem formal berasal dari
sejumlah kecil aksioma dan aturan. Dalam logika, waktu dari sebuah algoritme untuk
selesai tidak dapat dihitung, karena tidak berelasi dengan dimensi fisik kita. Dari
ketidakpastian tersebut, yang mengkarakteristikan pekerjaan yang sedang berjalan,
timbulah ketidak-tersediannya definisi algoritme yang sesuai dengan konkret (pada
tingkat tertentu) dan penggunaan secara abstrak dari istilah tersebut.

FormalisasI
Algoritme sangat penting bagi cara komputer mengolah data. Banyak program
komputer mengandung algoritme memberikan rincian pada instruksi khusus yang
komputer harus lakukan (dengan urutan tertentu) untuk menjalankan pekerjaan
tertentu, seperti menghitung gaji karyawan atau mencetak kartu rapor siswa. Maka,
sebuah algoritme bisa dianggap sebagai urutan operasi yang bisa disimulasikan oleh
sebuah sistem Turing-lengkap. Penulis yang mendukung tesis ini termasuk Minsky
(1967), Savage (1987), dan Gurevich (2000):
Minsky: "Tapi kita juga menjaga, dengan Turing ... bahwa setiap prosedur yang "secara
alami" disebut efektif, bisa dinyatakan oleh mesin (sederhana). Walaupun tampaknya
ekstrem, alasan tersebut ... sukar disanggah". [32]
Gurevich: "... argumen informal Turing untuk menyokong tesis ini membenarkan tesis
yang lebih kuat: setiap algoritme bisa disimulasikan oleh sebuah mesin Turing ...
menurut Savage [1987], sebuah algoritme adalah sebuah proses penghitungan yang
ditentukan oleh sebuah mesin Turing". [33]
Biasanya, bila sebuah algoritme dihubungkan dengan pengolahan informasi, data dibaca
dari sumber masukan, ditulis ke perangkat keluaran, dan/atau disimpan untuk
pengolahan selanjutnya. Data simpanan dianggap sebagai bagian dari keadaan internal
dari entitas yang melakukan algoritme. Pada praktiknya, keadaan tersebut disimpan
pada satu atau lebih struktur data.
Untuk beberapa proses komputasi, algoritme harus ditentukan secara teliti: dijabarkan
dengan cara ia bakal berlaku untuk semua kemungkinan yang dapat timbul. Yaitu, setiap
langkah tambahan harus secara sistematis dihadapi, kasus-per-kasus; Kriteria bagi setiap
kasus harus jelas (dan bisa dihitung).
Karena sebuah algoritme adalah kumpulan dari langkah-langkah yang tepat, urutan dari
komputasi selalu penting bagi berfungsinya algoritme. Instruksi biasanya diasumsikan
terdaftar secara eksplisit, dan dijelaskan dimulai "dari atas" dan terus "ke bawah",
sebuah gambaran yang dijelaskan secara formal oleh alur kontrol
Sejauh ini, diskusi tentang formalisasi algoritme telah mengasumsikan premis
dari pemrograman imperatif. Hal ini merupakan konsepsi umum, yang mencoba
menjelaskan sebuah pekerjaan dalam makna diskrit dan "mekanis". Keunikan dari
konsepsi formalisasi algoritme adalah operasi penetapan, mengatur nilai dari sebuah
variabel. Ia berasal dari intuisi "ingatan" sebagai kertas buram. Contoh operasi
penetapan tersebut ada di bawah.
Untuk konsepsi yang lain dari apa yang membentuk sebuah algoritme
lihat pemrograman fungsional dan pemrograman logika.

Menggambarkan algoritme
Algoritme dapat digambarkan dengan banyak notasi, termasuk bahasa
alamiah, pseudokode, diagram alur, bagan drakon, bahasa pemrograman atau tabel
kontrol (diproses oleh penerjemah). Ekspresi bahasa alamiah terhadap algoritme
condong lebih banyak dan rancu, dan jarang digunakan untuk algoritme yang kompleks
dan teknis. Pseudokode, diagram alur, bagan drakon, dan tabel kontrol adalah cara yang
terstruktur untuk menggambarkan algoritme yang mencegah banyaknya kerancuan
pada pernyataan-pernyataan bahasa alamiah. Bahasa pemrograman ditujukan untuk
mengekspresikan algoritme dalam sebuah bentuk yang dapat dieksekusi oleh komputer,
tetapi sering kali digunakan sebagai suatu cara untuk menentukan atau
mendokumentasikan algoritme.
Ada banyak macam kemungkinan representasi dan seseorang dapat mengekspresikan
sebuah program mesin Turing sebagai urutan dari tabel-tabel mesin (lihat lebih lanjut
di mesin kondisi-terbatas, tabel transisi kondisi dan tabel kontrol), sebagai diagram alur
dan bagan drakon (lihat lebih lanjut di diagram kondisi), atau sebagai bentuk kode
mesin atau kode assembly dasar yang dikenal "kumpulan lipat empat" (lihat lebih lanjut
di mesin Turing).
Representasi dari algoritme dapat dikelompokan ke dalam tiga tingkatan dari deskripsi
mesin Turing: [34]
1 Deskripsi tingkat-tinggi
"... ditujukan untuk menjelaskan algoritme, menghiraukan rincian implementasi.
Pada tingkat ini kita tidak perlu menyebutkan bagaimana mesin mengatur perangkat
pita atau kepala pita rekam."
2 Deskripsi implementasi
"... digunakan untuk menjelaskan cara mesin Turing menggunakan kepalanya dan
cara menyimpan data. Pada tingkat ini kita tidak memberikan secara rinci kondisi
atau fungsi transisi."
3 Deskripsi formal
Lebih rinci, "tingkat paling rendah", menjelaskan "tabel kondisi" dari mesin Turing.
Sebagai contoh dari algoritme sederhana "Penjumlahan m+n" dijelaskan
dalam tiga tingkatan tersebut lihat contoh algoritme.

Implementasi
Kebanyakan algoritme ditujukan untuk diimplementasikan sebagai program komputer.
Namun, algoritme juga diimplementasikan dengan tujuan lain, seperti dalam jaringan
saraf biologis (sebagai contohnya, otak manusia yang mengimplementasikan aritmetika atau
sebuah serangga yang melihat makanan), dalam sirkuit elektris, atau dalam sebuah
perangkat mekanis.

Algoritme komputer
Contoh diagram alur dari struktur Bohm-Jacopini: URUTAN (segi empat), WHILE-DO dan IF-
THEN-ELSE. Ketiga struktur dibentuk dari kondisi primitif GOTO ( IF test=true THEN GOTO
step xxx ) (wajik), GOTO tak bersyarat (segi empat), berbagai operator penetapan (segi
empat), dan HALT (bujursangkar). Memasukan struktur tersebut ke dalam blok-penetapan
menghasilkan diagram yang kompleks (cf Tausworthe 1977:100,114).
Dalam sistem komputer, sebuah algoritme pada dasarnya adalah instansi dari logika ditulis
dalam perangkat lunak oleh pengembang perangkat lunak supaya efektif untuk komputer
yang "ditargetkan" untuk mesin tertentu untuk menghasilkan keluaran dari masukan yang
diberikan (kemungkinan nul).
Program yang "elegan" (padat), program yang "baik" (cepat): Pernyataan dari "sederhana
dan elegan" muncul secara informal dalam buku Knuth dan dalam Chaitin:
Knuth: "... kita menginginkan algoritme yang baik dalam definisi estetika sederhana.
Salah satu kriterianya ... adalah waktu yang dibutuhkan untuk berjalannya
algoritme ... Kriteria yang lain adalah adaptasi dari algoritme ke komputer,
kesederhanaan dan elegan, dll"[35]
Chaitin: "... sebuah program adalah 'elegan, maksud saya adalah ia merupakan
program terkecil untuk menghasilkan keluaran."[36]
Chaitin membuka definisinya dengan: "Saya akan perlihatkan bahwa anda tidak
dapat membuktikan sebuah program adalah 'elegan'"—bukti tersebut akan
menyelesaikan permasalahan perhentian (ibid).
Algoritme terhadap fungsi yang dapat dihitung oleh algoritme: Untuk sebuah fungsi
bisa ada beberapa algoritme. Hal ini benar, bahkan tanpa mengembangkan
kumpulan instruksi yang ada bagi programmer. Rogers mengamati bahwa "Sangat ...
penting untuk membedakan antara pengertian algoritme, misalnya prosedur dan
pernyataan fungsi yang dihitung oleh algoritme, misalnya pemetaan hasil dari
prosedur. Fungsi yang sama bisa memiliki beberapa algoritme berbeda". [37]
Sayangnya ada pertukaran antara kebaikan (kecepatan) dan elegan (kepadatan) --
sebuah program yang elegan bisa melakukan lebih banyak langkah untuk
menyelesaikan sebuah komputasi daripada yang kurang elegan. Sebuah contoh yang
menggunakan algoritme Euclid bisa dilihat di bawah.
Komputer (dan komputor), model dari komputasi: Sebuah komputer (atau manusia
"komputor" [38] ) adalah tipe terbatas dari mesin, sebuah "perangkat mekanis
deterministik diskrit" [39] yang secara buta mengikuti instruksinya.[40] Model primitif
dari Melzak dan Lambek [41] mereduksi pemikiran tersebut menjadi empat elemen:
(i) diskrit, lokasi yang bisa dibedakan, (ii) diskrit, penghitung yang tak bisa
dibedakan [42] (iii) sebuah agen, dan (iv) sebuah daftar instruksi yang efektif relatif
terhadap kemampuan dari agen. [43]
Minsky menjelaskan variasi yang lebih sesuai dari model "abacus"-nya Lambek
dalam "Basis Komputabilitas Paling Sederhana". [44] Mesin Minsky memproses secara
berurutan lewat lima (atau enam tergantung bagaimana seseorang menghitungnya)
instruksi kecuali baik sebuah kondisi IF-THEN GOTO atau GOTO tak bersyarat
mengubah alur program keluar dari urutan. Selain HALT, mesin Minsky mengikutkan
tiga operasi penetapan (penggantian, substitusi): [45] ZERO (misalnya, isi dari lokasi
diganti oleh 0: L ← 0), SUCCESSOR (misalnya, L ← L+1), dan DECREMENT (misalnya, L
← L-1). [46] Jarang seorang programer harus menulis "kode" dengan kumpulan
instruksi terbatas. Tapi Minsky memperlihatkan (sebagaimana Melzak dan Lambek)
bahwa mesinnya adalah Turing komplet dengan hanya empat tipe instruksi utama:
GOTO kondisional, GOTO tak bersyarat, penetapan/penggantian/substitusi, dan
HALT. [47]

Simulasi dari sebuah algoritme: bahasa komputer (komputor): Knuth menganjurkan


pembaca bahwa "cara terbaik untuk belajar algoritme dalah mencobanya ... langsung ambil
pulpen dan kertas dan bekerja lewat contoh". [48] Lalu bagaimana dengan simulasi atau
eksekusi yang sebenarnya? Programmer harus menerjemahkan algoritme ke dalam bahasa
yang mana simulator/komputer/komputor dapat mengeksekusi secara efektif. Stone
memberikan contoh dari hal ini: saat menghitung akar dari persamaan kuadrat si komputor
harus tahu bagaimana mendapatkan akar kuadrat. Jika tidak maka supaya algoritme dapat
efektif ia harus menyediakan sejumlah aturan untuk mengekstrak akar kuadrat. [49]
Hal ini berarti programer harus tahu sebuah "bahasa" yang efektif relatif terhadap target
pada agen komputasi (komputer/komputor).
Lalu model apa yang seharusnya digunakan untuk simulasi? Van Emde Boas mengamati
"bahkan bila kita mendasari teori kompleksitas dengan mesin abstrak bukannya mesin
kongkrit, kesembarangan dari pemilihan model masih tetap ada. Pada titik itulah mulainya
pemikiran simulasi". [50] Bila kecepatan yang dihitung, jumlah instruksi berpengaruh. Sebagai
contohnya, subprogram dalam algoritme Euclid untuk menghitung sisa akan berjalan lebih
cepat jika programmer memiliki instruksi "modulus" (sisa pembagian) bukannya dengan
pengurangan (atau lebih parah: hanya "penurunan").
Pemrograman terstruktur, struktur kanonikal: Menurut Tesis Church-Turing setiap algoritme
bisa dihitung dengan sebuah model yang dikenal Turing komplet, dan menurut demonstrasi
Minsky kekomplitan Turing membutuhkan hanya empat tipe instruksi—GOTO bersyarat,
GOTO tak bersyarat, penetapan, HALT. Kemeny dan Kurtz mengamati bahwa saat
penggunaan GOTO tak bersyarat yang "tak disiplin" dan IF-THEN GOTO bersyarat bisa
menghasilkan "kode spageti" seorang programer bisa menulis program terstruktur
menggunakan instruksi tersebut; di lain sisi "juga memungkinkan, dan tidak begitu sulit,
untuk menulis sebuah program terstruktur yang buruk dalam sebuah bahasa
terstruktur". [51] Tausworthe menambahkan tiga struktur kanon Bohm-
Jacopini: [52] SEQUENCE, IF-THEN-ELSE, dan WHILE-DO, dengan dua lagi: DO-WHILE dan
CASE. [53] Keuntungan dari program terstruktur adalah ia cocok dengan pembuktian
kebenaran menggunakan induksi matematika. [54]
Simbol diagram alur[55]: Pembantu grafik yang disebut diagram alur memberikan suatu cara
untuk menjelaskan dan mendokumentasikan sebuah algoritme (dan program komputer).
Seperti alur program dari mesin Minsky, sebuah diagram alur selalu mulai dari atas dan
terus ke bawah. Simbol utamanya hanya 4: arah panah memperlihatkan alur program, segi
empat (SEQUENCE, GOTO), wajik (IF-THEN-ELSE), dan titik (OR). Struktur kanonikal Bohm-
Jacopini dibuat dari bentuk-bentuk primitif tersebut. Sub-struktur bisa "bersarang" dalam
segi empat hanya jika jalan keluar tunggal terjadi pada super-struktur. Simbol dan
penggunaannya untuk membangun struktur kanonikal diperlihatkan dalam diagram.
Contoh Algoritme
Salah satu dari algoritme sederhana adalah menemukan bilangan terbesar dalam sebuah
deretan angka (tak berurut). Solusinya membutuhkan pemeriksaan setiap angka dalam
deret, tetapi hanya sekali. Dari hal ini munculah algoritme sederhana, yang bisa dinyatakan
dalam kalimat bahasa deskripsi tingkat-tinggi, sebagai:
Deskripsi tingkat-tinggi:

1. Jika tidak ada angka dalam deret makan tidak ada bilangan terbesar.
2. Asumsikan item pertama dalam deret adalah yang terbesar.
3. Untuk setiap sisa angka dalam deret, jika angka tersebut besar dari angka terbesar
sekarang, anggap angka tersebut menjadi yang terbesar dalam deret.
4. Bila tidak ada lagi angka yang tersisa pada deret untuk diperiksa, anggap angka
terbesar sekarang menjadi angka yang terbesar dalam deret.
Deskripsi (Quasi-)formal: Ditulis dalam kalimat yang lebih dekat dengan bahasa tingkat-
tinggi dari program komputer, berikut ini adalah kode formal dari algoritme
dalam pseudokode atau kode pijin:

Algoritma LargestNumber
Masukan: Deret angka L.
Keluaran: Angka terbesar dalam daftar L.
terbesar ← Lnull
untuk setiap item dalam L, lakukan
jika item > terbesar, maka
terbesar ← item
kembalikan terbesar
 "←" adalah singkatan untuk "diubah menjadi". Misalnya, "terbesar ← item" artinya nilai
dari terbesar diubah menjadi nilai dari item.
 "kembalikan" mengakhiri algoritma dan mengeluarkan nilai kembalian.

Algoritme Euclid
Contoh diagram dari algoritme Euclid dari T.L. Health 1908 dengan rincian tambahan. Euclid
tidak sampai pada penghitungan ketiga dan tidak memberikan contoh numeris.
Nocomachus memberikan contoh dari 49 dan 21: "Saya mengurangi yang kecil dari yang
besar; 28 adalah yang kiri; kemudian saya kurangi lagi 21 (hal ini memungkinkan); tersisa 7,
tetapi 7 tidak bisa dikurangi dari 7." Heath berkomentar bahwa, "Kalimat terakhir terdengar
aneh, tetapi maknanya sangat jelas, begitu juga makna dari kalimat tentang mengakhiri
'dengan satu dan angka yang sama'."(Heath 1908:300).
Algoritme Euclid muncul sebagai Proposisi II dalam Book VII ("Elementary Number Theory")
dari Elements. [56] Euclid mengajukan permasalahan: "Ambil dua angka bukan prima, untuk
mencari bilangan pembagi terbesar". Dia menentukan "Sebuah angka [merupakan] besaran
yang terdiri dari unit-unit": angka penghitung, integer positif kecuali 0. Dan "mengukur"
adalah menempatkan ukuran panjang terkecil s dengan tepat (q kali) di antara ukuran
terpanjang l sampai sisa r lebih kecil dari panjang terkecil s. [57] Dalam dunia modern, sisa r =
l - q*s, q sebagai hasil bagi, atau sisa r adalah "modulus", bagian sisa-integer yang tersisa
setelah pembagian. [58]
Supaya metode Euclid berhasil, panjang awalnya harus memenuhi dua kebutuhan: (i)
panjangnya tidak 0, DAN (ii) hasil pengurangan harus "lebih", sebuah pengujian harus
menjamin bahwa bilangan terkecil dari dua angka adalah hasil pengurangan dari yang
terbesar (cara lain, keduanya bisa sama sehingga pengurangan menghasilkan 0).
Pembuktian asli Euclid mengikutkan kebutuhan yang ketiga: kedua panjang bukanlah
bilangan prima. Euclid menentukan hal ini supaya dia bisa membentuk sebuah
bukti reductio ad absurdum bahwa dua pembagi dua angka adalah yang terbesar. [59] Walau
algoritme Nicomachus sama dengan Euclid, bila kedua bilangan prima maka menghasilkan
angka "1" untuk bilangan pembagi terbesar. Jadi untuk lebih jelasnya algoritme berikut
adalah algoritme Nicomachus.
Bahasa komputer untuk algoritme Euclid[sunting | sunting sumber]
Hanya beberapa tipe instruksi yang dibutuhkan untuk mengeksekusi algoritme—beberapa
tes logika (GOTO bersyarat), GOTO tak bersyarat, penetapan (penggantian), dan
pengurangan.

 Sebuah lokasi disimbolkan dengan huruf besar, misalnya, S, A, dll.


 Kuantitas beragam (angka) dalam sebuah lokasi ditulis dengan huruf kecil dan (biasanya)
dihubungkan dengan nama lokasi. Sebagai contohnya, lokasi L pada awal bisa
mengandung angka l = 3009.
Program yang kurang elegan (inelegan) untuk algoritme Euclid[sunting | sunting sumber]
"Inelegan" adalah terjemahan dari versi Knuth terhadap algoritme berdasarkan
pengulangan-sisa mengganti pembagian (atau instruksi "modulus"). Diambil dari Knuth
1973:2-4. Bergantung pada kedua angka "Inelegan" bisa menghitung f.p.k dengan sedikit
langkah daripada "elegan".
Algoritme berikut disebut sebagai versi Euclid dan Nichomachus 4-langkah-nya Knuth, tetapi
bukannya menggunakan pembagi untuk menentukan sisa ia menggunakan pengurangan
berturut-turut dari panjang terkecil s dari sisa panjang r sampai r kurang dari s. Deskripsi
tingkat-tinggi, diperlihatkan dengan tulisan tebal, diadaptasi dari Knuth 1973:2-4:

INPUT:

1 [Kedalam dua lokasi L dan S taruh angka l dan s yang merepresentasikan kedua panjang]:
INPUT L, S
2 [Inisialisasi R: buat supaya sisa panjang r sama dengan panjang awal l]
R←L

E0: [Pastikan r ≥ s.]

3 [Pastikan angka terkecil dari kedua angka ada dalam S dan yang terbesar di R]:
IF R > S THEN
isi dari L adalah angka terbesar jadi lewati langkah 4, 5 dan 6:
GOTO step 6
ELSE
tukar isi R dan S.
4 L ← R (langkah pertama ini berlebih, tetapi berguna untuk diskusi nanti).
5R←S
6S←L

E1: [Cari sisa]: Sampai sisa panjang r di R kurang dari panjang terkecil s pada S, kurangi
angka s dalam S berulang kali dari sisa panjang r dalam R.

7 IF S > R THEN
selesai mengukur jadi
GOTO 10
ELSE
ukur lagi,
8R←R-S
9 [Pengulangan-sisa]:
GOTO 7.

E2: [Apakah sisa 0?]: APAKAH (i) pengukuran terakhir adalah sama dan sisa di R adalah 0
program dapat berhenti, ATAU (ii) algoritme harus terus jalan: hasil pengukuran
meninggalkan sisa di R kurang dari angka pengukuran dalam S.

10 IF R = 0 THEN
selesai jadi
GOTO langkah 15
ELSE
lanjut ke langkah 11,

E3: [Interchange s dan r]: Sulitnya algoritme Euclid. Menggunakan sisa r untuk mengukur
angka terkecil sebelumnya s:; L sebagai lokasi sementara.

11 L ← S
12 R ← S
13 S ← L
14 [Ulang proses pengukuran]:
GOTO 7

OUTPUT:

15 [Selesai. S berisi faktor persekutuan terbesar]:


PRINT S

DONE:

16 HALT, END, STOP.

Program elegan untuk algoritme Euclid


Versi algoritme Euclid berikut hanya membutuhkan 6 instruksi inti untuk melakukan 13
langkah pada solusi "inelegan"; parahnya, "inelegan" membutuhkan tipe instruksi lebih
banyak. Diagram alur dari "elegan" bisa dilihat pada bagian atas artikel ini. Dalam bahasa
Basic (tak terstruktur) langkahnya diberi nomor, dan instruksi LET [] = [] adalah instruksi
penetapan disimbolkan dengan ←.

5 REM Algoritme Euclid untuk faktor persekuturan terbesar


6 PRINT "Masukan dua integer besar dari 0"
10 INPUT A,B
20 IF B=0 THEN GOTO 80
30 IF A > B THEN GOTO 60
40 LET B=B-A
50 GOTO 20
60 LET A=A-B
70 GOTO 20
80 PRINT A
90 END
Bagaimana cara kerja "Elegan": Sebagai pengganti "pengulangan Euclid" luar, "Elegan"
mengulang antara dua pengulangan, pengulangan A > B yang menghitung A ← A - B, dan
pengualang B ≤ A yang menghitung B ← B - A. Hal ini bekerja karena, saat yang dikurang M
lebih kecil pengurang S ( Selisih = pengurang - yang_di_kurang ), yang_dikurang bisa
menjadi s (panjang pengukuran yang baru) dan pengurang bisa menjadi r yang baru
(panjang yang akan diukur); dengan kata lain "arti" dari pengurangan dibalik.

Menguji algoritme Euclid[


Apakah algoritme berjalan seperti yang penulis inginkan? Beberapa kasus uji cukup
menentukan fungsi inti. Sumber pertama [60] menggunakan 3009 dan 884. Knuth
menyarankan 40902, 24140. Kasus menarik lainnya yaitu dua angka relatif prima 14157 dan
5950.
Tapi kasus pengecualian harus teridentifikasi dan diuji. Apakah "inelegan" berjalan benar
saat R > S, S > R, R = S? Sama juga dengan "Elegan": B > A, A > B, A = B? (Semuanya benar).
Apa yang terjadi bila salah satu bilangan nol, atau keduanya nol? ("Inelegan" terus berjalan
pada kedua kasus; "elegan" terus berjalan saat A = 0.) Apa yang terjadi bila
angka negatif dimasukan? Angka desimal? Bila angka masukan, misalnya domain dari fungsi
yang dihitung oleh algoritme/program, mengikutkan hanya integer positif termasuk 0, maka
kegagalan pada nol mengindikasikan bahwa algoritme (dan program instansiasinya) adalah
sebuah fungsi parsial bukannya fungsi total. Kesalahan yang terkenal karena eksepsi adalah
kegagalan roket Ariane V.
Bukti dari kebenaran program menggunakan induksi matematika: Knuth
mendemonstrasikan penggunaan induksi matematika untuk versi "pengembangan" dari
algoritme Euclid, dan dia mengajukan "metode umum yang digunakan untuk membuktikan
validitas dari setiap algoritme." [61] Tausworthe mengajukan bahwa sebuah pengukuran dari
kompleksitas dari sebuah program adalah panjang dari pembuktian kebenarannya. [62]
Menghitung dan meningkatkan algoritme Euclid[sunting | sunting sumber]
Elegan (kepadatan) lawan kebaikan (kecepatan): Dengan hanya 6 instruksi dasar, "Elegan"
adalah jelas pemenang dibandingkan dengan instruksi "inelegan" dengan 13 instruksi.
Namun, "inelegan" lebih cepat (ia sampai pada HALT dengan langkah lebih sedikit). Analisis
algoritme [63] mengindikasikan kenapa hal tersebut terjadi: "Elegan" melakukan pengujian
kondisi dua kali disetiap pengulangan pengurangan, sementara "inelegan" hanya sekali. Bila
algoritme (biasanya) membutuhkan banyak pengulangan, secara rata-rata lebih banyak
waktu yang terbuang saat melakukan tes "B = 0?" yang hanya diperlukan saat sisa sudah
dihitung.
Bisakah algoritme ditingkatkan?: Bila programmer sudah menilai sebuah program "cocok"
dan "efektif"—yaitu, ia menghitung fungsi yang ditujukan oleh penulisnya—maka
pertanyaannya menjadi, bisakah ditingkatkan?
Kepadatan dari "inelegan" bisa ditingkatkan dengan menghilangkan 5 langkah. Tapi Chaitin
membuktikan bahwa memadatkan algoritme tidak bisa diotomatiskan dengan algoritme
generalisasi; [64] tapi, ia bisa dilakukan secara heuristik, misalnya dengan pencarian
menyeluruh (contohnya bisa ditemukan di Berang sibuk), coba dan gagal, kecerdasan,
kedalaman, penggunaan penalaran induktif, dll. Bisa diamati bahwa langkah 4, 5, dan 6
diulang pada langkah 11, 12, dan 13. Pembandingan dengan "Elegan" menyediakan
petunjuk langkah-langkah tersebut dengan langkah 2 dan 3 dapat dihilangkan. Hal ini
mereduksi jumlah instruksi dasar dari 13 menjadi 8, yang membuatnya "lebih elegan" dari
"Elegan" dengan 9 langkah.
Kecepatan "Elegan" bisa ditingkatkan dengan memindahkan tes B=0? keluar dari
pengulangan. Perubahan ini memerlukan penambahan 3 instruksi (B=0?, A=0?, GOTO).
Sekarang "Elegant" menghitung contoh-angka lebih cepat; untuk setiap angka pada A, B dan
R, S hal ini selalu merupakan kasus yang membutuhkan analisis yang mendalam.

Analisis Algoritme
Sangat penting untuk mengetahui berapa banyak sumber tertentu (seperti waktu dan
tempat penyimpanan) secara teoretis diperlukan untuk sebuah algoritme. Metode-metode
telah dikembangkan untuk analisis algoritme untuk mendapatkan jawaban kuantitatif
(estimasi); sebagai contohnya, algoritme pengurutan di atas memerlukan waktu O(n),
menggunakan notasi O besar dengan n sebagai panjang deret (yang akan diurut). Setiap saat
algoritme hanya perlu mengingat dua nilai: nilai terbesar yang ditemukan, dan posisinya
sekarang dideretan input. Oleh karena itu dikatakan memiliki kebutuhan ruang O(1), jika
ruang yang dibutuhkan untuk menyimpan angka masukan tidak dihitung, atau O(n) jika
dihitung.
Algoritme berbeda mungkin menyelesaikan pekerjaan yang sama dengan kumpulan
instruksi yang berbeda dengan waktu, ruang, atau 'usaha' lebih sedikit atau banyak dari
yang lain. Sebagai contohnya, algoritme pencairan binari biasanya mengungguli pencarian
berderet secara paksa bila digunakan untuk tabel pencarian pada deret terurut.
Formal lawan empiris[sunting | sunting sumber]
Artikel utama: Algoritme empiris, Profiling (pemrograman komputer), dan Optimisasi
program
Analisis dan kajian algoritme adalah bidang dari ilmu komputer, dan biasanya dilakukan
secara abstrak tanpa menggunakan bahasa pemrograman tertentu atau implementasi.
Dalam artian, analisis algoritme mirip dengan bidang matematika lainnya yang mana fokus
pada properti yang mendasari algoritme dan bukan pada implementasi tertentu.
Biasanya pseudokode digunakan pada analisis karena merupakan representasi paling umum
dan sederhana. Namun, pada akhirnya, kebanyakan algoritme diimplementasikan di
perangkat keras / lunak tertentu dan efisiensi algoritmik mereka akhirnya diuji
menggunakan kode yang sebenarnya. Untuk solusi dari sebuah masalah, efisiensi dari
algoritme tertentu mungkin tidak terlalu berpengaruh (kecuali n sangat besar) tetapi bagi
algoritme yang dirancang untuk kecepatan interaktif, komersial, atau penggunaan ilmiah
jangka panjang ia bisa saja kritikal. Meningkatkan n dari kecil ke n yang besar biasanya
menunjukan ketak efisienan algoritme yang tidak berbahaya.
Pengujian empiris berguna karena bisa membuka interaksi tak terduga yang mempengaruhi
performa. Benchmark bisa digunakan untuk membandingkan potensi kenaikan
sebelum/sesudah algoritme setelah optimisasi program dilakukan.
Efisiensi eksekusi[sunting | sunting sumber]
Artikel utama: Efisiensi algoritmik
Untuk menggambarkan kemungkinan potensi peningkatan bahkan pada algoritme yang
sudah teruji, inovasi terbaru, berkaitan dengan algoritme FFT (banyak digunakan di bidang
pemrosesan gambar), bisa menurunkan waktu pemrosesan dengan faktor sampai 1.000
untuk aplikasi seperti pencitraan medis. [65] Secara umum, peningkatan kecepatan
bergantung pada properti khusus dari permasalahan, yang mana sangat umum pada aplikasi
praktis. [66] Percepatan dengan tingkat seperti itu membolehkan perangkat komputasi yang
sering menggunakan pemrosesan gambar (seperti kamera digital dan peralatan medis)
menghabiskan daya yang lebih sedikit.

Klasifikasi
Salah satu cara mengklasifikasikan algoritme yaitu dengan cara implementasi.
Rekursi atau iterasi
Sebuah algoritme rekursi yaitu algoritme yang memanggil dirinya sendiri berulang
kali sampai kondisi tertentu tercapai, ini merupakan metode umum
bagi pemrograman fungsional. Algoritme iteratif menggunakan konstruksi berulang
seperti pengulangan dan terkadang struktur data tambahan seperti tumpukan untuk
menyelesaikan permasalahan. Beberapa permasalahan secara alami cocok dengan
satu implementasi atau lainnya. Sebagai contoh, Menara Hanoi dikenal dengan
implementasi rekursif. Setiap versi rekursif memiliki kesamaan (tapi bisa lebih atau
kurang kompleks) dengan versi iteratif, dan sebaliknya.
Logical
Sebuah algoritme bisa dilihat sebagai logika deduksi terkontrol. Pernyataan ini
diekspresikan sebagai: Algoritme = logika + kontrol.[67] Komponen logika
mengekspresikan aksioma yang bisa digunakan dalam komputasi dan komponen
kontrol menentukan cara deduksi digunakan pada aksioma. Ini merupakan dasar dari
paradigma pemrograman logika. Dalam bahasa pemrograman logika murni
komponen kontrol adalah tetap dan algoritme ditentukan dengan memberikan
hanya komponen logikanya. Daya tarik dari pendekatan ini adalah semantik elegan:
sebuah perubahan dalam aksioma memiliki perubahan dalam algoritme.
Serial, paralel atau terdistribusi
Algoritme biasanya dibicarakan dengan asumsi bahwa komputer menjalankan satu
instruksi algoritme setiap waktu. Komputer tersebut terkadang disebut dengan
komputer serial. Rancangan algoritme untuk lingkungan tersebut disebut dengan
algoritme serial, terbalik dengan algoritme paralel atau algoritme terdistribusi.
Algoritme paralel memanfaatkan arsitektur komputer yang mana beberapa prosesor
bisa mengerjakan masalah pada waktu yang sama, selain itu algoritme terdistribusi
memanfaatkan banyak mesin yang terhubung dengan jaringan. Algoritme paralel
atau terdistribusi membagi permasalahan menjadi banyak sub-masalah simetris atau
asimetris dan mengumpulkan hasilnya kembali. Konsumsi sumber pada algoritme
tersebut tidak hanya perputaran prosesor disetiap prosesor tetapi juga daya
komunikasi antara prosesor. Algoritme pengurutan bisa diparalelkan secara efisien,
tetapi biaya komunikasinya sangat mahal. Algoritme iteratif secara umum bisa
diparalelkan. Beberapa permasalahan tidak ada algoritme paralelnya, dan disebut
dengan permasalahan serial lahiriah.
Deterministik atau non-deterministik
Algoritme deterministik menyelesaikan masalah dengan keputusan yang tepat disetiap
langkah dari algoritme sedangkan algoritme non-deterministik menyelesaikan masalah
lewat penerkaan walaupun penerkaan biasanya lebih akurat dengan
menggunakan heuristik.
Tepat atau perkiraan
Bila banyak algoritme sampai pada solusi yang tepat, algoritme perkiraan mencari
sebuah perkiraan yang terdekat dengan solusi benarnya. Perkiraan bisa
menggunakan baik strategi deterministik atau acak. Algoritme seperti itu memiliki
nilai guna untuk banyak permasalahan sulit.
Algoritme quantum
Berjalan di model realistik dari komputasi quantum. Istilah ini biasanya digunakan
untuk algoritme yang tampak pada dasarnya quantum, atau menggunakan beberapa
fitur penting komputasi quantum seperti superposisi quantum atau belitan quantum.

Paradigma secara rancangan


Cara lain mengklasifikasikan algoritme adalah dengan metodologi rancangannya atau
paradigma. Ada sejumlah paradigma, tiap-tiapnya berbeda dari yang lain. Lebih lanjut,
setiap kategori tersebut mengikutkan banyak tipe algoritme yang berbeda. Beberapa
paradigma umum termasuk:
Pencarian paksa atau pencarian mendalam
Membagi dan menaklukan (Divide and conqueror)
Algoritme bagi dan takluk secara berulang mereduksi instansi jumlah masalah
menjadi satu atau lebih kecil instasi masalah yang sama (biasanya secara rekursif)
sampai instansi cukup kecil diselesaikan dengan mudah. Salah satu contoh bagi dan
takluk adalah pengurutan gabung. Pengurutan dapat dilakukan disetiap segmen data
setelah membagi data menjadi segmen-segmen dan urutan seluruh data bisa
didapat pada fase takluk dengan menggabungkan segmen-segmen. Variasi
sederhana dari bagi-dan-takluk disebut algoritme kurang dan takluk, yang
menyelesaikan sub-masalah yang sama dan menggunakan solusi dari sub-masalah
tersebut untuk menyelesaikan masalah yang lebih besar. Bagi dan takluk membagi
permasalahan menjadi banyak sub-masalah dan sehingga tahap takluk lebih
kompleks daripada algoritme kurang-dan-taklukan. Sebuah contoh dari algoritme
kurang-dan-taklukan adalah algoritme pencarian binari.
Pencarian dan enumerasi
Banyak masalah (seperti bermain catur) bisa dimodelkan sebagai masalah
dalam grafik. Sebuah algoritme eksplorasi grafik menentukan aturan-aturan untuk
bergerak disekitar grafik dan berguna bagi masalah tersebut. Kategori ini juga
mengikutkan algoritme pencarian, enumerasi batas dan cabang dan backtracking.
Algoritme pengacakan
Algoritme ini membuat pilihan secara acak (atau pseudo-acak). Ia sangat berguna
untuk menemukan solusi perkiraan untuk masalah dimana solusi yang pasti tidak
praktis (lihat metode heuristik di bawah). Untuk beberapa masalah, diketahui bahwa
perkiraan tercepat harus mengikutkan beberapa pengacakan.[69] Apakah algoritme
pengacakan dengan kompleksitas waktu polinomial bisa menjadi algoritme tercepat
untuk beberapa masalah masih menjadi pertanyaan terbukan yang dikenal
sebagai Masalah P versus NP. Ada dua kelas besar dari algoritme ini:

1. Algoritme Monte Carlo mengembalikan jawaban yang benar dengan


probabilitas-tinggi. Misalnya, RP adalah sub-klas dari algoritme ini
yang berjalan dalam waktu polinomial)
2. Algoritme Las Vegas selalu mengembalikan jawaban yang benar,
tetapi waktu prosesnya adalah hanya terikat secara probabilistik,
misalnya ZPP.
Reduksi
Teknik ini menyelesaikan masalah sulit dengan mengubahnya menjadi permasalahan
yang lebih diketahui yang mana kita (berharap) memiliki algoritme asimptotikal
optimal. Tujuannya yaitu untuk menemukan sebuah algoritme reduksi
yang kompleksitasnya tidak didominasi oleh algoritme hasil reduksi. Sebagai
contoh, algoritme seleksi untuk menemukan rata-rata dalam daftar tak terurut
mengikutkan mengurutkan daftar (bagian yang paling mahal) dan menarik elemen
paling tengah dalam daftar terurut (bagian yang paling mudah). Teknik ini juga
diketahui dengan ubah dan taklukan.
Pemrograman Linear
Saat mencari solusi optimal terhadap sebuah fungsi linear yang terikat persamaan
linear dan ketidaksamaan konstrain, batasan dari permasalahan bisa digunakan
secara langsung untuk menghasilkan solusi optimal. Ada algoritme yang dapat
memecahkan setiap permasalahan dalam kategori ini, seperti algoritme
simpleks yang terkenal.[70] Permasalahan yang dapat diselesaikan dengan
pemrograman linear termasuk permasalahan alur maksimum untuk grafik terarah).
Jika sebuah masalah sebagai tambahan membutuhkan satu atau lebih jawaban
haruslah integer maka ia diklasifikan dalam pemrograman integer. Algoritme
pemrograman linear dapat menyelesaikan masalah seperti itu jika dapat dibuktikan
bahwa semua batasan untuk nilai integer adalah tidak benar, yaitu solusi memenuhi
batasan tersebut. Pada kasus umum, algoritme yang dikhususkan atau algoritme
yang menemukan solusi perkiraan digunakan, bergantung pada kesulitan dari
permasalahan.

Pemrograman dinamis
Bila sebuah masalah memperlihatkan substruktur optimal, artinya solusi optimal
terhadap sebuah masalah bisa direkonstruksi dari solusi optimal ke sub-masalah,
dan submasalah tumpang-tindih, artinya sub-masalah yang sama digunakan untuk
menyelesaikan banyak instasi masalah berbeda, pendekatan tercepat
disebut pemrograman dinamis menghindari penghitungan solusi yang telah
dikomputasi. Sebagai contoh, algoritme Floyd-Warshall, jalan terpendek ke tujuan
dari sebuah vertex dalam grafik berbobot bisa ditemukan dengan menggunakan
jalan terpendek ke tujuan dari semua simpul yang berdekatan. Pemrograman
dinamis dan memoisasi berpadanan. Perbedaan utama antara pemrograman
dinamis dan bagi-dan-taklukan adalah submasalah kurang lebih independen dalam
bagi-dan-taklukan, sementara submasalah tumpang tindik dalam pemrograman
dinamis. Perbedaaan antara pemrograman dinamis dan rekursi langsung adalah
dalam 'caching' atau memoisasi dari pemanggialan rekursif. Saat submasalah
independen dan tidak ada pengulangan, memoisasi tidak membantu sama sekali;
makanya pemrograman dinamis bukalanh solusi untuk semua permasalahan
kompleks. Dengan menggunakan memoisasi atau tabel dari submasalah yang telah
diselesaikan, pemrograman dinamis mereduksi eksponensial dari banyak
permasalahan menjadi kompleksitas polinomial.
Metode rakus
Sebuah algoritme rakus mirip dengan algoritme pemrograman dinamis, tetapi
perbedaannya adalah solusi dari submasalah tidak harus diketahui pada setiap tahap;
melainkan pilihan yang "rakus" bisa dibuat dengan melihat apa yang terbaik untuk saat
tersebut. Metode rakus mengembangkan solusi dengan kemungkinan keputusan yang
terbaik (bukan dengan keputusan yang ada) pada tahap algoritmis berdasarkan optimasi
lokal yang ada sekarang dan keputusan yang terbaik (bukan semua kemungkinan
keputusan) yang dibuat pada langkah sebelumnya. Algoritme ini tidak terlalu mendalam,
dan tidak memberikan jawaban yang akurat terhadap banyak permasalahan. Tapi bila ia
bekerja, ia menjadi metode yang paling cepat. Algoritme rakus paling terkenal adalah
menemukan rentang pohon minimal seperti pada Pohon Huffman, Kruskal, Prim, Sollin.
Metode heuristik
Dalam masalah optimisasi, algoritme heuristik bisa digunakan untuk menemukan
suatu solusi yang terdekat dengan solusi optimal jika seandainya menemukan solusi
optimal tidak praktis. Algoritme ini bekerja dengan mendekati sedikit demi sedikit ke
solusi optimal saat ia berjalan. Secara prinsipnya, jika dijalankan tanpa batas waktu,
ia akan menemukan solusi optimal. Kebaikan mereka adalah mereka dapat
menemukan suatu solusi sangat dekat dengan solusi optimal dalam waktu yang
relatif sangat pendek. Algoritme tersebut termasuk pencarian lokal, pencarian
tabu, simulasi pelunakan, dan algoritme genetik. Beberapa dari mereka, seperti
simuasi pelunakan, adalah algoritme non-deterministik sementara yang lainnya,
seperti pencarian tabu, adalah deterministik. Saat batas dari galat dari solusi non-
optimal diketahui, algoritme kemudia dikategorikan sebagai algoritme pendekatan.

Berdasarkan bidang kajian


Setiap bidang sains memiliki permasalahannya sendiri dan membutuhkan algoritme yang
efisien. Masalah yang berkaitan di satu bidang terkadang dipelajari bersama. Beberapa
contoh yaitu algoritme pencarian, algoritme penggabungan, algoritme numerik, algoritme
grafik, algoritme deret, algoritme komputasi geometri, algoritme kombinatorial, algoritmas
medis, mesin belajar, kriptografi, algoritme kompresi data dan teknik penguraian.
Terkadang bidang-bidang tersebut saling tumpang tindih, dan perkembangan algoritme di
satu bidang bisa meningkatkan bidang lainnya yang terkadang tidak berkaitan. Sebagai
contohnya, pemrograman dinamis ditemukan untuk optimisasi konsumsi sumber daya
dalam industri, tetapi sekarang digunakan untuk menyelesaikan sejumlah besar
permasalahan dalam banyak bidang.
Berdasarkan kompleksitas[sunting | sunting sumber]
Lihat pula: kelas kompleksitas dan Kompleksitas parameterisasi
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.
Burgin (2005, p. 24) menggunakan definisi algoritme secara umum yang melonggarkan
kebutuhan bersama yang keluaran dari algoritme yang menjalankan sebuah fungsi harus
ditentukan setelah sejumlah langkah. Dia mendefinisikan kelas super-rekursif dari algoritme
sebagai "sebuah kelas algoritme yang mana memungkinkan untuk menghitung fungsi yang
tidak bisa dihitung oleh mesin Turing manapun" (Burgin 2005, p. 107). Hal ini berkaitan
dekat dengan kajian dari metode hiperkomputasi.
Berdasarkan tipe evaluatif
Untuk menjaga keseimbangan saat mengintegrasikan mesin ke dalam masyarakat,
seseorang bisa mengklasifikasikan algoritme berdasarkan tipe dari evaluasi yang mereka
lakukan. Sejumlah filsuf telah berhipotesis bahwa masyarakat diuntungkan dari keragaman
evaluatif seperti mereka diuntungkan keragaman jender dan tipe darah (misalnya, Dean
2012, Sober & Wilson 1998) Hertzke & McConkey 1998, dan Bellah 1985). Teknologi dapat
mengancam ekosistem moral tersebut seperi spesies invasif jika ia mengganggu campuran
keragaman. Wallach & Allen (2008) mengklasifikasikan algoritme pembuat-keputusan
menjadi tiga tipe evaluatif: Algoritme bottom-up membuat penilaian tidak terprediksi bagi
pemrogram (misalnya, perangkat lunak yang berevolusi). Yang lainnya (top-down) dibagi
menjadi deontologikal (yang dapat bergantung pada implementasi aturan pemrograman)
lawan consequensialis (yang mengandalkan pada memaksimalkan perkiraan pemrograman).
Sebagai contohnya, sebuah kalkulator standar termasuk deontologikal, sementara mesin
pembelajaran untuk perdagangan saham termasuk consequensialis.
Santos-Lang mengganti nama deontologikal dan consequensialis menjadi kelas
"institusional" dan "negosiator" dengan tujuan untuk menghindari implikasi bahwa semua
teori-teori etika deontologikal dan consequensialis bisa diimplementasikan sebagai
algoritme, dan membagi kelas bottom-up menjadi "pengganggu" (algoritme yang tidak
terprediksi karena menggunakan generator pengacakan) lawan "relasional" (algoritme yang
tidak terprediksi karena efek jaringan). Seorang mutator dalam komputasi evolusioner bisa
menjadi contoh dari pengganggu, sementara kelas 3 atau 4 dari otomata sellular adalah
contoh dari mesin relasional. Santos-Lang mencatat bahwa algoritme terkadang memiliki
subkomponen dari tipe lainnya. Sebagai contohnya, negosiator perdagangan saham bisa
mengimplementasikan sebuah algoritme genetik, dan memiliki mutator pengganggu, dan
mutator bisa memiliki subkomponen institusional dan relasional, semua komputasi adalah
relasional pada tingkat di jajaran kimiawi (Santos-Lang 2014).

Algoritme berkelanjutan
Kata sifat "berkelanjutan" bila diterapkan pada kata "algoritme" bisa berarti:

 Sebuah algoritme beroperasi pada data yang merepresentasikan kuantitas yang


berkelanjutan, walaupun data tersebut direpresentasikan oleh pendekatan diskrit—
seperti algoritme yang dipelajari dalam analisis numerik; atau
 Sebuah algoritme dalam bentuk dari persamaan diferensial yang beroperasi secara
berkelanjutan terhadap data, berjalan dalam sebuah komputer analog.

Isu legalitas
Algoritme biasanya tidak dipatenkan. Di Amerika Serikat, sebuah klaim yang terdiri
hanya dari manipulasi sederhana dari konsep abstrak, angka, atau sinyal tidak berarti
suatu "process" (SPTO 2006), dan oleh karena itu algoritme tidak bisa dipatenkan
(sebagaimana dalam Gottschalk v. Benson). Namun, penerapan praktis dari algoritme
terkadang dipatenkan. Sebagai contohnya, dalam Diamond v. Diehr, aplikasi dari
algoritme umpan-balik sederhana untuk membantu dalam menyembuhkan karet
sintetis dianggap dapat dipatenkan. Mematenkan perangkat lunak sangat kontroversial,
dan ada paten yang mengikutkan algoritme yang sangat dikritisi, terutama
algoritme kompresi data, seperti Format Grafiknya Unisys.
Sebagai tambahan, beberapa algoritme kriptografi memiliki batasan ekspor (lihat ekspor
dari kriptografi).

Etimologi]
Kata "Algoritme", atau "Algorisma" pada versi penulisan lain, datang dari nama al-
Khwarizmi. dieja dalam Arab klasik sebagai Al-Khwarithmi. Al-khwarizmi (bahasa
Persia: 850-780 ,‫ )خوارزمي‬adalah matematikawan, ahli astronomi, ahli
geografi dari Persia dan sarjana House of Wisdom di Baghdad, yang arti
namanya "penduduk asli Khwarezm", sebuah kota yang merupakan bagian dari Wilayah
Iran pada masanya dan sekarang Uzbekistan. [72] [73] Sekitar tahun 825, dia menulis
risalah dalam bahasa Arab, yang diterjemahkan dalam Latin pada abad ke-12 dengan
judul Algoritmi de numero Indorum. Judul ini artinya "Algoritmi pada bilangan India", di
mana "Algoritmi" adalah pelatinan penerjemah dari nama Al-Khwarizmi. [74] Al-
Khwarizmi dulunya adalah matematikawan yang paling banyak dibaca di Eropa pada
akhir Abad Pertengahan, pada umum lewat bukunya yang lain, Aljabar. [75] Pada akhir
abad pertengahan, algorismus, perubahan dari namanya, berarti "sistem bilangan
desimal" yang masih merupakan arti dari kata Inggris modern algorism. Pada abad ke-17
Prancis kata tersebut berubah, tetapi tidak maknanya, menjadi algorithme. Inggris
mengadopsi Prancis setelahnya, tetapi tidak pada akhir abad ke-19 lah "Algorithm"
mengambil makna dari kata Inggris masa sekarang. [76]
Etimologi alternatif mengklaim asal mulanya dari istilah algebra (aljabar) dari makna
abad pertengahan "aritmetika Arab" dan arithmos istilah Yunani untuk angka (yang
secara harfiah berarti "bilangan Arab" atau "perhitungan Arab"). Karya algoritme Al-
Kharizmi bukan berbentuk seperti pada masa modern sekarang tetapi sebagai tipe dari
pengulangan kalkulus (disini disebutkan bahwa karya fundamentalnya yang dikenal
sebagai algebra pada awalnya berjudul "Buku Ringkasan tentang Kalkulasi dengan
Penyempurnaan dan Pengimbangan" menjelaskan tipe-tipe dari pengulangan
perhitungan dan persamaan kuadrat). Dalam makna tersebut, algoritima dikenal di
Eropa jauh sebelum Al-Kharizmi. Algoritme paling tua yang dikenal sekarang
adalah Algoritme Euklid (lihat juga Pengembangan algoritme Euklid). Sebelum
ditemukan istilah algorithm orang Yunani menyebutnya anthyphairesis secara harfiah
berarti anti-substraksi atau substraksi timbal-balik (untuk bacaan lebih
lanjut disini dan ini Diarsipkan 2013-11-03 di Wayback Machine.. Algoritme dikenal oleh
orang Yunani berabad sebelum [77] Euclid. Bukannya kata algebra orang Yunani
menggunakan istilah arithmetica(ἀριθμητική, yaitu dalam karya Diophantus yang
dikenal "bapak dari Aljabar" - lihat juga artikel Wikipedia persamaan
Diophantine dan Eudoxos).

Sejarah: Perkembangan dari kata "algoritme


Bukti terawal tentang algoritma ditemukan dalam
matematika Babilonia di Mesopotamia kuno (saat ini merupakan bagian dari Irak). Sebuah
tablet tanah liat Sumeria yang ditemukan di Shuruppak dekat Baghdad dan berasal dari
sekitar tahun 2500 SM menjelaskan algoritma divisi yang paling awal.[78] Selama dinasti
Hammurabi sekitar 1800-1600 SM, tablet tanah liat Babilonia menjabarkan algoritma untuk
rumus-rumus komputasi.[79] Algoritma juga digunakan dalam astronomi Babilonia. Tablet
tanah liat Babilonia menguraikan dan menggunakan prosedur algoritmik untuk menghitung
waktu dan tempat peristiwa astronomi yang signifikan.[80]
Algoritma untuk aritmatika juga ditemukan dalam matematika Mesir kuno, yang terdapat
pada Papirus Matematika Rhind yang berasar dari sekitar tahun 1550 SM. [81] Algoritma
kemudian digunakan dalam matematika Helenistik kuno. Dua contohnya adalah Tapis
Eratosthenes, yang dijelaskan dalam Pengenalan Aritmatika oleh Nicomachus,[82][83]:Ch
9.2
dan Algoritma Euklides, yang pertama kali dipaparkan dalam Euclid's Elements (sekitar
300 SM).[83]:Ch 9.1

Simbol diskrit dan yang dapat dibedakan[


Penanda-penghitung: Untuk mencatat hewan gembalaan, kumpulan biji dan uang mereka
orang dahulu menggunakan penghitung: akumulasi batu atau tanda yang ditoreh pada
tongkat, atau membuat simbol diskrit di kerang. Sampai orang Babilonia dan Mesir
menggunakan tanda dan simbol, pada akhirnya bilangan Roma dan abakus berkembang
(Dilson, p. 16-41). Penanda penghitung muncul dalam sistem bilangan operan aritmetika
digunakan dalam mesin Turing dan komputasi mesin Post-Turing.
Manipulasi simbol sebagai "penampung" bilangan: aljabar[sunting | sunting sumber]
Karya dari Geometer Yunani kuno (algoritme Euklid), matematikawan India Brahmagupta,
dan matematikawan Persia Al-Khwarizmi (yang darinya isitlah "algorism" dan "algoritme"
diturunkan), dan matematikawan Eropa Barat memuncak dalam
notasi Leibniz dari rasiosinator kalkulus (sekitar 1680-an):
Abad yang baik dan setengah lebih maju dari masanya, Leibniz mengajukan logika aljabar,
sebuah aljabar yang akan menentukan aturan-aturan untuk memanipulasi konsep logika
dengan cara yang aljabar biasa menentukan aturan untuk manipulasi angka. [84]
Rancangan mekanis dengan tingkat diskrit
Jam: Bolter memuji penemuan jam gaya-berat sebagai "Kunci penemuan dari Eropa pada
Abad Pertengahan", khususnya pada ambang pelarian [85] yang menyediakan kita dengan tik
dan tak dari jam mekanis. "Mesin otomatis yang akurat" [86] mengarah langsung pada
"otomata mekanis" dimulai pada abad ke-13 dan terakhir pada "mesin komputasi" -- motor
berbeda dan motor analitik dari Charles Babbage dan bangsawan Ada Lovelace,
pertengahan abad ke-19. [87] Lovelace dikreditkan sebagai yang pertama menciptakan
algoritme yang ditujukan untuk diproses di komputer—motor analitis Babbage, perangkat
pertama yang dianggap komputer Turing-sempurna sebenarnya bukan hanya
sebuah kalkulator—dan terkadang dikenal "programmer pertama dalam sejarah", walaupun
implementasi penuh dari perangkat Babbage kedua tidak terealisasi sampai beberapa
dekade setelah masanya.
Mesin logika 1870 - Stanley Jevons "sempoa logika" dan "mesin logika": Masalah teknisnya
adalah untuk mereduksi persamaan boolean bila ditampilkan dalam sebuah bentuk yang
pada masa sekarang dikenal sebagai pemetaan Karnaugh. Jevons (1880) pertama
menjelaskan "sempoa" sederhana dari "potongan kayu dilengkapi dengan penyemat, dibuat
supaya bagian atau kelas kombinasi logika manapun dapat dipilih secara mekanis ... Baru-
baru ini Saya telah mereduksi sistem menjadi bentuk yang secara sempurna mekanis, dan
membuatnya mewujudkan keseluruhan proses inferensi tak langsung dalam apa yang
disebut sebuah Mesin Logika" Mesinnya dilengkapi dengan "beberapa tangkai kayu yang
bisa dipindahkan" dan "di bawah ada 21 kunci seperti pada piano [dll] ...". Dengan mesin ini
dia dapat menganalis sebuah "silogisme atau argumen logika sederhana apapun". [88]
Mesin tenun Jacquard, kartu berlobangnya Hollerith, telegraf dan telepon -- penyiaran
elektromekanis: Bell dan Newell (1971) mengindikasikan bahwa mesin tenun
Jacquard (1801), pelopor dari kartu Hollerith (kartu berlobang, 1887), dan "teknologi alih
telepon" adalah akar dari sebuah pohon yang mengarah pada perkembangan dari komputer
pertama. [89] Pada pertengahan abad ke-19 telegraf, pelopor dari telepon, digunakan
diseluruh dunia, pengkodean diskrit dan pembedaan huruf sebagai "titik dan strip". Pada
akhir abad ke-19 pita telegraf (sekitar 1870-an) digunakan, sebagaimana juga kartu Hollerith
pada sensus Amerika 1890. Kemudian muncullah teleprinter (sekitar 1910-an) dengan kerta-
berlobang menggunakan kode Baudot di pita.
Jaringan alih-telepon dari penyiaran elektromekanis (ditemukan 1835) adalah karya
dair George Stibitz (1937), penemu dari perangkat penghitungan digital. Saat bekerja di
laboratorium Bell, dia mengamati "beratnya" penggunaan kalkulator mekanis dengan geligi.
"Dia pulang ke rumah pada suatu malam 1937 berniat untuk menguji idenya ... Saat
mengatik selesai, Stibitz telah membangun perangkat hitung digital". [90]
Davis (2000) mengamati pentingnya penyiaran elektromekanis (dengan "keadaan binari"-
nya buka dan tutup):
Hanya dengan perkembangan, dimulai sejak 1930-an, dari kalkulator elektromekanis
menggunakan penggantian elektris, sehingga mesin yang dibuat memiliki ruang
lingkup yang dibayangkan Babbage."[91]

B. SEJARAH ALGORITMA DARI BERBAGAI GENERASI

1. Sejarah perkembangan computer dan Algoritma


a. Sejarah komputer berawal dari abad ke-19, ketika Charles Babbage mencoba
untuk mendesain komputer mekanik yang bernama Mesin Analitikal. Desain ini
menjadi basis kerangka desain komputer sekarang.
Secara garis besar, pengembangan komputer terbagi dalam empat generasi:
• Generasi pertama dimulai ketika komputer digunakan dalam akademi dan
militer, seperti Komputer Atanasoff-Berry dibuat pada tahun 1937 untuk
menyelesaikan sistem persamaan linear dan komputer Colossus untuk
memecahkan kode rahasia Jerman Nazi. Kemudian, ENIAC yang dibangun pada
tahun 1946 menjadi komputer pertama untuk tujuan umum. Ketika
komputernya dinyalakan untuk pertama kali, Philadelphia mengalami mati
listrik. Komputer generasi ini menggunakan tabung vakum untuk menyimpan
data dan ukurannya memakan satu ruangan.
• Generasi kedua dimulai ketika transistor menggatikan tabung vakum.
UNIVAC diperkenalkan ke publik tahun 1951 untuk penggunaan komersial.
Kemudian, pada tahun 1953, IBM memulai bisnis komputernya dengan merilis
IBM 650 dan IBM 700. Berbagai bahasa pemrograman mulai dikembangkan
dan komputer mulai memiliki memori dan sistem operasi.
• Generasi ketiga dimulai ketika teknologi transistor meningkat menjadi sirkuit
terpadu. Komputer mini adalah inovasi yang signifikan dalam generasi ini dan
mempengaruhi generasi komputer selanjutnya. NASA menggunakan komputer
generasi ini untuk melancarkan Program Apollo, seperti Komputer Bimbingan
Apollo untuk mempermudah kendali Apollo Command/Service Module. Digital
Equipment Corporation menjadi perusahaan komputer nomor dua di belakang
IBM dengan komputer PDP dan VAX-nya. Komputer ini membawa ke
pengembangan sistem operasi yang berpengaruh, Unix.
• Generasi keempat dimulai pada dasawarsa 1970-an ketika penemuan
MOSFET dan integrasi berskala besar selanjutnya membawa ke pengembangan
mikroprosesor di awal 1970-an. komputer pribadi yang semakin kecil berkat
mikroprosesor mulai berkembang, dimulai dari komputer rumahan dan
komputer meja. Teknologi selanjutnya adalah laptop dan ponsel cerdas yang
sangat fenomenal, membawa berbagai perusahaan teknologi ke dalam perang
paten atas ponsel cerdas.
b. Sejarah Algoritma dan Perkembangannya
Algoritma atau Algorism berasal dari nama seorang matematikawan, ahli
geografi, ahli astronomi dan penulis buku dari daratan Uzbekistan, yakni Abu
Ja’far Muhammad Ibnu Musa Al-khawarizmi. Namun orang-orang eropa lebih
mengenalnya dengan nama Algorism. Al-Khawarizmi lahirkan di sebuah kota
sebelah selatan sungai Oxus yang sekarang dikenal dengan nama Uzbekistan
pada tahun 770 masehi. Beliau merupakan salah satu ilmuwan yang terkenal
pada masa tersebut.
Pada awalnya, algoritma merupakan sebuah istilah yang merujuk pada aturan-
aturan aritmetis yang digunakan untuk menyelesaikan persoalan dengan
menggunakan bilangan angka arab, solusi sistematis dan persamaan kuadrat.
Pada tahun 1928, David Hilbert seorang matematikawan pertama asal Jerman
yang mendefinisikan apa arti dari “metoda efektif” atau “kalkulasi efektif”.
Beliau mengajukan sebagian formulasi dari konsep dasar algoritma yang
nantinya akan menjadi algoritma modern dimulai dengan usaha untuk
memecahkan permasalahan keputusan. Beberapa perubahan dan formulasi
dilakukan untuk menyempurnakan algoritma.
Hingga pada tahun 1950, seorang matematikawan Yunani yang bernama
Euclide menulis buku yang berjudul “Element“. Pada bukunya tersebut, beliau
menjelaskan langkah-langkah untuk menemukan pembagi bersama terbesar
dari dua bilangan bulat, yakni m dan n. Pada penemuannya,
Euclide tidak menyebutkan bahwa cara yang ia gunakan adalah metode
algoritma namun para ahli menyatakan metode yang ia pakai adalah metode
algoritma. Dan penemuan dari Euclide disebut-sebut sebagai cikal bakal
algoritma modern.
Perkembangan yang terus menerus menjadikan Algoritma bagian penting
dalam ilmu komputer (Computer Science). Beberapa orang mengatakan
“Algoritma adalah jantung dari ilmu pemrograman/Ilmu komputer”. Hal ini
disebabkan karena algoritma mencakup semua prosedur atau urutan langkah-
langkah yang jelas dan diperlukan untuk menyelesaikan suatu permasalahan
yang sedang dihadapi. Dengan adanya Algoritma, masalah-masalah yang ada
pada ilmu komputer dapat dituangkan dalam sebuah program untuk
menyelesaikannya. Sebenarnya Algoritma tidak digunakan untuk Ilmu
Komputer saja, Cabang ilmu lain juga mempelajarinya dan secara sadar atau
tidak sadar dalam kehidupan kita sehari-hari pun banyak Algoritma.

C. PERKEMBANAGN ALGORITMA DARI BERBAGAI TOKOH DUNIA

1. Abu Ja’far Muhammad Ibnu Musa Al-khawarizmi

Algoritma atau Algorism berasal dari nama seorang matematikawan, ahli


geografi, ahli astronomi dan penulis buku dari daratan Uzbekistan, yakni Abu
Ja’far Muhammad Ibnu Musa Al-khawarizmi.

Namun orang-orang eropa lebih mengenalnya dengan nama Algorism. Al-


Khawarizmi lahirkan di sebuah kota sebelah selatan sungai Oxus yang sekarang
dikenal dengan nama Uzbekistan pada tahun 770 masehi. Beliau merupakan
salah satu ilmuwan yang terkenal pada masa tersebut.

Ada beberapa cabang ilmu lain yang berhasil beliau kemukakan, antara lain
yang dikenal sebagai ilmu Astronom dan ilmu Geografer. Tak hanya sampai situ
saja, Al-Khawarizmi juga menulis buku yang diberi judul Al Jabar Wal-
Muqabala (The book of Restoration and Reduction) yang artinya Buku
Pemugaran dan Pengurangan.

Dari buku tersebut, Kita dapat menarik kesimpulah bahwa Al-Khawarizmi


adalah pengagas Aljabar maka tidak heran beliau disebut juga sebagai Bapak
Aljabar.

Al-Khawarizmi memiliki nama lengkap Muhammad ibn Musa Al Khwarizmi,


sedangkan di negara-negara barat Al Khawarizmi dikenal dengan sebutan Al
Goritmi, Al Gorismi, Al Cowarizmi, dan sebutan dengan ejaan yang lainnya. Al
Khawarizmi lahir sekitar tahun 780 M di Khawarizm jika sekarang tempat
kelahirannya dikenal dengan kota Khiva di Uzbekistan. Keluarga beliau
merupakan turunan Persia yang telah menetap di Khawarizm, namun dari
beberapa catatan sejarah diketahui bahwa beliau ketika kecil pindah bersama
keluarganya ke selatan kota Baghdad, sehingga di sinilah beliau meniti karirnya
sebagai seorang matematikawan.

Beliau diperkirakan hidup di masa khalifah Abbasiyah Al-Ma’mun, Al-


Mu’tashim dan Al-Watsiq yang dikenal sebagai masa keemasan ilmu
pengetahuan di daerah Arab berkat translasi buku dan ilmu pengetahuan ke
dalam bahasa Arab. Pada masa itu terdapat Bait Al-Hikmah yang menjadi pusat
penelitian, penerjemahan buku ke dalam bahasa Arab, dan juga publikasi ilmu
pengetahuan yang dilakukan oleh para cendekiawan muslim tak terkecuali Al
Khawarizmi.

Al Khawarizmi bergabung bersama cendekiawan yang lain di Bait Al-Hikmah


ketika berusia 20 tahun. Semasa hidupnya beliau bekerja di Sekolah
Kehormatan yang didirikan oleh Khalifah Al-Ma’mun. Di sanalah beliau banyak
menulis berbagai gagasan dan mempublikasikan buku ilmu pengetahuan baik
di bidang matematika, astronomi, sejarah maupun geografi, termasuk
mempelajari terjemahan literatur sansekerta dan Yunani.

Karya pertama beliau dipublikasikan dalam buku al-Jabar (Al-Kitāb al-


mukhtaṣar fī ḥisāb al-jabr wa-l-muqābala), buku tersebut merupakan buku
pertama yang menjelaskan solusi sistematik dari linear dan notasi kuadrat.
Berkat karya tersebutlah beliau dijuluki sebagai Bapak Aljabar, selain itu buku
tersebut juga membawa kontribusi dalam kebahasaan. Kata aljabar berasal
dari kata al-Jabr yang tercantum di dalam bukunya.

Hasil pemikiran beliau dalam buku al-Jabar dianggap sebagai revolusi besar
dalam bidang matematika. Beliau berhasil mengintegrasikan konsep-konsep
geometri dari matematika yunani kuno ke dalam konsep matematika yang
baru. Pemikirannya menghasilkan sebuah teori gabungan yang memungkinkan
bilangan rasional, irasional, dan besaran-besaran geometri diperlakukan
sebagai objek-objek aljabar.

Al Khawarizmi juga berkontribusi terhadap cabang aritmatika, hasil


pemikirannya mengenai bidang ini dituangkan dalam karyanya yang
berjudul Kitāb al-Jam’a wa-l-tafrīq bi-ḥisāb al-Hind. Kitab tersebut dikenal
sebagai buku ilmu pengetahuan pertama yang ditulis menggunakan sistem
bilangan desimal. Teori yang dibahas dalam buku tersebut merupakan titik
awal penyeimbangan ilmu matematika dan sains dan dari buku tersebut juga
lah cikal bakal dari algoritma muncul.

Di belahan Eropa, karyanya banyak ditranslasikan ke dalam bahasa Latin


sebagai Algorithmi, Algorismi, Alchawarizmi sehingga di literatur barat Al
Khawarizmi dikenal sebagai Algorizm. Sebutan inilah yang kemudian digunakan
untuk menyebutkan konsep algoritma yang ditemukannya perhitungan
logaritma yang sekarang banyak dipergunakan secara luas terutama di bidang
komputer atau sains dan engineering yang berasal dari hasil pemikiran beliau.

Selain itu matematika biner yang digunakan dalam pemrograman juga didasari
oleh konsep algoritma Al Khawarizmi. Perkembangan yang semakin maju bagi
komputer digital dan pemrogramannya tak terlepas dari pemikiran beliau yang
menjadi gerbang kemajuan. Kata algoritma sendiri yang kita kenal sekarang
merupakan kata yang diambil dari kata algorismi yang dilatinisasi dari
namanya.

Al Khawarizmi diperkirakan wafat pada tahun 850 M dan semasa hidupnya


karyanya tidak seputar bidang matematika saja, namun banyak bidang dari
ilmu pengetahuan yang ikut terpengaruh dari hasil pemikirannya tersebut.
Seperti pada bidang geografi beliau menyempurnakan peta Ptolemeus dalam
karya yang berjudul Kitāb ṣūrat al-Arḍ dan menurut Paul Gallez, hal ini sangat
bermanfaat untuk menentukan posisi kita dalam kondisi yang buruk.

Pengaruh Al Khawarizmi dalam Bidang Ilmu Pengetahuan

Al Khawarizmi banyak memberikan pengaruh terhadap perkembangan ilmu


pengetahuan dunia, diantaranya sebagai berikut :

1. Menemukan konsep aljabar yang kita kenal sekarang melalui buku Al-
Jabr yang berisi mengenai persamaan linear dan kuadrat.
2. Orang yang pertama menjelaskan dan mempopulerkan kembali
penggunaan angka nol (0) serta mengenalkan sistem notasi desimal dan
tanda pengalian dua.
3. Memperkenalkan tanda negatif pada bilangan.
4. Membuat tabel perhitungan astronomi guna mengukur jarak dan
kedalaman bumi. Tabel ini juga menjadi dasar untuk penelitian di bidang
astronomi.
5. Model pembuatan peta dunia yang dituliskan dalam buku ṣūrat al-Arḍ
yang digunakan para ahli geografi barat dalam menggambar peta.
6. Menemukan konsep alat penunjuk waktu dengan bayang sinar matahari
dalam buku sundials.
7. Menemukan konsep dasar algoritma melalui pembahasan aturan-aturan
melakukan aritmatika menggunakan bilangan Hindu-Arab dan solusi
sistematis.
Masih banyak lagi karya-karya beliau semasa hidupnya yang mempengaruhi
ilmu pengetahuan saat ini. Selain ahli matematika Al Khawarizmi juga seorang
ahli geografi, ahli astronomi, ahli astrologi, ahli sejarah bahkan teori mengenai
seni musik dan lukis yang beliau tuliskan dalam bukunya. Beliau merupakan
sosok yang cerdas dalam berbagai bidang dan menjadi cerminan identitas
muslim yang sesungguhnya. Sebagai seorang muslim kamu seharusnya bangga
sekaligus menjadi cambuk bagi kamu yang sering bermalas-malas atau kaum
rebahan.

2.DAVID HILBERT

Pada awalnya, algoritma merupakan sebuah istilah yang merujuk pada aturan-
aturan aritmetis yang digunakan untuk menyelesaikan persoalan dengan
menggunakan bilangan angka arab, solusi sistematis dan persamaan kuadrat.
Pada tahun 1928, David Hilbert seorang matematikawan pertama asal Jerman
yang mendefinisikan apa arti dari “metoda efektif” atau “kalkulasi efektif”.

Beliau mengajukan sebagian formulasi dari konsep dasar algoritma yang


nantinya akan menjadi algoritma modern dimulai dengan usaha untuk
memecahkan permasalahan keputusan. Beberapa perubahan dan formulasi
dilakukan untuk menyempurnakan algoritma.

Hingga pada tahun 1950, seorang matematikawan Yunani yang


bernama Euclide menulis buku yang berjudul “Element“. Pada bukunya
tersebut, beliau menjelaskan langkah-langkah untuk menemukan pembagi
bersama terbesar dari dua bilangan bulat, yakni m dan n.
Pada penemuannya, Euclide tidak menyebutkan bahwa cara yang ia gunakan
adalah metode algoritma namun para ahli menyatakan metode yang ia pakai
adalah metode algoritma. Dan penemuan dari Euclide disebut-sebut sebagai
cikal bakal algoritma modern.

Perkembangan yang terus menerus menjadikan Algoritma bagian penting


dalam ilmu komputer (Computer Science). Beberapa orang mengatakan
“Algoritma adalah jantung dari ilmu pemrograman/Ilmu komputer” bagaimana
bisa??.

Baiklah, Hal ini disebabkan karena algoritma mencakup semua prosedur atau
urutan langkah-langkah yang jelas dan diperlukan untuk menyelesaikan suatu
permasalahan yang sedang dihadapi. Dengan adanya Algoritma, masalah-
masalah yang ada pada ilmu komputer dapat dituangkan dalam sebuah
program untuk menyelesaikannya.

3.MUHTAR
Tidak sedikit ilmuwan muslim yang karyanya mempengaruhi dunia. Salah satu
penemuan penting dari ilmuwan muslim itu adalah algoritma.

Algoritma adalah urutan dari sejumlah langkah logis dan sistematis untuk
memecahkan suatu masalah tertentu. Algoritma dianggap sebagai kunci dari
ilmu komputer yang dipakai untuk spesifikasi guna mengolah dan menghitung
suatu data.

Selain itu, algoritma juga dapat diterapkan untuk menyelesaikan masalah


sehari-hari yang membutuhkan serangkaian proses atau langkah-langkah
prosedural.

Penemu algoritma adalah Al Khawarizmi, seorang jenius yang mahir dalam


matematika, geografi, astronomi, dan lain sebagainya.

Dalam bukunya The History of Arab, Phillip K. Hitti menyebut Al Khawarizmi


sebagai tokoh utama pada awal sejarah matematikan Arab.

Biografi
Al Khawarizmi mempunyai nama lengkap Abu Abdullah Muhammad ibn Musa
Al Khawarizmi. Ia lahir sekitar tahun 780 Masehi di kota Khwarezm, yang kini
berada di wilayah Uzbekistan. Ia wafat sekitar tahun 850 Masehi di Baghdad.
Al Khawarizmi hidup di masa kepemimpinan Al Ma’mun, putra Harun Al Rasyid,
khalifah Daulah Abbasiyah. Pada masa itu, bisa disebut sebagai salah satu masa
kegemilangan Islam di bidang ilmu pengetahuan.

Pada masa Al-Ma’mun berkuasa, dibangun Bait Al Hikmah yang menjadi pusat
penelitian, penerjemahan, hingga publikasi ilmu pengetahuan.

Menurut beberapa sumber, Bait Al Hikmah atau rumah kebijaksanaan itu


memiliki perpustakaan yang melampaui perpusatakaan di Alexandria dan
menyediakan segala sesuatu yang dibutuhkan oleh para cendikiawan.

Salah satu cendikiawan itu adalah Al Khawarizmi yang mempelajari aljabar,


geometri, astronomi, dan berbagai bidang ilmu yang lain.

Buku pertama Al Khawarizmi adalah Kitaab al Muhtasar fii Hisaab al Jabr wal
Muqabaala. Buku tersebut membahas solusi sistematik dari persamaan linear
dan persamaan kuadrat.

Semenrara buku dengan judul Kitab al Jam’a wal Tafriq bi Hisab al


Hind merupakan sumbangan Al Khawarizmi terhadap cabang aritmatika. Dari
buku tersebut, ia memperkenalkan angka Arab dan kelak menjadi cikal bakal
munculnya algoritma.

Mengutip dari Wikipedia, kontribusi Al Khawarizmi tak hanya berdampak besar


pada matematika, tapi juga dalam kebahasaan. Kata “aljabar” berasal dari kata
al-Jabr, satu dari dua operasi dalam matematika untuk menyelesaikan notasi
kuadrat, yang tercantum dalam bukunya.

Kata algorisme dan algoritma diambil dari kata algorismi, latinisasi dari
namanya. Namanya juga diserap dalam bahasa Spanyol, guarismo, dan dalam
bahasa Portugis, algarismo bermakna “digit”.

Sumbangan Al Khawarizmi tidak hanya seputar matematika. Mengutip


dari dicoding.co, Al Khawarizmi mempunya sumbangan di bidang geografi.

Ia menyempurnakan peta Ptolemeus dalam karya yang berjudul Kitab Surat al-
Ard. Menurut Paul Gallez, hal ini sangat bermanfaat untuk menentukan posisi
seseorang dalam kondisi yang buruk.
Sumbangan di Bidang Ilmu Komputer
Tidak banyak yang tahu kalau Al Khawarizmi berperang penting dalam
perkembangan ilmu komputer saat ini. Jasa penting Al Khawarizmi itu tidak
lepas dari penemuan algoritma.

Algoritma selalu berdampingan dengan perkembangan teknologi yang saat ini


semakin maju. Hal itu termasuk teknologi kecerdasan buatan yang terkait erat
dengan algoritma dalam pemrogramannya.

Di samping algoritma, salah satu kontribusi yang dilakukan oleh Al Khawarizmi


adalah memperkenalkan angka nol (0) dalam sistem penomoran Arab, yang
nantinya diadaptasi pada bidang komputer.

D. Sejarah Perkembangan Komputasi dan Algoritma dari abad ke abad

Sejarah Perkembangan Komputasi


Sejarah perkembangan komputer sangat panjang dan kompleks. Ini adalah
gambaran umum tentang perkembangan komputer dari awal hingga saat ini:
1. Zaman Pra-Komputer (Abad ke-17 hingga awal abad ke-20):

 Abacus, yang digunakan untuk melakukan perhitungan sederhana,


adalah salah satu alat awal yang digunakan manusia untuk
mengotomatiskan proses perhitungan.

2. Zaman Komputer Mekanik (Abad ke-19 hingga awal abad ke-20):

 Charles Babbage adalah tokoh penting dalam perkembangan komputer.


Dia merancang mesin analitik, yang dianggap sebagai desain komputer
pertama meskipun tidak pernah dibangun selama hidupnya.

3. Zaman Komputer Elektronik Awal (1930-an hingga 1940-an):

 Konsep-konsep dasar komputer modern mulai muncul. Pada tahun


1936, Alan Turing mengembangkan mesin Turing, yang merupakan
model komputasi teoritis pertama.
 Pada tahun 1941, Konrad Zuse dari Jerman membangun Z3, yang
dianggap sebagai komputer elektronik pertama di dunia.
4. ENIAC dan UNIVAC (1940-an hingga 1950-an):

 Pada tahun 1945, John Presper Eckert dan John Mauchly


mengembangkan ENIAC (Electronic Numerical Integrator and
Computer), yang adalah komputer elektronik pertama yang digunakan
untuk tujuan umum.
 UNIVAC (Universal Automatic Computer) adalah komputer komersial
pertama yang dijual ke pelanggan pada tahun 1951.

5. Zaman Transistor (Akhir 1940-an hingga 1950-an):

 Transistor menggantikan tabung vakum sebagai komponen elektronik


utama dalam komputer, membuat komputer lebih kecil, lebih cepat, dan
lebih efisien.

6. Zaman Komputer Mini (Akhir 1950-an hingga 1960-an):

 IBM memperkenalkan komputer mainframe dan komputer mini, yang


menjadi populer di perusahaan dan lembaga akademik.

7. Zaman Komputer Pribadi (1970-an hingga 1980-an):

 Perusahaan seperti Apple, IBM, dan Microsoft memperkenalkan


komputer pribadi, seperti Apple II, IBM PC, dan komputer dengan sistem
operasi MS-DOS.

8. Zaman Komputer Jaringan (1980-an hingga 1990-an):

 Internet mulai dikembangkan sebagai jaringan komputer global, dan


World Wide Web (WWW) diciptakan oleh Tim Berners-Lee pada tahun
1989.

9. Zaman Komputer Pintar (2000-an hingga saat ini)

 Komputer semakin kecil, lebih kuat, dan lebih terhubung daripada


sebelumnya. Perkembangan dalam kecerdasan buatan dan
pembelajaran mesin telah memungkinkan komputer untuk melakukan
tugas-tugas yang semakin kompleks, seperti pengenalan wajah,
pengolahan bahasa alami, dan pengambilan keputusan.

10. Zaman Komputasi Kuantum (Awal abad ke-21):


 Ilmuwan mulai mengembangkan komputer kuantum, yang memiliki
potensi untuk mengatasi masalah yang sangat rumit yang sulit
dipecahkan oleh komputer klasik.

Perkembangan komputer terus berlanjut, dan teknologi semakin canggih. Ini


hanya gambaran umum tentang perkembangan komputer, dan banyak inovasi
dan peristiwa penting lainnya terjadi dalam sejarah komputasi yang tidak
dapat dicakup dalam rangkuman ini.
Sejarah Perkembangan Algoritma
Sejarah perkembangan algoritma sangat panjang dan melibatkan berbagai
perubahan signifikan sepanjang waktu. Berikut adalah beberapa tonggak
sejarah penting dalam perkembangan algoritma:1. Zaman Kuno:

 Algoritma pertama yang dikenal berasal dari peradaban Mesir Kuno,


seperti Algoritma Matematika Rhind yang berasal dari sekitar 1650 SM.
Algoritma ini digunakan untuk melakukan operasi matematika dasar.

2. Zaman Yunani Kuno:

 Matematikawan Yunani seperti Euclid dan Eukleides mengembangkan


berbagai algoritma geometri dan matematika pada abad ke-3 hingga ke-
4 SM. Euclid, misalnya, dikenal karena "Elemen," yang berisi algoritma
dan aksioma geometri dasar.

3. Abad Pertengahan:

 Di abad pertengahan, matematikawan seperti Fibonacci


mengembangkan algoritma untuk menghitung deret Fibonacci, yang
menjadi dasar bagi banyak konsep dalam ilmu komputer modern.

4. Abad ke-17 dan ke-18:

 Matematikawan seperti Blaise Pascal dan Gottfried Leibniz


mengembangkan mesin-mesin hitung mekanis awal yang dapat
dianggap sebagai prekursor komputer. Mereka juga mengembangkan
algoritma untuk melakukan operasi matematika dengan mesin-mesin ini.

5. Abad ke-19:

 Matematikawan Inggris, George Boole, mengembangkan aljabar


Boolean, yang menjadi dasar logika komputer. Charles Babbage
merancang mesin analitik, yang dianggap sebagai komputer mekanis
pertama. Ada juga perkembangan dalam algoritma numerik dan
statistik.

6. Abad ke-20:

 Abad ini melihat perkembangan besar dalam ilmu komputer dan


algoritma. Alan Turing mengembangkan mesin Turing, yang membantu
mendefinisikan konsep komputasi dan algoritma. Selama Perang Dunia
II, komputer-komputer pertama digunakan untuk memecahkan kode-
kode musuh.
 John von Neumann mengembangkan konsep arsitektur von Neumann,
yang menjadi dasar bagi sebagian besar komputer modern.
 Pada tahun 1950-an, John McCarthy mengembangkan bahasa
pemrograman Lisp, yang memainkan peran penting dalam
perkembangan kecerdasan buatan.
 Pada tahun 1960-an dan 1970-an, Algoritma Dijkstra dan Algoritma
Bellman-Ford dikembangkan untuk memecahkan masalah perutean
dalam jaringan komunikasi.
 Perkembangan komputer pribadi dan mikroprosesor pada tahun 1970-
an membuka pintu bagi komputasi pribadi dan perkembangan algoritma
yang lebih luas.

7. Abad ke-21:

 Era komputasi awan dan perangkat seluler telah membawa perubahan


besar dalam pengembangan algoritma, dengan penekanan pada
pengolahan data besar, kecerdasan buatan, pembelajaran mesin, dan
analisis data.

Perkembangan algoritma terus berlanjut seiring waktu, dengan peran yang


semakin penting dalam berbagai aspek kehidupan manusia. Teknologi terus
berkembang, dan algoritma terus disempurnakan untuk menyelesaikan
berbagai tugas dan masalah yang semakin kompleks.
Pada abad ke-17, matematikawan Isaac Newton dan Gottfried Wilhelm Leibniz
memperkenalkan konsep dasar algoritma. Digunakan untuk menyelesaikan
masalah matematika melalui pengembangan notasi matematika.

Di abad ke-19, algoritma mulai digunakan dalam bidang komputer, dengan


pengembangan mesin Analytical Engine oleh Charles Babbage. Algoritma
menjadi dasar bagi perkembangan komputer dan pemrograman. Namun
seiring waktu algoritma semakin canggih dan banyak digunakan dalam
berbagai bidang, seperti komunikasi, pembelajaran mesin, dan pengolahan
data.

Seiring perkembangan teknologi dan kemajuan ilmu komputer, algoritma


menjadi lebih kompleks dan banyak digunakan untuk menyelesaikan masalah-
masalah yang lebih sulit. Algoritma saat ini memegang peran penting dalam
banyak bidang, termasuk ekonomi, keamanan informasi, dan bahkan
kesehatan.

Secara umum, sejarah algoritma adalah sejarah evolusi dari konsep


matematika kuno menjadi teknologi modern yang penting dan sangat berguna
dalam berbagai bidang.

E. SEJARAH

Konsep algoritma telah ada sejak zaman prasejarah. Algoritma aritmatika,


seperti algoritma divisi, digunakan oleh matematikawan Babilonia kuno sekitar
tahun 2500 SM dan matematikawan Mesir sekitar tahun 1550 SM.
Matematikawan Yunani kemudian juga menggunakan algoritma pada 240 SM
sebagaimana yang terdapat pada Tapis Eratosthenes untuk menemukan
bilangan prima, dan Algoritma Euklides untuk menemukan pembagi
persekutuan terbesar dari dua bilangan.[10] Matematikawan Arab seperti al-
Kindi pada abad ke-9 menggunakan algoritma kriptografi untuk pemecahan
kode, berdasarkan analisis frekuensi.
Kata algoritma berasal dari nama matematikawan Persia abad ke-
9, Muḥammad bin Mūsā al-Khwārizmī, yang nisbah-nya (yang
mengidentifikasikannya sebagai seseorang yang berasal dari Khwarezmia)
dilatinkan sebagai Algoritmi (bahasa Persia yang diarabkan: ‫ الخوارزمی‬sekitar:
780-850).[11][12] Namanya bermakna 'yang berasal dari (daerah) Khwarezmia',
sebuah daerah yang dulunya merupakan bagian dari Iran Raya dan sekarang
sebagai bagian dari Uzbekistan.[13][14] Sekitar tahun 825, Al-Khwarizmi menulis
sebuah risalah berbahasa Arab tentang sistem angka Hindu-Arab, yang
diterjemahkan ke dalam bahasa Latin selama abad ke-12. Naskah ini dimulai
dengan frasa Dixit Algorizmi ('Maka berkatalah Al-Khwarizmi'), di mana
"Algorizmi" di sini adalah Latinisasi penerjemah akan nama Al-Khwarizmi.
[15]
Bukunya yang bernama Aljabar menjadi salah satu buku matematikawan
yang paling banyak dibaca di Eropa pada abad pertengahan.[16] Dalam bahasa
Latin abad pertengahan, kata algorismus, yang merupakan pengadaptasian
dari namanya, menjadi kata yang bermakna "sistem bilangan desimal". [17] Pada
abad ke-15, di bawah pengaruh kata Yunani ἀριθμός (arithmos), 'angka' (lih.
'aritmatika'), kata Latin-nya diubah menjadi algorithmus.[18] Dalam bahasa
Inggris, kata algorithm pertama kali digunakan pada sekitar tahun 1230 dan
kemudian oleh Chaucer pada 1391. Bahasa Inggris mengadopsi istilah tersebut
dari bahasa Prancis, akan tetapi baru pada abad ke-19 lah kata "algorithm"
mulai memiliki makna seperti sekarang yang ada dalam bahasa Inggris modern.
[19]

DAFTAR PUSAKA
https://www.gramedia.com/literasi/pengertian-algoritma/ “dibaca pada
pukul 19.23 . 11-10-2023

https://uici.ac.id/mengenal-ilmuwan-muslim-penemu-algoritma-al-
khawarizmi/ “ Dibaca pada pukul 19.33

https://mahasiswa.ung.ac.id/411422029/home/2023/9/6/sejarah-
perkembangan-komputer-dan-algoritma.html “ dibaca pada pukul 19.40

https://lamnesia.com/pengertian-dan-sejarah-algoritma/ dibaca pada pukul


19.55

https://id.wikipedia.org/wiki/Algoritma Dibaca pada pukul 20.05

https://www.jstor.org/stable/2371045 DIBACA PADA PUKUL 20.45

https://elib.unikom.ac.id/files/disk1/575/jbptunikompp-gdl-tetennugra-
28748-9-unikom_t-2.pdf dibaca pada pukul 10.13

https://bamai.uma.ac.id/2021/07/30/al-khawarizmi-bapak-algoritma-dan-
penemu-aljabar/ dibaca pada pukul 15.34

https://www.academia.edu/9457589/sejarah_algoritma dibaca pada pukul


19.22
https://www.cnbcindonesia.com/tech/20220501161439-37-336392/jreng-
google-facebook-cs-wajib-ungkap-algoritmanya-di-eropa dibaca pada pukul
20.01

https://www.coe.int/en/web/freedom-expression/algorithms-and-human-
rights . dibaca pada pukul 20.30
TUGAS 1

ALGORITMA DAN PEMROGRAMAN

S1 TEKNIK ELEKTRO

Nama : Seja sastrianto


NIM : 202311299
Kelas :D

INSTITUT TEKNOLOGI PLN JAKARTA

2023

TUGAS 1

ALGORITMA DAN PEMROGRAMAN

S1 TEKNIK ELEKTRO
Nama : Reski afiv maulana
NIM : 202311299
Kelas : D

INSTITUT TEKNOLOGI PLN JAKARTA

2023

Anda mungkin juga menyukai