Apa rumus matematika yang baik untuk diketahui untuk pemrograman? [Tutup]

19

Apa sajakah rumus matematika yang agak umum Anda pelajari yang membantu Anda menulis algoritma yang lebih baik dan menjadi programmer yang lebih baik?

Contoh: Saya belajar tentang rumus jarak ecludian: sqrt((x1-x2)^2+(y1-y2)^2)yang membantu saya memahami cara menemukan objek seperti dengan membandingkan 2 faktor.

GSto
sumber
2
Saya tidak berpikir itu rumus jarak Euclidean.
Greg Hewgill
@Larry @Greg diedit.
GSto
haha bagaimana dengan urutan fibo ... bagus untuk pembandingan
aggietech
1
Tanggal Penyelesaian = (Tanggal Perkiraan + Jumlah Hari Tersisa / 2) ^ (Waktu di Tempat Kerja / Waktu di Rumah) * Jumlah Pizza Gratis
Mendesis
7
Anda mungkin tertarik untuk mengetahui bahwa jika Anda hanya perlu membandingkan jarak, Anda dapat melewati sqrtlangkah tersebut. Untuk loop dalam yang kencang, itu mungkin penting.

Jawaban:

16

Mengetahui kekuatan 2 sangat berguna, terutama ketika berhadapan dengan operasi bitwise tingkat rendah.

ASHelly
sumber
+1 - Mampu mengonversi ke dan dari pangkalan 2, 16, 10 dan 8 adalah suatu keharusan.
mouviciel
2
Saya tidak yakin tentang base-8, tetapi saya setuju dengan 2,16, dan 10 konversi. Anda harus mampu melakukannya dalam jangka waktu yang masuk akal, tetapi tidak harus secara instan.
Incognito
Satu guru saya adalah binatang heksa. Mengkonversi dalam angka-angka konyol di kepalanya dan saya adalah TA untuknya selama kurang lebih satu tahun, kelas selalu terkesan seperti saya.
Chris
Saya benci base 8 :)
1
Dengan makro, enum, dan bitfields dalam bahasa modern, dalam kasus apa orang perlu tahu kekuatan 2, yang pada dasarnya adalah angka ajaib .. setsockopt(...SO_KEEPALIVE..)jauh lebih mudah dibaca atau ditulis daripadasetsockopt(...16...)
JBRWilkinson
15

Aljabar Boolean sudah disebutkan, tetapi saya ingin memberikan beberapa contoh praktis.

Aljabar Boolean sangat sering berguna ketika Anda bekerja dengan ekspresi boolean yang kompleks (dalam ifpernyataan misalnya).

Pasangan ekspresi dan hukum yang berguna:

Distribusi

A & (B | C) = (A & B) | (A & C)

A | (B & C) = (A | B) & (A | C)

Jadi lain kali Anda menemukan ekspresi seperti itu:

if((A || B) && (A || C) && (A || D) && (A || E)) { ... }

Anda dapat dengan mudah mengecilkannya ke:

if(A || (B && C && D && E)) { ... }

Negasi dan Hukum De Morgan

! (! A) = A

! (A & B) =! A | ! B

! (A | B) =! A &! B

Katakanlah Anda memiliki pernyataan seperti itu:

if(!A && !B && !C) {..}

dan Anda perlu membangun kebalikannya. Penulisan:

if(!(!A && !B && !C)) {...}

akan bekerja, tetapi tidak terlihat sekeren ini:

if(A | B | C) {...}
serg
sumber
2
Masalah dengan melakukan ini, adalah apakah ini adalah aturan bisnis kehidupan nyata yang sebenarnya, karena mereka memiliki kecenderungan untuk MENGUBAH. Jika demikian, Anda perlu merekonstruksi ekspresi asli untuk mengubahnya, dan kemudian mengoptimalkannya lagi. Pemelihara cenderung menggerutu saat melakukannya.
Dan di situlah peta Karnaugh dapat membantu. Ini hanya berfungsi dengan baik hingga 4 bendera boolean sekaligus, tetapi jika Anda membutuhkan lebih banyak - semoga berhasil!
Ayub
3
+1 untuk Hukum De Morgan. Saya kagum melihat betapa sedikit orang yang telah diajarkan dan tahu bagaimana menerapkannya.
Fortyrunner
Anda lupa satu ini: (P -> Q) <=> (!P | Q). Saya menggunakannya sepanjang waktu karena sangat sedikit lingkungan menawarkan operator implikasi logis, ini adalah persamaan yang sangat berguna untuk kendala SQL CHECK.
mu terlalu pendek
Hukum Karnaugh dan De Morgan adalah sesuatu yang biasanya Anda ajarkan untuk digunakan di kelas teknik elektro tetapi tidak di kelas teknik komputer. Yang aneh, karena aplikasi dapat ditemukan dalam yang terakhir seperti penggunaan praktis hukum De Morgan yang disebutkan di atas.
Spoike
9

