Selamat datang di Birutek, blog yang menyajikan informasi seputar teknologi, Startup dan bagaimana teknologi itu mempengaruhi manusia.

View AllAlgorithm

View Allstartup

Recent Posts

Sabtu, 09 April 2016

Memahami prinsip algoritma desain part 4

Mengerti Alat-Alat! 
Sangat mudah untuk berpikir bahwa ini perlu dikatakan. Namun, ada perbedaan antara "mengetahui bagaimana menulis jQuery" dan "memahami jQuery". Memahami alat Anda berarti bahwa Anda memahami apa yang setiap baris kode tidak, baik langsung (nilai kembali fungsi atau efek dari metode) dan secara implisit (berapa banyak overhead yang berhubungan dengan menjalankan fungsi perpustakaan, atau yang paling efisien metode untuk concatenating string). Untuk menulis algoritma yang besar, penting untuk mengetahui kinerja fungsi-tingkat yang lebih rendah atau utilitas, bukan hanya nama dan pelaksanaan dari mereka.

Memahami Lingkungan
Merancang algoritma efisien adalah usaha penuh keterlibatan. Melampaui pemahaman alat Anda sebagai bagian mandiri, Anda juga harus memahami cara mereka berinteraksi dengan sistem yang lebih besar di tangan. Misalnya, untuk memahami JavaScript dalam aplikasi tertentu seluruhnya, adalah penting untuk memahami DOM dan kinerja JavaScript di skenario cross browser, kecepatan bagaimana memori yang tersedia mempengaruhi rendering, struktur server (dan tanggapan mereka) Anda dapat berinteraksi dengan, serta segudang pertimbangan lain yang tak berwujud, seperti skenario penggunaan.

Mengurangi Beban Kerja yang
Secara umum, tujuan dari desain algoritma untuk menyelesaikan pekerjaan dalam langkah-langkah yang lebih sedikit. (Ada beberapa pengecualian, seperti Bcrypt hashing.) Ketika Anda menulis kode Anda, mempertimbangkan semua operasi sederhana komputer adalah mengambil untuk mencapai tujuan. Berikut adalah daftar sederhana untuk memulai pada jalur untuk desain algoritma yang lebih efisien:

  • Gunakan fitur bahasa untuk mengurangi operasi (variabel caching, chaining, dll).
  • Mengurangi berulang lingkaran bersarang sebanyak mungkin.
  • Mendefinisikan variabel di luar loop bila memungkinkan.
  • Menggunakan loop pengindeksan otomatis (jika tersedia) bukannya pengindeksan manual.
  • Gunakan teknik pengurangan pintar, seperti membagi rekursif dan menaklukkan dan optimasi query, untuk memperkecil ukuran proses rekursif.

Belajar Teknik Lanjutan

Tidak ada cara yang lebih baik untuk menjadi seorang desainer algoritma yang lebih baik daripada memiliki pemahaman yang mendalam dan penghargaan untuk algoritma.
  • Ambil satu atau dua jam setiap minggu dan membaca The Art of Computer Programming.
  • Coba Facebook Programming Challenge atau Google Codejam .
  • Belajar untuk memecahkan masalah yang sama dengan teknik algoritmik yang berbeda.
  • Tantang diri Anda dengan pelaksana dibangun di fungsi bahasa, seperti .Sort () , dengan operasi tingkat yang lebih rendah.
Kesimpulan
Jika Anda tidak tahu apa algoritma itu di awal artikel ini, mudah-mudahan, sekarang, Anda memiliki pemahaman yang lebih konkret dari istilah yang agak sulit dipahami. Sebagai pengembang profesional, adalah penting bahwa kita memahami bahwa kode kita menulis dapat dianalisis dan dioptimalkan, dan penting bahwa kita mengambil waktu untuk melakukan analisis ini kinerja kode kita.

Apa menyenangkan latihan soal algoritma Anda telah menemukan? Mungkin pemrograman dinamis "knapsack problem", atau "drunken walk"? Atau mungkin Anda tahu dari beberapa praktek terbaik dari rekursi di Ruby yang berbeda dari fungsi yang sama diterapkan di Python.


#ini adalah postingan terakhir dalam memahami prinsip desain algoritma

Rabu, 06 April 2016

