<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luthfi Aji Wicaksono</title>
    <description>The latest articles on DEV Community by Luthfi Aji Wicaksono (@luthfiajiw).</description>
    <link>https://dev.to/luthfiajiw</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F168475%2Fedc4eaf3-8a43-4b3c-9136-0fdb25ed0621.jpeg</url>
      <title>DEV Community: Luthfi Aji Wicaksono</title>
      <link>https://dev.to/luthfiajiw</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/luthfiajiw"/>
    <language>en</language>
    <item>
      <title>Big O: [3] Menghitung Operasi</title>
      <dc:creator>Luthfi Aji Wicaksono</dc:creator>
      <pubDate>Fri, 16 Aug 2019 10:39:40 +0000</pubDate>
      <link>https://dev.to/luthfiajiw/big-o-3-menghitung-operasi-3ndp</link>
      <guid>https://dev.to/luthfiajiw/big-o-3-menghitung-operasi-3ndp</guid>
      <description>&lt;p&gt;Bismillahirrahmaanirrahim,&lt;/p&gt;

&lt;p&gt;Pada artikel &lt;a href="https://dev.to/luthfiajiw/2-pengaturan-waktu-pada-kode-kita-1o28"&gt;sebelumnya&lt;/a&gt; saya katakan bahwa menggunakan waktu dengan bantuan method &lt;code&gt;performance&lt;/code&gt; milik Javascript sebagai tolak ukur merupakan cara yang kurang bisa diandalkan. Lantas jika bukan menggunakan waktu lalu mengunakan apa?&lt;/p&gt;

&lt;p&gt;Jadi begini, pada artikel sebelumnya kita itu ingin mengetahui kode mana yang memiliki waktu proses paling cepat dengan mengukurnya menggunakan waktu juga, waktu diukur dengan waktu.&lt;/p&gt;

&lt;p&gt;Nah, sekarang ini kita tidak melakukan hal itu. Kita akan memprediksi kode mana yang lebih cepat dengan cara &lt;em&gt;menghitung operasi-operasi&lt;/em&gt; pada kode tersebut yang akan dilakukan oleh komputer.&lt;/p&gt;

&lt;p&gt;Yang namanya prediksi kita tidak akan mendapat nilai pasti berapa detik kode tersebut berjalan, namun untungnya kita tidak perlu melakukan serangkaian proses seperti pada artikel sebelumnya, dan untungnya lagi bahwa prediksi yang akan kita lakukan insyaallah 100% akurat.&lt;/p&gt;

&lt;p&gt;Mengapa kita melakukan perhitungan operasi yang dimiliki oleh suatu kode? &lt;br&gt;
Itu karena operasi-operasi yang ada pada kode tersebut selalu memiliki nilai &lt;em&gt;konstan&lt;/em&gt;, tidak seperti waktu yang kadang berubah-ubah.&lt;/p&gt;

&lt;p&gt;Jadi misalkan kita memiliki dua algoritma, yang satu memiliki 5 operasi dan yang satunya lagi memiliki 10 operasi. Maka kita tidak perlu lagi khawatir dengan spesifikasi komputer yang kita gunakan, entah inputan yang diberikan itu bernilai kecil ataupun besar pengaruh eksternal tidak bisa ikut campur lagi di sini.&lt;/p&gt;

&lt;p&gt;Dan, sebuah &lt;code&gt;runtime&lt;/code&gt; akan selalu berbanding lurus dengan jumlah operasi yang dijalankan. &lt;/p&gt;

&lt;p&gt;Langsung saja kita bedah kode dari contoh pada artikel sebelumnya dengan menghitung operasi yang dimiliki oleh masing-masing kode. Dimulai dari sang pemenang,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FoYd6uDX.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FoYd6uDX.png" alt="contoh_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bisa kita lihat, ada 3 operasi yang berjalan pada fungsi di atas. 1 penjumlahan, 1 perkalian dan 1 pembagian. Berapapun nilai &lt;em&gt;n&lt;/em&gt; nya maka operasi yang berjalan tetap 3. Entah itu 100 atau bahkan 1 triliun, operasi yang berjalan akan selalu 3 kali.&lt;/p&gt;

