Apa Yang Dimaksud Dengan Kompleksitas
Penjelasan Tersisa Tentang Time Complexity dan Big-O Notation
Every good programmer will use the most effective and efficient ways to solve their problem. And to do that, we must know how to minimize the complexity.
Setiap
programmer
yang baik akan menggunakan cara yang minimum efektif dan efisien dalam membereskan suatu permasalahan. Dan untuk bisa melakukan hal tersebut,
kita harus bisa meminimalisir kekacauan dari algoritma nan kita gunakan.
Kompleksitas suatu algoritma dibagi menjadi 2, adalah
Time Complexity
dan
Space Complexity
.
Time Complexity
ialah seberapa lama waktu yang diperlukan lakukan menjalankan satu algoritma. Padahal
Space Complexity
adalah seberapa besar memori yang kita gunakan lakukan menjalankan suatu algoritma. Dan disini kita hanya akan menggunjingkan tentang
Time Complexity.
Algoritma
Sebelum kita melanjutkan pembahasan, kita harus mengerti dulu apa itu
algoritma/keistimewaan.
A̶l̶g̶o̶r̶i̶t̶h̶m̶ ̶i̶s̶ ̶a̶ ̶w̶o̶r̶d̶ ̶u̶s̶e̶d̶ ̶b̶y̶ ̶p̶r̶o̶g̶r̶a̶m̶m̶e̶r̶s̶ ̶w̶h̶e̶n̶ ̶t̶h̶e̶y̶ ̶d̶o̶n̶’̶t̶ ̶w̶a̶n̶t̶ ̶t̶o̶ ̶e̶x̶p̶l̶a̶i̶n̶ ̶w̶h̶a̶t̶ ̶t̶h̶e̶y̶ ̶d̶i̶d̶.̶
Algorithm is a process or set of rules to be followed in calculations or other kebobrokan-solving operations, especially by a computer.
Sederhananya, algoritma adalah serangkaian proses yang dilakukan secara berurutan bikin tanggulang sebuah permasalahan. Algoritma bisa bermacam-macam tersangkut kepada siapa nan membuat algoritma tersebut. Namun permasalahannya ialah
algoritma mana nan lebih efektif dan efisien?
Begitu juga halnya yang pelahap kita hadapi dalam permasalahan sehari-waktu, ketika kita akan berpergian ke suatu tempat. Kita tahu terserah banyak jalan yang bisa dilalui untuk bisa sebatas di tempat intensi, namun permasalahannya merupakan
rute mana yang paling cepat yang bisa kita ambil bikin hingga di ajang tujuan?
Time Complexity Analysis
merupakan
suatu cara sederhana untuk mengetahui berapa lama waktu yang dibutuhkan untuk menjalankan satu algoritma dengan input tertentu (n). Kebanyakan lebih dikenal dengan sebutan
Big-Ozon Notation.
Big O Notation
digunakan untuk tingkat kekacauan suatu algoritma.
So, What’s Big-Udara murni Notation?
Big-Udara murni notation is a way of converting the overall steps of an algorithm into algebraic terms, then excluding lower antaran constants and coefficients that don’t have that big an impact on the overall complexity of the ki aib.
Big-O Notation
yaitu cara bakal mengkonversi keseluruhan langkah-langkah suatu algoritma kedalam bentuk
Aljabar, ialah dengan mengindahkan konstanta yang lebih kecil dan koefisien yang tidak bertelur besar terhadap keseluruhan kompleksitas permasalahan yang diselesaikan maka dari itu algoritma tersebut.
Silakan kita liat acuan dibawah ini:
Regular Big-O 2 Ozon(1) --> It's just a constant number 2n + 10 O(falak) --> n has the largest effect 5n^2 Udara murni(n^2) --> tepi langit^2 has the largest effect
Sederhananya, semua teladan nan ada diatas mengatakan bahwa “
kita hanya akan menyibuk faktor yang punya dampak paling lautan terhadap ponten yang dihasilkan makanya algoritma tersebut
”.
Terwalak bilang macam
time complexity, diantaranya:
O(1) — Constant Time
Ozon(1) — Constant Time: Given an input of size n, it only takes a single step for the algorithm to accomplish the task.
Constant Time
artinya banyaknya input yang diberikan kepada sebuah algoritma, tidak akan mempengaruhi musim proses (runtime) dari algoritma tersebut.
let myArray = [1, 5, 0, 6, 1, 9, 9, 2];
function getFirst(input){ return input[0]; // selalu mengerjakan 1 langkah } let firstEl = getFirst(myArray);
Contoh diatas, terdapat sebuah kekuatan cak bagi mengambil elemen pertama bermula sebuah input array. Kita dapat melihat bahwa berapapun jumlah array yang diberikan kepada fungsi tersebut, dia akan selalu melakukan 1 hal, yaitu mengambil anasir pertama. Itu artinya
jumlah input yang diberikan tidak mempengaruhi tahun proses (runtime) pecah algoritma tersebut.
Ozon(log t) — Logarithmic Time
O(log n) — Logarithmic time: given an input of size n, the number of steps it takes to accomplish the task are decreased by some factor with each step.
Logarithmic Time
artinya detik kita memasrahkan input sebesar
cakrawala
terhadap sebuah fungsi, total strata yang dilakukan oleh manfaat tersebut berkurang berlandaskan suatu faktor. Salah satu contohnya merupakan algoritma
Binary Search.
Binary Search
yaitu algoritma yang kita gunakan dalam mencari posisi nilai berpokok suatu array dengan pendirian ‘mengeliminasi’ sekerat dari array input lakukan mempercepat proses penguberan.
let sortedArray = [11, 24, 30, 43, 51, 61, 73, 86];
function isExists(number, array){ var midPoint = Math.floor( array.length /2 ); if( array[midPoint] === num) return true; let isFirstHalf = false; if( array[midPoint] < num ) isFirstHalf = true;else if( array[midpoint] > num ) isFirstHalf = false;
if (array.length == 1) return false; else { // memanggil maslahat nan sama dengan mengeleminiasi setengah dari input array if (isFirstHalf)
return isExists(number, getFirstHalf(array));
else
return isExists(number, getSecondHalf(array)); } } isExists (24, sortedArray); // return true isExists (27, sortedArray); // return false
Note: Kekuatan rekursif umumnya Logarithmic
Udara murni(kaki langit) — Linear Time
O(n) — Linear Time: Given an input of size n, the number of of steps required is directly related (1 to 1)
Linear Time
yakni ketika
runtime
terbit fungsi kita berbanding literal dengan kuantitas input yang diberikan.
let myArray = [1, 5, 0, 6, 1, 9, 9, 2];
function getMax(input){
var max = 0; for (var i=0; i<input.length; i++){ if (max < input[i])
max = input[i]; }
return max; } let maxNumber = getMax(myArray);
Kita bisa melihat bahwa
semakin banyak jumlah input yang diberikan, maka masa proses/runtime
dari faedah tersebut akan semakin besar.
Udara murni(n²) — Quadratic Time
Ozon(n²) — Quadratic Time: Given an input of size n, the number of steps it takes to accomplish a task is square of n.
Quadratic Time
adalah ketika runtime mulai sejak faedah kita adalah sebesar
n^2
, dimana
horizon
yakni besaran input dari faedah tersebut. Hal tersebut bisa terjadi karena kita menjalankan
fungsi linear didalam faedah linear
(n*n).
let myArray = [1, 5, 0, 6, 1, 9, 9, 2];
function sort(input){
var sortedArray = []; for (var i=0; i<input.length; i++){ // Ozon(tepi langit) let min = input[i]; for (var j=i+1; i<input.length; i++){ // O(n) if (input[i] < input[j])
min = input[j]; } sortedArray.push(min); } return sortedArray; } let sortedArray = sort(myArray);
O(2^falak) — Exponential Time
O(2^n) — Exponential Time: Given an input of size lengkung langit, the number of steps it takes to accomplish a task is a constant to the n power (pretty large number).
Exponential Time
biasanya digunakan n domestik situasi dimana kita tidak terlalu senggang terhadap permasalahan yang dihadapi, sehingga mengharuskan kita mencoba setiap
perpautan
dan
permutasi
berasal semua kebolehjadian.
Kesimpulan
Sebagai
programmer, kita sering boleh jadi dihadapkan dengan adanya beberapa solusi lakukan sebuah permasalahan dan kita dibingungkan dengan tanya “
mana solusi yang lebih efisien?
”.
Dengan memahami
Big-O Notation, kita akan bertambah mudah kerumahtanggaan melihat mana algoritma yang lebih efisien nan dapat kita gunakan bikin menyelesaikan permasalahan yang sedang dihadapi.
Source: https://medium.com/bee-solution-partners/penjelasan-sederhana-tentang-time-complexity-dan-big-o-notation-4337ba275cfe