In mathematics and computer science, an algorithm ( ) is a finite sequence of mathematically rigorous instructions, typically used to solve a class of specific problems or to perform a computation.
Dalam matematika dan ilmu komputer, algoritma adalah rangkaian terbatas dari instruksi-instruksi yang rumit, biasanya digunakan untuk menyelesaikan atau menjalankan suatu kelompok masalah komputasi tertentu.
Algorithms are used as specifications for performing calculations and data processing.
Algoritma digunakan sebagai spesifikasi untuk melakukan perhitungan dan pemrosesan data.
More advanced algorithms can use conditionals to divert the code execution through various routes (referred to as automated decision-making) and deduce valid inferences (referred to as automated reasoning).
Algoritma yang lebih mutakhir dapat melakukan deduksi otomatis (disebut sebagai penalaran otomatis) dan menggunakan tes matematis dan logis untuk mengarahkan eksekusi kode melalui berbagai rute (disebut sebagai pengambilan keputusan otomatis).
As an effective method, an algorithm can be expressed within a finite amount of space and time and in a well-defined formal language for calculating a function.
Sebagai metode yang efektif, algoritma dapat diekspresikan dalam jumlah ruang dan waktu yang terbatas, dan dalam bahasa formal yang terdefinisi dengan baik untuk menghitung suatu fungsi.
The transition from one state to the next is not necessarily deterministic; some algorithms, known as randomized algorithms, incorporate random input.
tataran berikutnya tidak selalu baku; beberapa algoritma, yang dikenal sebagai algoritma acak, menggabungkan input acak.
Here, alghoarismi or algorismi is the Latinization of Al-Khwarizmi's name; the text starts with the phrase Dixit Algorismi, or "Thus spoke Al-Khwarizmi".
Naskah ini dimulai dengan frasa Dixit Algorizmi ('Maka berkatalah Al-Khwarizmi'), di mana "Algorizmi" di sini adalah Latinisasi penerjemah akan nama Al-Khwarizmi.
In general, a program is an algorithm only if it stops eventually—even though infinite loops may sometimes prove desirable.
Secara umum, sebuah program hanyalah sebuah algoritma jika ia akan berhenti nantinya.
The earliest evidence of algorithms is found in ancient Mesopotamian mathematics.
Bukti terawal tentang algoritma ditemukan dalam matematika Babilonia di Mesopotamia kuno (saat ini merupakan bagian dari Irak).
A Sumerian clay tablet found in Shuruppak near Baghdad and dated to c. 2500 BC describes the earliest division algorithm.
Sebuah tablet tanah liat Sumeria yang ditemukan di Shuruppak dekat Baghdad dan berasal dari sekitar tahun 2500 SM menjelaskan algoritma divisi yang paling awal.
During the Hammurabi dynasty c. 1800 – c. 1600 BC, Babylonian clay tablets described algorithms for computing formulas.
Selama dinasti Hammurabi sekitar 1800-1600 SM, tablet tanah liat Babilonia menjabarkan algoritma untuk rumus-rumus komputasi.
Algorithms were also used in Babylonian astronomy.
Algoritma juga digunakan dalam astronomi Babilonia.
Babylonian clay tablets describe and employ algorithmic procedures to compute the time and place of significant astronomical events.
Tablet tanah liat Babilonia menguraikan dan menggunakan prosedur algoritmik untuk menghitung waktu dan tempat peristiwa astronomi yang signifikan.
Algorithms for arithmetic are also found in ancient Egyptian mathematics, dating back to the Rhind Mathematical Papyrus c. 1550 BC.
Algoritma untuk aritmetika juga ditemukan dalam matematika Mesir kuno, yang terdapat pada Papirus Matematika Rhind yang berasar dari sekitar tahun 1550
Algorithms were later used in ancient Hellenistic mathematics.
Algoritma kemudian digunakan dalam matematika Helenistik kuno.
"The accurate automatic machine" led immediately to "mechanical automata" in the 13th century and "computational machines"—the difference and analytical engines of Charles Babbage and Ada Lovelace in the mid-19th century.
"Mesin otomatis yang akurat" 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.
Lovelace designed the first algorithm intended for processing on a computer, Babbage's analytical engine, which is the first device considered a real Turing-complete computer instead of just a calculator.
Lovelace dikreditkan sebagai yang pertama menciptakan algoritma 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.
Then came the teleprinter (c. 1910) with its punched-paper use of Baudot code on tape.
Kemudian muncullah teleprinter (sekitar 1910-an) dengan kerta-berlobang menggunakan kode Baudot di pita.
These led to the invention of the digital adding device by George Stibitz in 1937.
adalah karya dair George Stibitz (1937), penemu dari perangkat penghitungan digital.
While working in Bell Laboratories, he observed the "burdensome" use of mechanical calculators with gears.
Saat bekerja di laboratorium Bell, dia mengamati "beratnya" penggunaan kalkulator mekanis dengan geligi.
"He went home one evening in 1937 intending to test his idea...
"Dia pulang ke rumah pada suatu malam 1937 berniat untuk menguji idenya ...
In 1928, a partial formalization of the modern concept of algorithms began with attempts to solve the Entscheidungsproblem (decision problem) posed by David Hilbert.
Formalisasi parsial dari konsep algoritma modern dimulai dengan upaya untuk memecahkan Entscheidungsproblem (masalah pengambilan keputusan) yang diajukan oleh David Hilbert pada tahun 1928.
Those formalizations included the Gödel–Herbrand–Kleene recursive functions of 1930, 1934 and 1935, Alonzo Church's lambda calculus of 1936, Emil Post's Formulation 1 of 1936, and Alan Turing's Turing machines of 1936–37 and 1939.
Formalisasi tersebut termasuk fungsi rekursif Gödel-Herbrand-Kleene pada tahun 1930, 1934 dan 1935, kalkulus lambda Alonzo Church pada tahun 1936, Formulasi 1 Emil Post pada tahun 1936, dan mesin Turing-nya Alan Turing pada tahun 1936-37 dan 1939.
Natural language expressions of algorithms tend to be verbose and ambiguous and are rarely used for complex or technical algorithms.
Ekspresi bahasa alamiah terhadap algoritma condong lebih banyak dan rancu, dan jarang digunakan untuk algoritma yang kompleks dan teknis.
Programming languages are primarily for expressing algorithms in a computer-executable form but are also used to define or document algorithms.
Bahasa pemrograman ditujukan untuk mengekspresikan algoritma dalam sebuah bentuk yang dapat dieksekusi oleh komputer, tetapi sering kali digunakan sebagai suatu cara untuk menentukan atau mendokumentasikan algoritma.
There are many possible representations and Turing machine programs can be expressed as a sequence of machine tables (see finite-state machine, state-transition table, and control table for more), as flowcharts and drakon-charts (see state diagram for more), as a form of rudimentary machine code or assembly code called "sets of quadruples", and more.
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).
Algorithm representations can also be classified into three accepted levels of Turing machine description: high-level description, implementation description, and formal description.
Representasi dari algoritma dapat dikelompokan ke dalam tiga tingkatan dari deskripsi mesin Turing: 1 Deskripsi tingkat-tinggi "... ditujukan untuk menjelaskan algoritma, menghiraukan rincian implementasi.
It is often important to know how much time, storage, or other cost an algorithm may require.
Sangat penting untuk mengetahui berapa banyak sumber tertentu (seperti waktu dan tempat penyimpanan) secara teoretis diperlukan untuk sebuah algoritma.
Methods have been developed for the analysis of algorithms to obtain such quantitative answers (estimates); for example, an algorithm that adds up the elements of a list of n numbers would have a time requirement of ⁠ O ( n ) ⁠, using big O notation.
Metode-metode telah dikembangkan untuk analisis algoritma untuk mendapatkan jawaban kuantitatif (estimasi); sebagai contohnya, algoritma pengurutan di atas memerlukan waktu O(n), menggunakan notasi O besar dengan n sebagai panjang deret (yang akan diurut).
If the space required to store the input numbers is not counted, it has a space requirement of ⁠ O ( 1 ) ⁠, otherwise ⁠ O ( n ) ⁠ is required.
Oleh karena itu dikatakan memiliki kebutuhan ruang O(1), jika ruang yang dibutuhkan untuk menyimpan angka masukan tidak dihitung, atau O(n) jika dihitung.
Different algorithms may complete the same task with a different set of instructions in less or more time, space, or 'effort' than others.
Algoritma berbeda mungkin menyelesaikan pekerjaan yang sama dengan kumpulan instruksi yang berbeda dengan waktu, ruang, atau 'usaha' lebih sedikit atau banyak dari yang lain.
Algorithms are often studied abstractly, without referencing any specific programming language or implementation.
Analisis dan kajian algoritma adalah bidang dari ilmu komputer, dan biasanya dilakukan secara abstrak tanpa menggunakan bahasa pemrograman tertentu atau implementasi.
Algorithm analysis resembles other mathematical disciplines as it focuses on the algorithm's properties, not implementation.
Dalam artian, analisis algoritma mirip dengan bidang matematika lainnya yang mana fokus pada properti yang mendasari algoritma dan bukan pada implementasi tertentu.
Pseudocode is typical for analysis as it is a simple and general representation.
Biasanya pseudokode digunakan pada analisis karena merupakan representasi paling umum dan sederhana.
Most algorithms are implemented on particular hardware/software platforms and their algorithmic efficiency is tested using real code.
Namun, pada akhirnya, kebanyakan algoritma diimplementasikan di perangkat keras / lunak tertentu dan efisiensi algoritmik mereka akhirnya diuji menggunakan kode yang sebenarnya.
The efficiency of a particular algorithm may be insignificant for many "one-off" problems but it may be critical for algorithms designed for fast interactive, commercial, or long-life scientific usage.
Untuk solusi dari sebuah masalah, efisiensi dari algoritma tertentu mungkin tidak terlalu berpengaruh (kecuali n sangat besar) tetapi bagi algoritma yang dirancang untuk kecepatan interaktif, komersial, atau penggunaan ilmiah jangka panjang ia bisa saja kritikal.
Scaling from small n to large n frequently exposes inefficient algorithms that are otherwise benign.
Meningkatkan n dari kecil ke n yang besar biasanya menunjukan ketak efisienan algoritma yang tidak berbahaya.
Empirical testing is useful for uncovering unexpected interactions that affect performance.
Pengujian empiris berguna karena bisa membuka interaksi tak terduga yang memengaruhi performa.
Benchmarks may be used to compare before/after potential improvements to an algorithm after program optimization.
Benchmark bisa digunakan untuk membandingkan potensi kenaikan sebelum/sesudah algoritma setelah optimisasi program dilakukan.
To illustrate the potential improvements possible even in well-established algorithms, a recent significant innovation, relating to FFT algorithms (used heavily in the field of image processing), can decrease processing time up to 1,000 times for applications like medical imaging.
Untuk menggambarkan kemungkinan potensi peningkatan bahkan pada algoritma yang sudah teruji, inovasi terbaru, berkaitan dengan algoritma FFT (banyak digunakan di bidang pemrosesan gambar), bisa menurunkan waktu pemrosesan dengan faktor sampai 1.000 untuk aplikasi seperti pencitraan medis.
Speedups of this magnitude enable computing devices that make extensive use of image processing (like digital cameras and medical equipment) to consume less power.
Percepatan dengan tingkat seperti itu membolehkan perangkat komputasi yang sering menggunakan pemrosesan gambar (seperti kamera digital dan peralatan medis) menghabiskan daya yang lebih sedikit.
However, Kemeny and Kurtz observe that, while "undisciplined" use of unconditional GOTOs and conditional IF-THEN GOTOs can result in "spaghetti code", a programmer can write structured programs using only these instructions; on the other hand "it is also possible, and not too hard, to write badly structured programs in a structured language".
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".
Tausworthe augments the three Böhm-Jacopini canonical structures: SEQUENCE, IF-THEN-ELSE, and WHILE-DO, with two more: DO-WHILE and CASE.
Tausworthe menambahkan tiga struktur kanon Bohm-Jacopini: SEQUENCE, IF-THEN-ELSE, dan WHILE-DO, dengan dua lagi: DO-WHILE dan CASE.
An additional benefit of a structured program is that it lends itself to proofs of correctness using mathematical induction.
Keuntungan dari program terstruktur adalah ia cocok dengan pembuktian kebenaran menggunakan induksi matematika.
In the United States, a claim consisting solely of simple manipulations of abstract concepts, numbers, or signals does not constitute "processes" (USPTO 2006), so algorithms are not patentable (as in Gottschalk v. Benson).
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 algoritma tidak bisa dipatenkan (sebagaimana dalam Gottschalk v. Benson).
Additionally, some cryptographic algorithms have export restrictions (see export of cryptography).
Sebagai tambahan, beberapa algoritma kriptografi memiliki batasan ekspor (lihat ekspor dari kriptografi).
Problems may be suited for one implementation or the other.
Beberapa masalah secara alami cocok dengan satu implementasi atau lainnya.
Serial, parallel or distributed Algorithms are usually discussed with the assumption that computers execute one instruction of an algorithm at a time on serial computers.
Serial, paralel atau terdistribusi Algoritma biasanya dibicarakan dengan asumsi bahwa komputer menjalankan satu instruksi algoritma setiap waktu.
Parallel algorithms take advantage of computer architectures where multiple processors can work on a problem at the same time.
Algoritma paralel memanfaatkan arsitektur komputer yang mana beberapa prosesor bisa mengerjakan masalah pada waktu yang sama, selain itu algoritma terdistribusi memanfaatkan banyak mesin yang terhubung dengan jaringan.
Parallel and distributed algorithms divide the problem into subproblems and collect the results back together.
Algoritma paralel atau terdistribusi membagi masalah menjadi banyak sub-masalah simetris atau asimetris dan mengumpulkan hasilnya kembali.
Resource consumption in these algorithms is not only processor cycles on each processor but also the communication overhead between the processors.
Konsumsi sumber pada algoritma tersebut tidak hanya perputaran prosesor disetiap prosesor tetapi juga daya komunikasi antara prosesor.
Deterministic or non-deterministic Deterministic algorithms solve the problem with exact decisions at every step; whereas non-deterministic algorithms solve problems via guessing.
Deterministik atau non-deterministik Algoritma deterministik menyelesaikan masalah dengan keputusan yang tepat disetiap langkah dari algoritma sedangkan algoritma non-deterministik menyelesaikan masalah lewat penerkaan walaupun penerkaan biasanya lebih akurat dengan menggunakan heuristik.
Such algorithms have practical value for many hard problems.
Algoritma seperti itu memiliki nilai guna untuk banyak masalah sulit.
Quantum algorithm Quantum algorithms run on a realistic model of quantum computation.
Algoritma quantum Berjalan di model realistik dari komputasi quantum.
The term is usually used for those algorithms that seem inherently quantum or use some essential feature of Quantum computing such as quantum superposition or quantum entanglement.
Istilah ini biasanya digunakan untuk algoritma yang tampak pada dasarnya quantum, atau menggunakan beberapa fitur penting komputasi quantum seperti superposisi quantum atau belitan quantum.
Another way of classifying algorithms is by their design methodology or paradigm.
Cara lain mengklasifikasikan algoritma adalah dengan metodologi rancangannya atau paradigma.
Divide and conquer A divide-and-conquer algorithm repeatedly reduces a problem to one or more smaller instances of itself (usually recursively) until the instances are small enough to solve easily.
Membagi dan menaklukan (Divide and conqueror) Algoritma 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.
An example of a prune and search algorithm is the binary search algorithm.
Sebuah contoh dari algoritma kurang-dan-taklukan adalah algoritma pencarian binari.
Search and enumeration Many problems (such as playing chess) can be modelled as problems on graphs.
Pencarian dan enumerasi Banyak masalah (seperti bermain catur) bisa dimodelkan sebagai masalah dalam grafik.
A graph exploration algorithm specifies rules for moving around a graph and is useful for such problems.
Sebuah algoritma eksplorasi grafik menentukan aturan-aturan untuk bergerak disekitar grafik dan berguna bagi masalah tersebut.
This category also includes search algorithms, branch and bound enumeration, and backtracking.
Kategori ini juga mengikutkan algoritma pencarian, enumerasi batas dan cabang dan backtracking.
Randomized algorithm Such algorithms make some choices randomly (or pseudo-randomly).
Algoritma pengacakan Algoritma ini membuat pilihan secara acak (atau pseudo-acak).
They find approximate solutions when finding exact solutions may be impractical (see heuristic method below).
Ia sangat berguna untuk menemukan solusi perkiraan untuk masalah di mana solusi yang pasti tidak praktis (lihat metode heuristik di bawah).
Whether randomized algorithms with polynomial time complexity can be the fastest algorithm for some problems is an open question known as the P versus NP problem.
Apakah algoritma pengacakan dengan kompleksitas waktu polinomial bisa menjadi algoritma tercepat untuk beberapa masalah masih menjadi pertanyaan terbukan yang dikenal sebagai Masalah P versus NP.
There are two large classes of such algorithms: Monte Carlo algorithms return a correct answer with high probability.
Ada dua kelas besar dari algoritma ini: Algoritma Monte Carlo mengembalikan jawaban yang benar dengan probabilitas-tinggi.
E.g. RP is the subclass of these that run in polynomial time.
Misalnya, RP adalah sub-klas dari algoritma ini yang berjalan dalam waktu polinomial)
Las Vegas algorithms always return the correct answer, but their running time is only probabilistically bound, e.g. ZPP.
Algoritma Las Vegas selalu mengembalikan jawaban yang benar, tetapi waktu prosesnya adalah hanya terikat secara probabilistik, misalnya ZPP.
Reduction of complexity This technique transforms difficult problems into better-known problems solvable with (hopefully) asymptotically optimal algorithms.
Reduksi Teknik ini menyelesaikan masalah sulit dengan mengubahnya menjadi masalah yang lebih diketahui yang mana kita (berharap) memiliki algoritma asimptotikal optimal.
The goal is to find a reducing algorithm whose complexity is not dominated by the resulting reduced algorithms.
Tujuannya yaitu untuk menemukan sebuah algoritma reduksi yang kompleksitasnya tidak didominasi oleh algoritma hasil reduksi.
For example, one selection algorithm finds the median of an unsorted list by first sorting the list (the expensive portion), and then pulling out the middle element in the sorted list (the cheap portion).
Sebagai contoh, algoritma 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).
For optimization problems there is a more specific classification of algorithms; an algorithm for such problems may fall into one or more of the general categories described above as well as into one of the following: Linear programming When searching for optimal solutions to a linear function bound by linear equality and inequality constraints, the constraints can be used directly to produce optimal solutions.
Pemrograman Linear Saat mencari solusi optimal terhadap sebuah fungsi linear yang terikat persamaan linear dan ketidaksamaan konstrain, batasan dari masalah bisa digunakan secara langsung untuk menghasilkan solusi optimal.
There are algorithms that can solve any problem in this category, such as the popular simplex algorithm.
Ada algoritma yang dapat memecahkan setiap masalah dalam kategori ini, seperti algoritma simpleks yang terkenal.
Problems that can be solved with linear programming include the maximum flow problem for directed graphs.
Masalah yang dapat diselesaikan dengan pemrograman linear termasuk permasalahan alur maksimum untuk grafik terarah).
A linear programming algorithm can solve such a problem if it can be proved that all restrictions for integer values are superficial, i.e., the solutions satisfy these restrictions anyway.
Algoritma pemrograman linear dapat menyelesaikan masalah seperti itu jika dapat dibuktikan bahwa semua batasan untuk nilai integer adalah tidak benar, yaitu solusi memenuhi batasan tersebut.
In the general case, a specialized algorithm or an algorithm that finds approximate solutions is used, depending on the difficulty of the problem.
Pada kasus umum, algoritma yang dikhususkan atau algoritma yang menemukan solusi perkiraan digunakan, bergantung pada kesulitan dari masalah.
Dynamic programming When a problem shows optimal substructures—meaning the optimal solution can be constructed from optimal solutions to subproblems—and overlapping subproblems, meaning the same subproblems are used to solve many different problem instances, a quicker approach called dynamic programming avoids recomputing solutions.
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.
Using memoization dynamic programming reduces the complexity of many problems from exponential to polynomial.
Dengan menggunakan memoisasi atau tabel dari submasalah yang telah diselesaikan, pemrograman dinamis mereduksi eksponensial dari banyak masalah menjadi kompleksitas polinomial.
The heuristic method In optimization problems, heuristic algorithms find solutions close to the optimal solution when finding the optimal solution is impractical.
Metode heuristik Dalam masalah optimisasi, algoritma heuristik bisa digunakan untuk menemukan suatu solusi yang terdekat dengan solusi optimal jika seandainya menemukan solusi optimal tidak praktis.
In principle, if run for an infinite amount of time, they will find the optimal solution.
Secara prinsipnya, jika dijalankan tanpa batas waktu, ia akan menemukan solusi optimal.
They can ideally find a solution very close to the optimal solution in a relatively short time.
Kebaikan mereka adalah mereka dapat menemukan suatu solusi sangat dekat dengan solusi optimal dalam waktu yang relatif sangat pendek.
These algorithms include local search, tabu search, simulated annealing, and genetic algorithms.
Algoritma tersebut termasuk pencarian lokal, pencarian tabu, simulasi pelunakan, dan algoritma genetik.
When there are no unchecked numbers left in the set, consider the current largest number to be the largest in the set.
Bila tidak ada lagi angka yang tersisa pada deret untuk diperiksa, anggap angka terbesar sekarang menjadi angka yang terbesar dalam deret.
(Quasi-)formal description: Written in prose but much closer to the high-level language of a computer program, the following is the more formal coding of the algorithm in pseudocode or pidgin code:
Ditulis dalam kalimat yang lebih dekat dengan bahasa tingkat-tinggi dari program komputer, berikut ini adalah kode formal dari algoritma dalam pseudokode atau kode pijin: