CF
Research12 April 2020

Methode Tercepat dalam mencari data terkecil

Cong Fandi
Cong Fandi7 min read
...
Methode Tercepat dalam mencari data terkecil

Bismillah, Halo sobat ngoding,Kali ini saya akan bercerita tentang kecepatan sebuah methode dalam mencari data terkecil dari kumpulan data training. Dalam riset ini saya membuat data training dengan menggunakan sebuah object buatan saya sendiri.

Awalnya saya hanya ingin mencari methode terbaik untuk menghitung dan mencari data dari sekumpulan data, tentunya saya memiliki banyak pilihan untuk menggunakan beberapa methode yang ada pada bahasa pemrograman dart.

Berikut hasil simulasi dan percobaan yang saya lakukan.

Simulasi

  1. Percobaan saya lakukan dengan menggunakan bahasa pemrograman dart

  2. Editor yang digunakan adalah online editor pada web dartpad

  3. Percobaan dilakukan dengan menggunakan 10.000 data training

  4. Data yang dicari adalah data yang lebih dari 3 dan kurang dari 8

  5. Percobaan dilakukan dengan menghitung lama sebuah solusi(methode) dieksekusi

  6. Percobaan dilakukan sebanyak 100x pada masing masing solusi

Object Training Dalam bahasa dart

class Data {
  int lat;
  int lang;
  double jarak;

  Data({this.lat, this.jarak, this.lang});

  toJson() {
    return {'lat': lat, 'lang': lang, 'jarak': jarak};
  }
}

Data Training

final dataTrainig = [];

Solusi

Solusi yang diberikan dibedakan berdasarkan jenis-jenis Perulangan(for) yang ada pada bahasa pemrograman dart. Pada penelitian ini, terdapat 4 jenis jenis perulangan(solusi), antara lain :

Solusi 1

solusi1() {
  double jarakTerdekat = double.infinity;
  Data dataTerdekat;
  dataTrainig.forEach((data) {
    if (data.jarak > 3.0 && data.jarak < 8.0) {
      if (data.jarak < jarakTerdekat) {
        jarakTerdekat = data.jarak;
        dataTerdekat = data;
      }
    }
  });
  return jarakTerdekat;
}

Solusi 2

solusi2() {
  double jarakTerdekat = double.infinity;
  Data dataTerdekat;
  for (Data data in dataTrainig) {
    if (data.jarak > 3.0 && data.jarak < 8.0) {
      if (data.jarak < jarakTerdekat) {
        jarakTerdekat = data.jarak;
        dataTerdekat = data;
      }
    }
  }
  return jarakTerdekat;
}

Solusi 3

solusi3() {
  double jarakTerdekat = double.infinity;
  Data dataTerdekat;
  for (var i = 0; i < dataTrainig.length; i++) {
    var data = dataTrainig[i];
    if (data.jarak > 3.0 && data.jarak < 8.0) {
      if (data.jarak < jarakTerdekat) {
        jarakTerdekat = data.jarak;
        dataTerdekat = data;
      }
    }
  }
  return jarakTerdekat;
}

Solusi 4

solusi4() {
  double jarakTerdekat = double.infinity;
  Data dataTerdekat;
  int totalData = dataTrainig.length;
  for (var i = 0; i < totalData; i++) {
    var data = dataTrainig[i];
    if (data.jarak > 3.0 && data.jarak < 8.0) {
      if (data.jarak < jarakTerdekat) {
        jarakTerdekat = data.jarak;
        dataTerdekat = data;
      }
    }
  }
  return jarakTerdekat;
}

Solusi 5

solusi5(double jarakTerdekat, int index, Data dataTerdekat) {
  final stopwatch = Stopwatch()..start();
  if (index < dataTrainig.length - 1) {
    if (jarakTerdekat > dataTrainig[index].jarak) {
      jarakTerdekat = dataTrainig[index].jarak;
      dataTerdekat = dataTrainig[index];
      index++;
      solusi5(jarakTerdekat, index, dataTerdekat);
    } else {
      index++;
      solusi5(jarakTerdekat, index, dataTerdekat);
    }
  } else {
      jarakTerdekat=dataTerdekat.jarak;
  }
  return jarakTerdekat;
}

Methode Execution

void main() {

//simulasi jika ada 10.000 data
//asumsi data yang ada dalam area adalah diatas 3 dan dibawah 8
//jarak terkecil yang akan diambil

  for (var i = 0; i < 10000; i++) {
//    generate 10k Data
    dataTrainig
        .add(new Data(lat: i, lang: i, jarak: new Random().nextDouble() * 10));
  }

  for (var i = 0; i < 100; i++) {
//    finding Solution
    final stopwatch = Stopwatch()..start();
//        solusi1();
//        solusi2();
//        solusi3();
//        solusi4();
        solusi5(double.infinity, 0, new Data());
    print('${stopwatch.elapsed.toString().split(':')[2].split('.')[1]}');
  }
}

Hasil

Hasil (Waktu dalam satuan millisecond(ms)) Hasil Time

Hasil (Rata-Rata Waktu(ms)) Total WAktu

Tabel Hasil

Percobaan KeMethode 1Methode 2Methode 3Methode 4Methode 5
110691677172713502568
257352728441973312
3166745282236278
4200698236166259
5201853243205247
6293525225193233
7466138215299251
8162122220228236
9157114204445228
10150110179166258
11148123165159553
12145118126135787
13148114119135498
14147114114136559
15148111111132648
16149112112128484
17154112115138549
18155109173128517
19155109154129501
20150109160139619
21149180183138559
22151115166138426
23152143166153585
245841541851521193
251209126181187555
26541122189210430
27615133192209961
28748146320241302
296672545510299215
30598271180520208
31434255170235208
32356369162282206
33346766159185200
34329429172215208
35319300566161216
36318292191155213
37310284205235327
383653352521681090
39316267294169220
40316291204210213
41354213211218217
42370298152215215
43408439144437228
44864451141163272
45521312141159337
46506314150159297
47376288137156217
48342212139184215
49432286141166223
50421333154213271
51347307149163217
52342283140252221
53330292144245209
54333294186172206
55321430154172206
56384292146156210
57350368140158223
58328288148154206
59326214141160209
60337281183147202
61320294142148201
62318287189150213
63315209140166200
64316278142148200
65319285147154198
66314279141160199
67314276140150198
68317326144154213
69316383139150201
70366297135142204
71481290135148202
72325289141152213
73343359136237198
74324478141244204
75327660137169232
76311308151156228
77322320149153208
78311319135145208
79363438144148204
80312482141176205
81320289137157220
82308296135155203
83322287136155204
84308207145150209
85448278139162203
86321202146153205
87343433136164203
88318329145149202
89318556134152201
90322306135152202
91322439129157203
92484756218240278
9340712020147234210
94342567145275209
95461450140186238
963562663166162217
97466906153151221
985991436142154207
99520368139148203
1001172367134151217

Kesimpulan

  • Methode tercepat dalam menemukan data terkecil adalah methode ke 4 dan ke 3
  • Methode yang paling lama dalam menemukan data terkecil adalah methode ke 2
  • Methode 4 dan 3 tidak memiliki perbedaan yang signifikan
  • Methode 1 dan 2 memiliki perbedaan waktu yang tidak terlalu jauh yakni 22.8 dan 31.1 persen.

Source Code

Source Code dapat dilihat pada link Github

Penulis bukan orang yang paling mampu, hanya ingin berbagi saja. Semoga dapat mengambil manfaat - Penulis

Tutorial