&lt;p&gt;Sekarang kita berpindah ke kode yang ke dua, dan ini dia&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FSrUNXAs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FSrUNXAs.png" alt="contoh_1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Weww&lt;/em&gt;, sekarang kita bedah satu persatu, dimulai dari yang ini,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FJlsbYD0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FJlsbYD0.png" alt="contoh_1.1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yang berbeda pada kode kali ini adalah, kita menggunakan perulangan &lt;code&gt;for&lt;/code&gt;. Maka 2 operasi di atas berjalan bergantung pada variabel &lt;code&gt;n&lt;/code&gt;. Maka dari itu ditulis &lt;em&gt;n Penjumlahan&lt;/em&gt; dan &lt;em&gt;n Pemberian Nilai&lt;/em&gt;. Sebenarnya sintaks &lt;code&gt;jumlah += i&lt;/code&gt; adalah ringkasan dari sintaks &lt;code&gt;jumlah = jumlah + i&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Selanjtunya adalah,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FnBqp8M4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FnBqp8M4.png" alt="contoh_1.2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Operasi yang berada pada &lt;code&gt;i++&lt;/code&gt;. Operasi itu juga sama seperti yang sebelumnya, yakni penjumlahan dan pemberian nilai. Karena &lt;code&gt;i++&lt;/code&gt; merupakan ringkasan dari &lt;code&gt;i = i + 1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Selanjutnya,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Fc2e6nMD.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Fc2e6nMD.png" alt="contoh_1.3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kita memiliki 2 operasi pemberian nilai, operasi ini tidak bergantung pada n karena berada di luar jangkauan perulangan. Operasi ini hanya berjalan satu kali saat fungsi pertama kali dipanggil untuk memberikan nilai awal.&lt;/p&gt;

&lt;p&gt;Dan yang terakhir adalah,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FSrUNXAs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FSrUNXAs.png" alt="contoh_1.4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;n&lt;/em&gt; operasi perbandingan. Operasi ini akan terus membandingkan nilai &lt;em&gt;i&lt;/em&gt; dengan &lt;em&gt;n&lt;/em&gt;, jika masih bernilai &lt;code&gt;true&lt;/code&gt; maka perulangan akan terus berjalan sampai akhirnya perbandingan ini bernilai &lt;code&gt;false&lt;/code&gt; dan perulangan akan berhenti.&lt;/p&gt;

&lt;p&gt;Hmm, lalu jumlah operasi pada kode ini ada berapa?&lt;/p&gt;

&lt;p&gt;Jika sudah seperti ini maka akan sedikit merepotkan karena kita tidak memiliki nilai &lt;em&gt;konstan&lt;/em&gt; seperti pada kode yang pertama tadi. Kita hanya memiliki nilai &lt;em&gt;n&lt;/em&gt; yang sejatinya bukan nilai yang &lt;em&gt;statis&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Maka kita simpulkan dari uraian di atas bahwa jumlah operasi dari perhitungan di atas adalah &lt;code&gt;5n+2&lt;/code&gt;. Dimana ada 5n operasi dan 2 operasi konstan. jika &lt;code&gt;n = 5&lt;/code&gt; maka jumlah operasi dari kode di atas adalah &lt;strong&gt;27&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Selanjutnya kita sederhanakan lagi kesimpulan dari rumus &lt;code&gt;5n+2&lt;/code&gt; di atas. Bahwa sebenarnya nilai pasti seperti &lt;code&gt;5&lt;/code&gt; dan &lt;code&gt;2&lt;/code&gt; itu tidak usah terlalu dipikirkan dan kita hanya berfokus pada pertumbuhan jumlah &lt;em&gt;n&lt;/em&gt; saja. Kita akan melihat teori tentang ini lebih banyak lagi ke depannya.&lt;/p&gt;