Dalam pengalaman saya, rumus matematika digunakan untuk perhitungan yang sangat spesifik, yang mungkin atau mungkin tidak berlaku untuk proyek Anda.

Jika Anda perlu menghitung sesuatu, biasanya ada fungsi di perpustakaan atau contoh kode sumber di sekitar yang dapat menghitungnya untuk Anda. Misalnya, fungsi PMT () Excel, yang menghitung pembayaran yang diperlukan untuk membayar utang sebesar X% selama periode Y. Apakah Anda benar-benar ingin tahu bagaimana menghitungnya, atau apakah cukup dengan hanya memanggil yang built-in?

Dalam 10 tahun terakhir, saya tidak berpikir saya perlu menggunakan apa pun dari perpustakaan Matematika selain Ceil (), Min () dan Max (), yang menunjukkan bahwa meskipun komputer dirancang untuk memecahkan masalah berbasis matematika , yang umum digunakan saat ini adalah pengambilan keputusan seputar aliran data.

Ambil, misalnya, Facebook, yang memiliki sejumlah besar kode. Mungkin ada beberapa Matematika di suatu tempat, tapi saya curiga terutama di Crypto API, yang mungkin merupakan pustaka sistem. Tetapi akses basis data, keputusan otorisasi, pembuatan halaman, dan perutean informasi mungkin tidak menggunakan banyak Matematika.

Ya, ada pasar yang membutuhkan banyak Matematika - keuangan, fisika, teknik - tetapi dalam industri ini, disiplin utama Anda lebih cenderung adalah Matematika / Ekonomi, Fisika, Teknik, dll, jadi pertanyaan Anda adalah 'bagaimana saya bisa menulis rumus f (x) dalam bahasa Y? '

Penggunaan waktu Anda yang lebih baik, IMO, akan menyelidiki Algoritma (termasuk notasi O Besar) dan Pola Desain.

JBRWilkinson
sumber
1
1 karena sepertinya pernyataan yang masuk akal - tidak ada rumus khusus yang harus Anda ketahui, tetapi konsep kompleksitas algoritmik (notasi O Besar) sangat penting.
Michael H.
Banyak matematika ... Putuskan iklan mana yang mengganggumu.
Saya setuju bahwa jumlah matematika yang dibutuhkan umumnya cukup rendah walaupun pengalaman saya tidak serendah milik Anda - Saya akhirnya secara berkala menggunakan trigonometri dalam grafis.
Loren Pechtel
7

Tidak ada formula yang bisa menjadikan Anda seorang programmer yang lebih baik.

Keterampilan terkait matematika dapat menjadikan Anda seorang programmer yang lebih baik:

  • Metode ilmiah - cara berpikir matematika / sains dan pemecahan masalah
  • Abstraksi - kemampuan untuk mengenali abstraksi dan pola
  • Warisan - penggunaan kembali pekerjaan / metode yang ada dalam memecahkan masalah baru
  • Pengalaman - memahami serangkaian masalah dan solusi
Branimir
sumber
-1, pria itu bertanya tentang FORMULAS MATH yang berguna. Saya tidak percaya jawaban ini benar-benar terangkat.
Jas
6

Rumus statistik dasar baik untuk diketahui. Saya telah menggunakan regresi linier setidaknya beberapa kali.

Catatan untuk memikirkan nama
sumber
6

Saya ingin menyebutkan seri Taylor yang cukup berguna untuk mendapatkan perkiraan cepat dari fungsi "yang lebih berat". Misalnya sin(x)sekitar 0 dapat didekati dengan x-(x*x*x/6).