Memahami Prinsip Desain Algoritma part 3

Bagaimana Algoritma Berlaku untuk Saya? 
Bagi kebanyakan dari kita sebagai pengusaha, kita tidak merancang tingkat tinggi algoritma pada sebuah harian dasar.
Untungnya, kita berdiri di atas bahu para pengembang yang datang sebelum kami, yang menulis sebuah fungsi semacam asli dan memungkinkan kita untuk mencari sebuah string untuk substring dengan indexOf dengan cara yang efisien.
Tapi yang kita LAKUKAN, namun, kesepakatan dengan algoritma kita sendiri. Kita berkarya untuk loop dan menulis fungsi-fungsi setiap hari; jadi bagaimana bisa baik algoritma desain prinsip-prinsip menginformasikan tulisan ini fungsi?

Tahu Masukannya
Salah satu dari prinsip-prinsip utama dari algorithmic desain adalah, jika memungkinkan, membangun algoritma sedemikian rupa bahwa input itu sendiri melakukan beberapa pekerjaan untuk anda. Misalnya, jika anda tahu bahwa anda input adalah selalu akan menjadi jumlah yang banyak, anda tidak perlu memiliki pengecualian/cek untuk string, atau memaksa nilai-nilai anda ke dalam angka-angka. Jika anda tahu bahwa anda DOM elemen adalah sama setiap waktu dalam untuk loop dalam JavaScript, anda tidak boleh querying untuk itu elemen dalam setiap iteration. Pada hari yang sama token, untuk loop, anda seharusnya tidak menggunakan fungsi kenyamanan dengan overhead jika anda bisa melakukan hal yang sama menggunakan (lebih dekat) sederhana operasi.
 // don't do this:
for (var i = 1000; i > 0; i--){
    $("#foo").append("<span>bar</span>");
}
 
// do this instead
var foo = $("#foo");
var s = "";
for(var i = 1000; i > 0; i--){
    s += "<span>bar</span>";
}
foo.append(s); 

Jika anda seorang pengembang JavaScript (dan anda menggunakan jQuery) dan anda tidak tahu apa yang di atas fungsi-fungsi yang melakukan dan bagaimana mereka secara signifikan berbeda, poin berikutnya adalah untuk anda & anda bisa membaca poin berikutnya di Memahami Prinsip Desain Algoritma part 4

Memahami Prinsip Desain Algoritma part 2

image by google
ini lanjutan artikel Memahami Prinsip Desain Algoritma part 1

Mengapa tidak efisien?
Tidak ada cara yang lebih baik untuk menjadi seorang desainer algoritma yang lebih baik daripada memiliki pemahaman yang mendalam dan penghargaan untuk algoritma.
Katakanlah array Anda memiliki 50.000 entri, dan Anda brute-force pencarian (yaitu, pencarian dengan iterasi array penuh). Entri Anda sedang mencari, dalam skenario kasus terbaik, akan menjadi entri pertama dalam array 50.000-entry. Dalam skenario kasus terburuk, bagaimanapun, algoritma akan mengambil 50.000 kali lebih lama untuk selesai dari dalam skenario kasus terbaik.

Jadi apa yang lebih baik?
Sebaliknya, Anda akan mencari menggunakan pencarian biner. Ini melibatkan menyortir array (yang saya akan membiarkan Anda belajar tentang Anda sendiri) dan kemudian membagi array dalam setengah, dan memeriksa untuk melihat apakah jumlah pencari lebih besar atau lebih kecil dari tanda setengah dalam array. Jika lebih besar dari tanda setengah dari array diurutkan, maka kita tahu bahwa paruh pertama dapat dibuang, karena jumlah dicari bukan merupakan bagian dari array. Kami juga dapat memotong banyak pekerjaan dengan mendefinisikan batas-batas luar array dan memeriksa untuk melihat apakah jumlah dicari ada di luar mereka batas, dan jika demikian, kita telah mengambil apa yang akan menjadi operasi multi-iterasi dan mengubahnya menjadi operasi iterasi tunggal (yang dalam algoritma brute-force akan mengambil 50.000 operasi).

 sortedHaystack = recursiveSort(haystack);