&lt;p&gt;Jadi, kesimpulan yang sebenarnya adalah &lt;strong&gt;Pertumbuhan n akan memengaruhi jumlah operasi. Karena jumlah operasi akan selalu berbanding lurus dengan pertumbuhan n&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Oke, cukup sekian dulu pembahasan kali ini. Di artikel selanjutnya kita akan membahas mengenai Time Complexity. &lt;/p&gt;

&lt;p&gt;Jika ada kritik dan saran bisa langsung disampaikan. Terimakasih dan Sampai Jumpa ! :D&lt;/p&gt;

</description>
      <category>bigonotation</category>
      <category>algorithms</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Big O: [2] Pengaturan Waktu Pada Kode Kita</title>
      <dc:creator>Luthfi Aji Wicaksono</dc:creator>
      <pubDate>Thu, 15 Aug 2019 16:56:56 +0000</pubDate>
      <link>https://dev.to/luthfiajiw/2-pengaturan-waktu-pada-kode-kita-1o28</link>
      <guid>https://dev.to/luthfiajiw/2-pengaturan-waktu-pada-kode-kita-1o28</guid>
      <description>&lt;p&gt;Bismillahirrahmanirrahim, Mari kita lanjutkan pembahasan tentang &lt;strong&gt;Big O Notation&lt;/strong&gt; dari artikel sebelumnya. Bagi yang belum membaca artikel sebelumnya mungkin bisa dibaca terlebih dulu : &lt;a href="https://dev.to/luthfiajiw/1-pendahuluan-big-o-4ih2"&gt;Pendahuluan Big O&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sekarang kita akan masuk pada contoh konkrit yang akan sedikit menyenggol &lt;strong&gt;Big O Notation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Contoh:&lt;br&gt;
Kita misalkan bahwa kita akan menulis sebuah fungsi yang akan menjumlahkan  bilangan 1 sampai dengan &lt;em&gt;n&lt;/em&gt;, &lt;em&gt;1+2+3. . .+n&lt;/em&gt; dan satu contoh solusi yang paling mudah dari permasalahan tersebut adalah sebagai berikut:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;jumlahDeret&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;jumlah&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

 &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;jumlah&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="p"&gt;};&lt;/span&gt;

 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;jumlah&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kita men-&lt;em&gt;set&lt;/em&gt; nilai awal dari variabel &lt;code&gt;jumlah&lt;/code&gt; sebesar 0. Kemudian &lt;code&gt;for&lt;/code&gt; akan melakukan perulangan mulai dari bilangan 1 berdasarkan statement &lt;code&gt;var i = 1;&lt;/code&gt; sampai dengan bilangan n berdasarkan statement &lt;code&gt;i &amp;lt;= n;&lt;/code&gt;&lt;br&gt;
dan kemudian pada setiap iterasinya &lt;code&gt;i&lt;/code&gt; akan dijumlahkan dengan variabel &lt;code&gt;jumlah&lt;/code&gt; berdasarkan aksi &lt;code&gt;jumlah += i;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Setelah perulangan selesai maka fungsi akan mengembalikan nilai &lt;code&gt;jumlah&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Selanjutnya kita panggil fungsi tersebut untuk melakukan penjumlahan, untuk melihat hasilnya kita dapat menggunakan &lt;code&gt;console.log&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jumlahDeret&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dan output-nya adalah &lt;strong&gt;6&lt;/strong&gt;, yang berarti 1+2+3.&lt;/p&gt;

&lt;p&gt;Oke, selanjutnya contoh solusi yang kedua adalah sebagai berikut:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;jumlahDeret&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dari contoh yang kedua ini kita bisa melihat banyak sekali perbedaan, bahkan benar-benar berbeda dari contoh yang pertama. Pada contoh yang kedua ini kita tidak menggunakan perulangan, melainkan kita hanya menggunakan formula matematika yaitu &lt;code&gt;n * (n + 1) / 2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Jika kita jalankan dengan memberikan nilai &lt;code&gt;n&lt;/code&gt; yang sama yaitu &lt;strong&gt;3&lt;/strong&gt; maka outputnya pun akan sama, &lt;strong&gt;6&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jumlahDeret&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// 3 * (3 + 1) / 2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nah, di sinilah topik utama pembahasan kita kali ini. Mana solusi yang &lt;em&gt;lebih baik&lt;/em&gt;? Contoh 1 atau Contoh 2 ?&lt;/p&gt;

