Asynchronous Workflow di F#

kali ini saya tidak sedang membahas salah satu jawaban pada Projec Euler seperti sebelumnya, tapi kali ini saya ingin turut membantu memberikan jawaban dari sebuah pertanyaan yang ada di Yahoo! answer berikut:

The sum of all of the digits of all the whole numbers from 1 to 1,000,000?

What is the sum of all of the digits of all the whole numbers from 1 to 1,000,000 (inclusive?
Thanks for any answers in advance. :)  ~cf_al_bs

jadi ceritanya ditanyakan jumlah digit – digit dari bilangan 1 sampai sejuta , sebagai ilustrasi jika rangenya adalah 10 – 15, maka perhitungannya adalah:

sumAllDigit(10) = (1 + 0) = 1

sumAllDigit(11) = (1 + 1) = 2

sumAllDigit(12) = (1 + 2) = 3

sumAllDigit(13) = (1 + 3) = 4

sumAllDigit(14) = (1 + 4) = 5

sumAllDigit(15) = (1 + 5) = 6

———————————–+

sumAllDigitDari(10-15)  = 21

jadi jawabannya 21, sedangkan persoalannya adalah rangenya besar yaitu 1 sampe satujuta.

karena ini merupakan pertanyaan yang menarik, dan baru saja membaca tentang asynchronous workflow di F# (masih sedikit sih :)), langsung saja saya pengen mencoba mempraktekkannya untuk mencari solusi permasalahan tersebut:

strategi saya adalah sebagai berikut:

1. karena jumlah bilangan dari 1 sampe 1 juta itu sangat banyak (sejuta :D), jadi saya pecah deret bilangan tersebut menjadi 5 bagian masing – masing 200 ribu

2. masing – masing pecahan tersebut kemudian di proses untuk menghasilkan jumlahnya masing – masing secara asinkron,

3. terus jumlahkan semua hasil perhitungan tiap partisi pada langkah 2

ilustrasinya adalah sebagai berikut:

image

 

adapun kode programnya adalah sebagai berikut:

image

4. saya juga mencoba dengan cara serial, tentu saja dengan kode program yang lebih pendek :)

image

setelah dieksekusi bareng maka hasil eksekusinya adalah sebagai berikut:

image

jadi hasil algoritmanya bener karena nilai yang diperoleh sama = 27000001, sedang waktu eksekusinya beda, kali ini asynchronous menang, karena berhasil mencatat waktu 1,5858360 detik, sedangkan serial kalah terpaut 0.419895 detik pada catatan waktu 2.0057310, jadi juara motogp di sirkuit phi si ku (PC-ku)adalah Caseyncronous Stoner, sedangkan Valentino Roserial kalah :D .

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s