Secara umum, gagasan bahwa ada cara pintar untuk memperkirakan hal-hal dengan cepat, alih-alih menghitungnya ke angka signifikan terakhir (meskipun untuk fungsi dasar, kebanyakan prosesor modern mengandung implementasi cepat terprogram sehingga menggunakan Taylor untuk memperkirakan dosa mungkin tidak begitu signifikan gain kecepatan).

Joonas Pulakka
sumber
3

Hukum De Morgan, tentang mentransformasikan Boolean "dan" dan "atau" relatif ke negasi, dan beberapa informasi terkait yang lebih mendasar tentang logika Boolean (seperti negasi ganda).

Peter Eisentraut
sumber
2

Rule of Three (tipe Multiplikasi Lintas)

+1 untuk rumus statistik Dasar.

Saya melihat banyak orang dengan kesulitan untuk menerapkan aturan sederhana ini pada kode dasar.

Pagotti
sumber
+1 untuk multiplikasi silang. Dalam beberapa perangkat lunak yang rentan terhadap masalah overflow integer, multiplikasi silang digunakan untuk memeriksa bahwa hasilnya tidak melimpah.
rwong
2
Bukan masalah besar. Ini harus tertanam di kepala lulusan sekolah menengah yang ingin belajar CS.
Pekerjaan
@ Bob: Di dunia teoretis, ini benar!
Pagotti
2

Hukum Kosinus , sangat penting untuk banyak masalah geometris,

teks alternatif

terutama penentuan sudut.


sumber
apa itu gamma dalam persamaan itu?
Matt Ellen
1
@ Matt Ellen: sudut sisi di sisi C (IOW, sudut antara A dan B)
Lie Ryan
2
Dan tentu saja, kasus khusus untuk segitiga sikua^2 + b^2 = c^2
Catatan untuk diri - memikirkan nama
2

Pemrograman adalah bidang yang sangat luas. Rumus matematika tergantung pada area pemrograman Anda. Jika Anda tertarik dengan grafis, pemrograman game Anda perlu tahu lebih banyak trigonometri, geometri. Pemrograman game dapat dikategorikan lebih lanjut ke dalam bidang-bidang seperti, fisika, rendering, shader .. dan daftarnya berlanjut. Jadi jika Anda seorang ahli simulasi fisika, maka Anda harus tahu hal-hal yang berkaitan dengan Fisika.
Jika Anda ke keamanan, Anda harus menjadi ahli Teori Angka.
Secara umum, Anda dapat pergi kombinasi dari ini, dan yang pernah Anda minati. Belajar tidak pernah menyakitkan.


sumber
2

Metode Pembuktian

Terutama, yang saya gunakan dengan frekuensi relatif:

Ada lebih banyak, dan saya telah menggunakan banyak dari mereka pada satu titik atau yang lain, tetapi ini adalah 3 yang saya ingat pernah digunakan sekilas. Mereka juga sangat membantu jika Anda dapat menjaga niat mereka saat menulis unit atau tes integrasi.

Steven Evers
sumber
2

T (n) = aT (n / b) + f (n), a> = 1, b> 1

Master Theorem baik untuk diketahui dalam pemrograman. Ini memungkinkan Anda memecahkan hubungan perulangan yang dapat membantu Anda menemukan kompleksitas algoritma rekursif. Ini sangat penting ketika menulis algoritma gaya "divide-and-conquer". Secara kasar, Anda dapat menggunakan teorema master untuk mendapatkan kompleksitas jika Anda mengetahui kompleksitas setiap "langkah" dan faktor percabangan.

Kurtis
sumber
1
mengapa itu baik untuk mengetahui pemrograman?
Matt Ellen
@MattEllen: Ini memungkinkan Anda memecahkan hubungan perulangan yang dapat membantu Anda menemukan kompleksitas algoritma rekursif. Ini sangat penting ketika menulis algoritma gaya "divide-and-conquer". Secara kasar, Anda dapat menggunakan teorema master untuk mendapatkan kompleksitas jika Anda mengetahui kompleksitas setiap "langkah" dan faktor percabangan.
Tikhon Jelvis
1
  • aljabar
  • trigonometri
  • vektor (operasi matriks)
  • kalkulus
  • [berbagai interpolasi dan turunannya]
  • [permukaan, NURBS]