&lt;p&gt;Sebelum melangkah jauh ke sana, mari kita uraikan lagi tentang arti &lt;em&gt;lebih baik&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Apa yang dimaksud &lt;em&gt;lebih baik&lt;/em&gt; di sini?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apakah maksudnya adalah &lt;em&gt;lebih cepat&lt;/em&gt; saat melakukan penghitungan? bahkan dengan bilangan yang lebih besar? seperti bilangan 1 juta misalnya, atau 1 miliar?&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apakah &lt;em&gt;lebih sedikit memakan memori&lt;/em&gt;? yang digunakan untuk menyimpan hasil penghitungan yang dilakukan saat fungsi dipanggil?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Atau apakah kodenya &lt;em&gt;mudah dibaca&lt;/em&gt; oleh orang lain?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hmm baiklah, sebenarnya semua arti di atas adalah arti yang valid. Dimana arti kata &lt;em&gt;lebih baik&lt;/em&gt; mencakup dari ketiganya. Namun kita akan memfokuskan pembahasan kita pada arti &lt;em&gt;lebih cepat&lt;/em&gt; dan &lt;em&gt;lebih sedikit memakan memori&lt;/em&gt; karena kedua hal tersebut lebih penting ketimbang arti &lt;em&gt;mudah dibaca&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Kita akan lebih dulu fokus mengevaluasi mana solusi yang memiliki &lt;code&gt;runtime&lt;/code&gt; paling cepat. 1 atau 2?&lt;/p&gt;

&lt;p&gt;Kita akan menggunakan fungsi bawaan milik Javascript untuk melakukan perhitungan waktu yaitu dengan method &lt;code&gt;performance&lt;/code&gt;. Jadi kodenya seperti ini,&lt;/p&gt;