function bSearch(needle, sortedHaystack, firstIteration){
    if (firstIteration){
        if (needle > sortedHaystack.last || needle < sortedHaystack.first){
            return false;
        }
    }
    if (haystack.length == 2){
        if (needle == haystack[0]) {
            return haystack[0];
            } else {
            return haystack[1];
            }
    }
    if (needle < haystack[haystack.length/2]){
        bSearch(needle, haystack[0..haystack.length/2 -1], false);
    } else {
        bSearch(needle, haystack[haystack.length/2..haystack.length], false);
    }
} 

Kedengarannya Cukup rumit
 Mengambil sifat yang tampaknya rumit dari algoritma pencarian tunggal biner, dan menerapkannya ke miliaran link mungkin (seperti mencari melalui Google). Di luar itu, mari kita terapkan semacam sistem peringkat untuk penelusuran terkait untuk memberikan perintah dari halaman respon. Lebih baik lagi, menerapkan beberapa jenis yang tampaknya acak sistem "saran" berdasarkan model sosial kecerdasan buatan yang dirancang untuk mengidentifikasi siapa Anda mungkin ingin menambahkan sebagai teman.

 Ini memberi kita pemahaman yang lebih jelas tentang mengapa algoritma yang lebih dari sekedar sebuah nama indah untuk fungsi. Pada terbaik mereka, mereka pintar, cara yang efisien untuk melakukan sesuatu yang membutuhkan tingkat yang lebih tinggi dari intuisi daripada solusi yang paling jelas. Mereka dapat mengambil apa yang mungkin akan membutuhkan superkomputer tahun untuk melakukan dan mengubahnya menjadi tugas yang selesai dalam hitungan detik pada ponsel.

baca terusannya artikel ini di Memahami Prinsip Desain Algoritma part 3

Tips Cara Menavigasi Perolehan Pertama Anda Sebagai StartUp

Business Meeting
Menjelajahi  Akuisisi(perolehan) pertama Anda dapat menjadi pengalaman menakutkan dan menegangkan. Pertumbuhan adalah salah satu tujuan inti dari setiap startup, dan membuat akuisisi yang tepat dapat menjadi game changer. Pada saat yang sama, kemungkinan tidak dalam mendukung Anda, dengan studi menunjukkan bahwa dua dari setiap tiga akuisisi gagal. Jadi bagaimana Anda bisa memastikan bahwa upaya pertama Anda di pertumbuhan anorganik tidak Anda terakhir?

Pada DesignCrowd, kami telah mengakuisisi tiga bisnis dalam lima tahun terakhir dan mengalami baik, yang buruk, dan jelek bahwa pertumbuhan anorganik yang ditawarkan. Berikut adalah beberapa pelajaran penting kami pada apa yang dapat Anda lakukan untuk memberikan perusahaan Anda kesempatan terbaik untuk sukses.

  • Jelas Mengenai Tesis Investasi Anda
Dalam pengalaman teman saya bekerja sebagai penasehat merger dan akuisisi untuk perusahaan terdaftar besar, saya pelayar-berbau seberapa sering eksekutif dari perusahaan yang sama akan mengungkapkan pandangan yang berbeda pada alasan untuk melakukan akuisisi. Bagaimana Anda bisa berharap untuk memiliki akuisisi berhasil bila Anda tidak jelas tentang apa yang sukses akan terlihat seperti?

Tesis investasi adalah tulang punggung dari semua akuisisi Anda (dan pasca-akuisisi) aktivitas. Hal ini tidak hanya digunakan untuk menginformasikan upaya pengumpulan data Anda sebelum menyelesaikan transaksi. Ini adalah tongkat pengukur dimana keberhasilan akuisisi harus kemudian dilacak dan dinilai.

  • Mengidentifikasi "Masalah Ambang Batas"
tesis investasi Anda adalah hipotesis yang perlu diuji dengan memeriksa isu-isu kunci (threshold) yang akan mempengaruhi kemampuan Anda untuk menyadari nilai dari kesepakatan. Sebelum memulai due diligence, luangkan waktu untuk mengidentifikasi isu-isu kunci dan memetakan data apa yang perlu Anda kumpulkan untuk mengevaluasi setiap masalah secara menyeluruh.