(Yang di brackers lebih dari jenis "diterapkan")

Sulit untuk memberikan arahan umum, karena sangat tergantung pada bidang Anda. Tapi di atas mencakup dasar-dasar gelar teknik cukup banyak. Pikiran Anda, kategori-kategori ini sering tumpang tindih (trigonometri + operasi matriks., Kalkulus + operasi matriks., Dan sebagainya.).

Saya selalu memiliki buku pegangan Matematika dekat. Seseorang sering tidak yakin akan sesuatu, dan itu membantu untuk disajikan secara teratur.

Benteng
sumber
1

Mengetahui aljabar boolean sangat membantu. Itu membuat Anda dari menulis kode seperti

if (x < 10)
    return true;
else
    return false;
fredoverflow
sumber
Saya tidak yakin saya mengerti bagaimana aljabar boolean membantu mencegah pengguna menulis itu? Bisakah Anda mengusulkan apa yang seharusnya ditulis pengguna di sana? (Saya akan menganggap kembali x <10; tetapi mungkin keliru.)
Chris
1
Anda benar - seharusnya kembali x <10. Pikirkan seperti ini. Mengevaluasi (x <10) akan mengembalikan hasil Boolean. Pernyataan if kemudian dipecah menjadi [jika x memang kurang dari 10] jika (benar) mengembalikan true; atau [jika x lebih besar dari atau sama dengan 10] jika (salah) ... lain kembali salah;
Eric Olsson
2
(X <10) dapat memisahkan dua kasus bisnis. Dengan formulir verbose, Anda dapat melakukan lebih dari sekadar mengembalikan nilai, yang dalam mode pemeliharaan sangat bagus, karena Anda dapat menjaga perubahan minimum
1

Untuk masalah optimasi, ada baiknya memahami kemungkinan log. Misalnya, jika Anda mencoba untuk meminimalkan jumlah kuadrat, itu sama dengan memaksimalkan log kemungkinan, karena (secara kasar)

log( Product( exp( -(x[i]-mean)^2 )) )
  =
  - Sum( (x[i]-mean)^2 )

Favorit lain di bidang penyetelan kinerja adalah distribusi Binomial dan Beta. Mereka sangat mudah untuk dihitung.

Jika Anda mengambil 10 sampel acak dari keadaan suatu program, dan itu dalam kondisi tertentu untuk F = 40% dari waktu, maka itu sama seperti percobaan lemparan koin dengan koin yang tidak adil. Frekuensi Anda akan melihatnya dalam kondisi itu adalah distribusi Binomial dengan rata-rata 10 * 0,4 = 4, dan standar deviasi sqrt (10 * 0,4 * 0,6) = sqrt (2,4) = 1,55.

Di sisi lain, jika Anda mengambil 10 sampel dan kebetulan melihatnya dalam kondisi itu pada 4 sampel, apa yang memberitahu Anda tentang seberapa besar F? Hasil yang mungkin adalah 0, 1, 2, 3, 4, ..., 9, 10. Itu 11 kemungkinan, dan kemungkinan yang Anda lihat (4) adalah yang ke-5. Jadi, ambil 11 angka acak seragam (0,1), dan urutkan. Distribusi yang ke-5 adalah distribusi F, distribusi Beta. Mode-nya adalah 4/10. Artinya adalah 5/11. Variansnya adalah 5 * 6 / (11 ^ 2 * 12) = 0,021, dan standar deviasi = 0,144.

Banyak orang berpikir sejumlah besar sampel diperlukan untuk menemukan masalah kinerja perangkat lunak dan menghindari menemukan yang salah. Distribusi ini menunjukkan bahwa sejumlah kecil sampel dapat mengungkapkan banyak tentang biayanya.

Mike Dunlavey
sumber
0

Ini mungkin agak sederhana, tetapi G=(V,E)bagus untuk diingat. Dengan kata lain, grafik adalah seperangkat simpul dan tepi. Grafik sangat berguna untuk mewakili banyak hal.

Jason Baker
sumber