&lt;p&gt;Contoh 1&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;jumlahDeret&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;jumlah&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

 &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;jumlah&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="p"&gt;};&lt;/span&gt;

 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;jumlah&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;w1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;jumlahDeret&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000000000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;w2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Waktu berlalu: &lt;/span&gt;&lt;span class="p"&gt;${(&lt;/span&gt;&lt;span class="nx"&gt;w2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;w1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; detik`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Variabel &lt;code&gt;w1&lt;/code&gt; akan memberitahu kita berapa milidetik yang berlalu sejak &lt;code&gt;document&lt;/code&gt; dibuat. Terutama waktu yang didapatkan pada saat window terbuka, kemudian kita menyimpan waktu yang sudah didapatkan tersebut ke dalam variabel &lt;code&gt;w1&lt;/code&gt; sebelum fungsi &lt;code&gt;jumlahDeret()&lt;/code&gt; kita panggil.&lt;/p&gt;

&lt;p&gt;Selanjutnya kita memanggil fungsi &lt;code&gt;jumlahDeret()&lt;/code&gt; yang argumennya berupa bilangan sebesar 1 miliar.&lt;/p&gt;

&lt;p&gt;Kemudian kita dapatkan lagi waktu &lt;code&gt;performance&lt;/code&gt; setelah fungsi &lt;code&gt;jumlahDeret()&lt;/code&gt; dijalankan. Seharusnya ada penambahan beberapa milidetik akibat proses dari fungsi &lt;code&gt;jumlahDeret()&lt;/code&gt; yang dipanggil.&lt;/p&gt;

&lt;p&gt;Oke, kita sudah memiliki dua bilangan sekarang yaitu &lt;code&gt;w1&lt;/code&gt; dan &lt;code&gt;w2&lt;/code&gt;. Untuk mendapatkan selisih waktunya maka kita gunakan formula matematika &lt;code&gt;w2 - w1 / 1000&lt;/code&gt;. Kenapa dibagi 1000? itu karena untuk mengonversi dari milidetik ke detik.&lt;/p&gt;

&lt;p&gt;Dan output yang saya dapatkan dari &lt;strong&gt;contoh 1&lt;/strong&gt; adalah sebagai berikut:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Waktu berlalu: 1.3605600000009872 detik&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Output bisa berubah-ubah karena berkaitan dengan waktu proses.&lt;/p&gt;

&lt;p&gt;Selanjutnya kita lakukan cara yang sama pada contoh 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;jumlahDeret&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;w1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;jumlahDeret&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000000000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;w2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Waktu berlalu: &lt;/span&gt;&lt;span class="p"&gt;${(&lt;/span&gt;&lt;span class="nx"&gt;w2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;w1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; detik`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dan output yang saya dapatkan adalah:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Waktu berlalu: 0.00009499999578110874 detik&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sekarang kita sudah mengetahui mana solusi yang memiliki &lt;code&gt;runtime&lt;/code&gt; atau waktu proses yang lebih singkat dengan data inputan yang sama yaitu 1 miliar. &lt;/p&gt;

&lt;p&gt;Dan &lt;em&gt;jreng jreng jreng&lt;/em&gt;, pemenangnya adalah &lt;strong&gt;Contoh 2&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;Proses yang saya contohkan di atas sebenarnya bukanlah yang paling dapat diandalkan dalam pengaturan waktu.&lt;/p&gt;

&lt;p&gt;Seperti &lt;em&gt;sebelum&lt;/em&gt; dan &lt;em&gt;sesudah&lt;/em&gt; kemudian membandingkannya dengan fungsi yang lain. Bagaimana fungsi yang ini lebih efisien daripada fungsi yang itu? apakah berdasarkan persentase kecepatannya? atau apakah karena saya melakukan pengurangan terhadap milidetiknya? ini jadi agak sedikit kurang jelas.&lt;/p&gt;

&lt;p&gt;Itu semua membawa kita pada permasalahan terhadap &lt;strong&gt;waktu&lt;/strong&gt;, yang menjadikannya kurang dapat diandalkan. Apa saja masalahnya?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mesin yang berbeda akan merekam penggunaan waktu yang berbeda pula, pengaturan waktu jadi bergantung pada spesifikasi komputer/laptop yang kita punya.&lt;/li&gt;
&lt;li&gt;Bahkan mesin yang sama pun akan merekam penggunaan waktu yang berbeda,&lt;/li&gt;
&lt;li&gt;Jadi, untuk mendapatkan algoritma yang cepat, menggunakan metode kecepatan waktu tidaklah cukup&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Lalu bagaimana cara kita menelusuri kode kita dan berbicara secara umum tentang kode mana yang lebih baik?&lt;/p&gt;

&lt;p&gt;Saya tidak bilang kalau menggunakan metode ini merupakan ide yang buruk. Tapi alangkah baiknya jika ada cara lain yang tidak perlu melibatkan men-&lt;em&gt;setup&lt;/em&gt; file baru untuk mendapatkan waktu seperti cara di atas.&lt;/p&gt;

&lt;p&gt;Sekarang kita hanya melakukan tes pada kode yang hanya memakan waktu tidak sampai lima detik.&lt;/p&gt;

&lt;p&gt;Lalu bagaimana jika kita memiliki kode yang membutuhkan waktu satu jam untuk sesuatu yang besar dan kita membandingkannya dengan versi lain yang membutuhkan waktu empat jam?&lt;/p&gt;

&lt;p&gt;Kita tidak ingin melakukan tes tersebut untuk mencari tahu mana yang lebih cepat. Yang kita mau hanya memberikan nilai dan kemudian berbicara secara umum bagaimana membandingkan kode tanpa harus melakukan semua cara di atas.&lt;/p&gt;

&lt;p&gt;Itulah yang akan dilakukan oleh &lt;strong&gt;Big O&lt;/strong&gt;, dan akan hadir di artikel berikutnya. Sampai Jumpa ! :)&lt;/p&gt;

</description>
      <category>bigonotation</category>
      <category>algorithms</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Big O: [1] Pendahuluan Big O</title>
      <dc:creator>Luthfi Aji Wicaksono</dc:creator>
      <pubDate>Thu, 15 Aug 2019 09:57:40 +0000</pubDate>
      <link>https://dev.to/luthfiajiw/1-pendahuluan-big-o-4ih2</link>
      <guid>https://dev.to/luthfiajiw/1-pendahuluan-big-o-4ih2</guid>
      <description>&lt;p&gt;Bismillahirrahmanirrahim,&lt;/p&gt;

&lt;p&gt;Dimulai dari artikel ini, saya akan mencoba merangkum materi yang sudah saya kumpulkan tentang &lt;strong&gt;Big O Notation&lt;/strong&gt; dari berbagai sumber yang sudah tersedia di internet. Dan bahasa pemrograman yang akan saya gunakan sebagai pengantar adalah bahasa &lt;strong&gt;Javascript&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Mengenai pembahasan tentang Big O ini, saya akan menjadikannya ber-&lt;em&gt;series&lt;/em&gt; dan membaginya per bagian-bagian supaya lebih ringkas, cepat dan urut dalam memahami dan mempelajarinya.&lt;/p&gt;

&lt;p&gt;Akan ada beberapa bagian yang sedikit mengandung unsur matematik. Tapi tenang, kuasai dan jangan panik! Karena untuk memahami &lt;strong&gt;Big O&lt;/strong&gt; tidak terlalu diperlukan pemahaman matematika yang pekat. Cukup siapkan mental dan keinginan yang kuat seperti saat kau ingin mendapatkan hatinya, &lt;em&gt;eh&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Karena bahasa yang saya gunakan disini adalah &lt;strong&gt;Javascript&lt;/strong&gt;, maka akan sangat membantu jika kamu sudah menguasai sintaksis dasar milik Javascript. Tapi tak mengapa jika kamu ingin mencoba mengikuti materi dengan bahasa pemrograman yang sudah kamu kuasai sekarang, saya yakin kamu pasti bisa.&lt;/p&gt;

&lt;p&gt;Oke, objektif-objektif kita pada materi ini adalah:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Memotivasi kebutuhan akan sesuatu seperti &lt;strong&gt;Big O Notation&lt;/strong&gt;, sebagai seorang programmer atau developer terkadang kita hanya peduli pada kode yang kita tulis, asalkan kode itu berhasil berjalan tanpa error, kita senang dan kita tidak peduli pada performanya. Disinilah kita akan menumbuhkan rasa &lt;del&gt;sayang&lt;/del&gt; peduli kita akan performa kode yang kita tulis.&lt;/li&gt;
&lt;li&gt;Mendeskripsikan &lt;em&gt;Apa itu Big O Notation?&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Menyederhanakan ekspresi-ekspresi Big O&lt;/li&gt;
&lt;li&gt;Menjelaskan tentang &lt;em&gt;Time Complexity&lt;/em&gt; dan &lt;em&gt;Space Complexity&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Mengevaluasi &lt;em&gt;Time Complexity&lt;/em&gt; dan &lt;em&gt;Space Complexity&lt;/em&gt; dari algoritma yang berbeda menggunakan Big O Notation&lt;/li&gt;
&lt;li&gt;Mendeskripsikan apa itu &lt;em&gt;logaritma&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Baiklah, tarik napas dalam-dalam dan keluarkan perlahan lewat pori-pori kulit.&lt;/p&gt;

&lt;p&gt;Kita akan mulai objektif kita pada poin pertama yaitu Menumbuhkan rasa butuh pada Big O Notation.&lt;/p&gt;

&lt;p&gt;Pembahasan materi ini sejatinya adalah tentang &lt;strong&gt;Algoritma&lt;/strong&gt;, yaitu tentang memecahkan tantangan-tantangan dan masalah-masalah.&lt;/p&gt;

&lt;p&gt;Pada setiap bagian nantinya akan ada banyak cara untuk memecahkan tantangan yang bermacam-macam dan semuanya berhasil diimplementasikan.&lt;/p&gt;

&lt;p&gt;Tapi selanjutnya bagaimana kita bisa tahu mana cara yang &lt;em&gt;terbaik&lt;/em&gt; untuk diterapkan?&lt;/p&gt;

&lt;p&gt;Oke, mari kita ambil sebuah contoh; jika kita memiliki dua cara implementasi berbeda pada satu fungsi yang sama, lalu bagaimana cara kita menentukan mana implementasi yang terbaik?&lt;/p&gt;

&lt;p&gt;Disinilah peran &lt;strong&gt;Big O&lt;/strong&gt; hadir, Big O adalah &lt;em&gt;sebuah cara untuk menggeneralisasi kode, kemudian membandingkan kode tersebut dan membandingkan performanya dengan kode yang lain.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Misalkan&lt;/em&gt;, Tulislah sebuah fungsi yang menerima string sebagai argumennya dan mengembalikan string tersebut secara terbalik.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;helloww&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wwolleh&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ada 10 cara berbeda yang saya temukan di stackoverflow, kamu bisa lihat &lt;a href="https://stackoverflow.com/questions/958908/how-do-you-reverse-a-string-in-place-in-javascript" rel="noopener noreferrer"&gt;di sini&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nah, akan lebih baik jika ada sebuah sistem yang mengurutkan klasifikasi kode tersebut sehingga kita bisa memberi label dari yang terbaik hingga yang terburuk. Ilustrasi nya seperti di bawah ini,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Fcs3ojWb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Fcs3ojWb.png" alt="metric"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Big O memiliki ekspresi yang mewakili label-label di atas, tetapi agak sedikit matematis. Untuk sekarang gambar di atas akan sedikit lebih membantu kita untuk membayangkan seperti apa Big O itu.&lt;/p&gt;




&lt;h3&gt;
  
  
  WHO CARES?
&lt;/h3&gt;

&lt;p&gt;Siapa yang peduli pada hasil dari fungsi di atas tadi? tidak ada yang peduli!&lt;/p&gt;

&lt;p&gt;Yang harus kita pedulikan sekarang adalah bagaimana cara kita memilih performa terbaik dari algoritma yang kita buat untuk fungsi tersebut.&lt;/p&gt;

&lt;p&gt;Karena yang ditanyakan dalam interview-interview perusahaan besar, yang memiliki ribuan data, adalah bagaimana kita membuat sebuah algoritma yang dapat menghemat waktu sesingkat-singkatnya dan secepat-cepatnya dalam memroses data tersebut.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performa&lt;/strong&gt; akan sangat diperhatikan disini dan dari situlah hadir solusi atau algoritma terbaik.&lt;/p&gt;

&lt;p&gt;Maka:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Penting untuk memilih diksi atau kosa kata yang tepat untuk menjelaskan bagaimana kode kita berjalan&lt;/li&gt;
&lt;li&gt;Akan sangat baik mendiskusikan kekurangan dari masing-masing cara yang digunakan&lt;/li&gt;
&lt;li&gt;Ketika kode kita berjalan lambat atau bahkan &lt;em&gt;crash&lt;/em&gt;, identifikasilah bagian kode mana yang tidak efisien sehingga kita dapat memperbaiki kualitas kode yang dibuat. Jadi jangan hanya mencari &lt;em&gt;error&lt;/em&gt; nya saja, tapi juga pahami cara kerja dari setiap baris kode yang ditulis, dan itulah yang akan di bahas pada materi &lt;strong&gt;Big O&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sedikit informasi, bahwa pada saat kamu menjalani interview kerja, maka teori Big O ini seringkali ditanyakan untuk mengetahui seberapa paham kamu dengan apa yang kamu tuliskan. Jadi ikuti terus materi tentang Big O ini, Oke?&lt;/p&gt;

&lt;p&gt;Sepertinya kita cukupkan dulu sedikit perkenalan tentang &lt;strong&gt;Big O Notation&lt;/strong&gt; di sini. Dan pada artikel selanjutnya kita akan mulai membahas contoh-contoh kode dan mencari tahu efisiensi dari kode tersebut.&lt;/p&gt;

&lt;p&gt;Semoga yang sedikit ini bisa bermanfaat, sampai bertemu lagi :)&lt;/p&gt;

</description>
      <category>bigonotation</category>
      <category>algorithms</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