Fokus upaya ketekunan Anda pada masalah ambang ini, daripada mengembangkan pemahaman tentang benar-benar setiap aspek dari bisnis yang Anda cari di. masalah ambang batas adalah untuk setiap akuisisi, karena mereka terkait erat dengan tesis investasi Anda. Yang mengatakan, beberapa masalah ambang batas umum termasuk ekonomi pelanggan (tingkat pertumbuhan, biaya akuisisi, nilai seumur hidup, churn), staf kemampuan (keluasan, kedalaman, keterlibatan), dan cocok budaya.

  • Tetap Objektif
Sebagai startup, kemungkinan pertumbuhan terobosan bisa sangat menggoda dan dapat mempengaruhi kemampuan Anda untuk berpikir obyektif tentang kesepakatan itu. Selain memiliki tesis kesepakatan jelas diartikulasikan, Anda perlu menemukan cara tinggal objektif ketika mengevaluasi apakah atau tidak untuk melanjutkan dengan akuisisi. Pikirkan diri Anda sebagai seorang hakim, menimbang fakta dan data yang Anda miliki sebelum Anda, daripada kepala sekolah yang benar-benar, benar-benar ingin melakukan kesepakatan.

Ini juga berguna untuk memiliki beberapa orang yang terlibat dalam due diligence. Mengumpulkan perspektif yang berbeda dan bersikap terbuka tentang keprihatinan potensial membantu untuk memastikan objektivitas. Membuat pos pemeriksaan tertentu dalam ketekunan Anda di mana Anda meninjau masalah ambang batas dengan tim Anda dan membuat pergi-atau-tidak-pergi keputusan resmi. Selalu kembali ke tesis investasi Anda dan mengukur apakah melanjutkan akuisisi masih akan memberikan nilai yang Anda harapkan.

  • Investasikan Waktu dalam Komunikasi
Jadi, Anda telah berhasil melewati ketekunan, dan Anda telah memutuskan untuk melanjutkan dengan kesepakatan. Pada titik ini, sangat mudah untuk menjadi laser difokuskan pada memaku aspek operasional mengeksekusi transaksi, tapi mendapatkan komunikasi yang tepat untuk semua stakeholder - seperti pelanggan, karyawan, dan papan Anda - tidak kalah penting. rencana integrasi yang paling sempurna diletakkan bisa hancur berkeping-keping jika komunikasi Anda tidak tepat waktu, transparan, atau empati cukup.

Akuisisi berarti perubahan, perubahan menciptakan ketidakpastian dan ketidakpastian menciptakan resistensi. Komunikasi adalah penangkal jahat pasca-pembelian toksikologi ini. Membangun rencana komunikasi yang kuat bagi semua pemangku kepentingan akan membantu Anda untuk mengurangi ketidakpastian dan mendapatkan buy-in. Tempatkan diri Anda pada posisi mereka - pertanyaan apa yang akan Anda ingin menjawab jika Anda mereka? Gunakan lensa ini untuk menginformasikan isi komunikasi Anda dan menciptakan ruang bagi mereka untuk mengajukan pertanyaan secara terbuka dan langsung, karena proses ini membantu mereka untuk berpartisipasi dalam perubahan, daripada merasa seperti korban itu.

  • Melakukan kesepakatan untuk awalan
"Untuk membeli atau tidak membeli?" Hanya awal dari perjalanan Anda. Mengakuisisi perusahaan dan menyadari manfaat dari akuisisi Anda adalah dua hal yang berbeda. Mencapai tujuan tesis investasi Anda akan bergantung pada bagaimana Anda mendekati integrasi entitas baru.

Kebanyakan startups digunakan untuk bepergian dengan kecepatan cahaya, tapi lebih cepat tidak selalu lebih baik ketika datang ke mengintegrasikan bisnis baru. Mengintegrasikan sebagian besar perusahaan membutuhkan waktu dan usaha yang berkelanjutan. Sebagai titik awal, ini berguna untuk sangat memahami apa yang baru saja membeli, sebelum pengisian kecepatan penuh dengan integrasi. Anda juga akan perlu untuk mendedikasikan sumber daya dan perhatian terhadap kegiatan pasca-akuisisi tersebut, yang dapat benar-benar menantang dalam konteks startup, di mana begitu banyak proyek menuntut perhatian Anda. Jadilah realistis tentang kerangka waktu integrasi Anda diberikan segala sesuatu yang Anda butuhkan untuk cenderung.

Selasa, 05 April 2016

Memahami Prinsip Desain Algoritma part 1

buku algoritma
Artikel ini akan masuk ke dalam prinsip-prinsip desain algoritma. Jika Anda merasa tidak tahu apa yang saya maksud, silakan anda baca terus!

ketika Anda mendengar kata "algoritma," Anda mungkin merespon dalam salah satu dari tiga cara:

  1. Anda segera mengetahui dan memahami apa yang kita bicarakan karena Anda belajar ilmu komputer.
  2. Anda tahu bahwa algoritma adalah workhorses perusahaan seperti Google dan Facebook, tetapi Anda tidak benar-benar yakin apa artinya.
  3. Anda berlari dan bersembunyi dalam ketakutan karena segala sesuatu yang Anda tahu tentang algoritma mengingatkan Anda dari mimpi buruk Kalkulus SMA.

Jika Anda adalah salah satu dari kedua dua, artikel ini adalah untuk Anda.

Apa itu Algoritma, Tepat?
Algoritma tidak khusus jenis operasi, tentu. Mereka adalah konseptual, serangkaian langkah-langkah yang Anda ambil dalam kode untuk mencapai tujuan tertentu.
Algoritma telah umum didefinisikan secara sederhana sebagai "petunjuk untuk menyelesaikan tugas". Mereka juga telah disebut "resep". Dalam film The Social Network , sebuah algoritma yang Zuckerberg yang dibutuhkan untuk membuat pekerjaan Facemash. Jika Anda melihat film, Anda mungkin ingat melihat apa yang tampak seperti persamaan Scribbly pada jendela di kamar asrama Markus. Tapi apa yang aljabar Scribbly harus dilakukan dengan sederhana "panas atau tidak" situs Markus?

Algoritma memang petunjuk. Mungkin deskripsi yang lebih akurat akan membahwa algoritma yang memiliki pola menyelesaikan tugas dalam cara yang efisien. Zuckerberg Facemash adalah situs voting untuk menentukan seseorang tarik relatif terhadap seluruh kelompok orang, tetapi pengguna hanya akan diberikan pilihan antara dua orang. Mark Zuckerberg diperlukan suatu algoritma yang memutuskan mana orang untuk cocok satu sama lain, dan bagaimana menghargai suara relatif terhadap riwayat orang itu dan pesaing sebelumnya. Ini diperlukan lebih intuisi dari sekedar menghitung suara untuk setiap orang.

Sebagai contoh, katakanlah Anda ingin menciptakan suatu algoritma untuk menambahkan 1 ke nomor negatif, dan mengurangkan 1 dari sejumlah positif, dan melakukan apa-apa untuk 0. Anda mungkin melakukan sesuatu seperti ini (dalam pseudo kode JavaScript-esque):

function addOrSubtractOne(number){
    if (number < 0) {
        return number + 1
    } else if (number < 0) {
        return number - 1
    } else if (number == 0) {
        return 0;
    }
}

Anda mungkin berkata kepada diri sendiri, "Itu fungsi." Dan kau benar. Algoritma tidak khusus jenis operasi, tentu. Mereka adalah konseptual - serangkaian langkah-langkah yang Anda ambil dalam kode untuk mencapai tujuan tertentu.
Jadi mengapa mereka masalah besar? Jelas, menambah atau mengurangi 1 ke nomor adalah hal yang cukup sederhana untuk dilakukan.
Tapi mari kita bicara untuk kedua tentang pencarian. Untuk mencari nomor dalam array angka, bagaimana Anda akan berpikir untuk melakukannya? Pendekatan naif akan iterate nomor, memeriksa setiap nomor terhadap satu yang Anda cari. Tapi ini bukan solusi yang efisien, dan memiliki jangkauan yang sangat luas mungkin kali selesai, sehingga metode pencarian tidak menentu dan tidak bisa diandalkan ketika skala untuk set pencarian besar.

function naiveSearch(needle, haystack){
    for (var i = 0; i < haystack.length; i++){
        if (haystack[i] == needle) { return needle; }
    }
    return false;
}

Untungnya, kita bisa lebih baik dari ini untuk pencarian.

Lanjutan artikel ini ada di artikel selanjutnya tentang Memahami Prinsip Desain Algoritma.