Programlama için bilinmesi gereken iyi matematiksel formüller nelerdir? [kapalı]


19

Daha iyi algoritmalar yazmanıza ve daha iyi bir programcı olmanıza yardımcı olan öğrendiğiniz bazı ortak matematik formülleri nelerdir?

Örnek: Eklenti mesafe formülünü öğrendim: sqrt((x1-x2)^2+(y1-y2)^2)Bu, 2 faktörü karşılaştırarak benzer nesneleri nasıl bulacağımı anlamama yardımcı oldu.


2
Bunun Öklid uzaklık formülü olduğunu sanmıyorum.
Greg Hewgill

@Geri @Greg düzenlendi.
GSto

haha fibo dizisine ne dersiniz ... kıyaslama için iyi
aggietech

1
Tamamlanma Tarihi = (Tahmini Tarih + Kalan Gün Sayısı / 2) ^ (
İşteki

7
sadece mesafeleri karşılaştırmanız gerekiyorsa , sqrtadımı atlayabileceğinizi bilmek ilginç olabilir . Sıkı bir iç döngü için bu önemli olabilir.

Yanıtlar:


16

2'nin güçlerini bilmek, özellikle düşük seviyeli bitsel işlemlerle uğraşırken kullanışlıdır.


+1 - Baz 2, 16, 10 ve 8'e dönüş ve dönüş yapabilmek şarttır.
mouviciel

2
Base-8'den emin değilim, ancak 2,16 ve 10 dönüşümle hemfikirim. Makul bir zaman diliminde yapabilmeniz gerekir, ancak anında olması gerekmez.
Gizli

Bir öğretmenim altıgen bir hayvandır. Kafasını saçma sayılarla dönüştürür ve onun için bir yıl kadar TA'ydım, sınıf her zaman I'den etkilendim.
Chris

Base 8'den nefret ediyorum :)

1
Vakalar insanların temelde sihirli sayılar 2'nin katlarını, bilmeniz gereken ne modern dilde makrolar çeteleler ve bitfields, .. ile setsockopt(...SO_KEEPALIVE..)okuma veya yazma daha oldukça çok daha kolaydırsetsockopt(...16...)
JBRWilkinson

15

Boole cebirinden daha önce bahsedilmişti, ancak bazı pratik örnekler vermek istedim.

Boole cebri, karmaşık boole ifadeleriyle ( iförneğin ifadelerde) çalışırken çok kullanışlı olur .

Birkaç faydalı ifade ve yasa:

DAĞILMA

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

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

Bir dahaki sefere böyle bir ifadeye rastlarsanız:

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

Kolayca küçültebilirsiniz:

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

Olumsuzluk ve De Morgan Yasası

! (! A) = A

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

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

Diyelim ki böyle bir ifade var:

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

ve bunun tam tersini yapmanız gerekir. Yazı:

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

ancak bu eşdeğeri kadar havalı görünmüyor:

if(A | B | C) {...}

2
Bunu yapmanın problemi, bunun gerçek gerçek iş kuralları olup olmadığıdır, çünkü bunlar DEĞİŞME eğilimi gösterir. Öyleyse, orijinal ifadeyi değiştirmek için yeniden yapılandırmanız ve ardından tekrar optimize etmeniz gerekir. Bakımcılar bunu yaparken homurdanma eğilimindedir.

İşte bu noktada bir Karnaugh haritası yardımcı olabilir. Aynı anda en fazla 4 boolean bayrağı üzerinde iyi çalışır, ancak daha fazlasına ihtiyacınız varsa - iyi şanslar!
İş

3
De Morgan Yasası için +1. Ne kadar az insana öğretilmiş gibi göründüğüne ve nasıl uygulanacağına hayran kaldım.
Fortyrunner

Sen bunu unuttun: (P -> Q) <=> (!P | Q). Çok az ortam mantıklı bir implikasyon operatörü sunduğu için her zaman kullanıyorum, bu SQL CHECK kısıtlamaları için çok kullanışlı bir denklik.
mu çok kısa

Karnaugh ve De Morgan Yasası, genellikle elektrik mühendisliği derslerinde kullanmayı öğrettiğiniz, ancak bilgisayar mühendisliği derslerinde değil. Bu gariptir, çünkü uygulamalarda yukarıda belirtilen De Morgan yasasının pratik kullanımı gibi bulunabilir.
Spoike

9

Deneyimlerime göre, matematiksel formüller, projeniz için geçerli olan veya olmayan çok özel hesaplamalar için kullanılır.

Bir şeyi hesaplamanız gerekiyorsa, genellikle kitaplıkta veya örnek kaynak kodunda sizin için hesaplayabilen bir işlev vardır. Örneğin, Excel'in PMT () işlevi, bir borcu Y dönemleri boyunca% X oranında ödemek için gereken ödemeleri hesaplar. Gerçekten nasıl hesapladığını bilmek ister misiniz, yoksa sadece yerleşik olanı aramak yeterli mi?

Son 10 yılda, Matematik kütüphanesinden Ceil (), Min () ve Max () dışında bir şey kullanmam gerektiğini düşünmüyorum, bu da bilgisayarların matematik tabanlı problemleri çözmek için tasarlanmasına rağmen , günümüzde yaygın kullanım alanı veri akışı etrafında karar vermektir.

Örneğin, büyük miktarda koda sahip olan Facebook'u ele alalım. Muhtemelen orada bir yerlerde biraz Matematik var, ama muhtemelen bir sistem kütüphanesi olan Crypto API'de şüpheleniyorum. Ancak veritabanı erişimi, yetkilendirme kararları, sayfa oluşturma ve bilgi yönlendirme muhtemelen çok fazla Matematik kullanmaz.

Evet, çok fazla Matematik'e ihtiyaç duyan pazarlar var - finans, fizik, mühendislik - ancak bu endüstrilerde birincil disiplininizin Matematik / Ekonomi, Fizik, Mühendislik vb. Olma olasılığı daha yüksektir, bu yüzden sorularınız 'nasıl yazabilirim' Y dilinde f (x) formülü? '

Zamanınızı daha iyi kullanmanız IMO, Algoritmaları (Büyük O gösterimi dahil) ve Tasarım Desenlerini araştırmak olacaktır.


1
+1 çünkü makul bir ifade gibi görünüyor - bilmeniz gereken belirli bir formül yok, ancak algoritmik karmaşıklık kavramı (Big O notasyonu) çok önemlidir.
Michael H.

Bol miktarda matematik ... Hangi reklamların sizi rahatsız edeceğine karar verir.

Deneyimim seninki kadar düşük olmasa da, gerekli matematik miktarının genellikle oldukça düşük olduğunu kabul ediyorum - periyodik olarak grafiklerde trig şeyler kullanıyorum.
Loren Pechtel

7

Sizi daha iyi bir programcı yapabilecek bir formül yok.

Matematik ile ilgili beceriler sizi daha iyi bir programcı yapabilir:

  • Bilimsel yöntem - matematik / bilim düşünce tarzı ve problem çözme
  • Soyutlama - soyutlamaları ve örüntüleri tanıma yeteneği
  • Kalıtım - yeni problemlerin çözümünde mevcut çalışmaların / yöntemlerin yeniden kullanımı
  • Deneyim - bir takım problemleri ve çözümleri anlama

-1, adam yararlı MATEMATİK FORMU sordu. Bu cevabın kesinlikle kaldırıldığına inanamıyorum.
Jas


6

"Daha ağır" fonksiyonların hızlı tahminlerini elde etmek için oldukça faydalı olan Taylor serisinden bahsetmek istiyorum . Örneğin, sin(x)yaklaşık 0 ile yaklaştırılabilir x-(x*x*x/6).

Genel olarak, şeyleri son önemli basamağa hesaplamak yerine, hızlı bir şekilde yaklaşıklaştırmanın akıllıca yolları olduğu fikri (temel işlevler için, çoğu modern işlemcinin hızlı sabit kablolu uygulamaları içermesi nedeniyle, günahı yaklaşık olarak belirlemek için Taylor kullanmak o kadar önemli olmayabilir. hız kazancı).


3

De Morgan'ın Boolean "ve" ve "veya" olumsuzluklarına göre dönüşümüne ilişkin yasaları ve Boolean mantığıyla ilgili birkaç temel öğüt (çift olumsuzlama gibi).


2

Üç Kuralı (Çapraz Çarpma Türü)

Temel istatistik formülleri için +1.

Temel kurala bu basit kuralı uygulamakta zorluk çeken birçok adamı gördüm.


Çapraz çarpma için +1. Tamsayı taşma sorunlarına eğilimli bazı yazılımlarda, sonuçların taşmadığını kontrol etmek için çarpma kullanılır.
rwong

2
Önemli bir şey değil. Bu, CS okumak isteyen bir lise mezununun başına yerleşmelidir.
Job

@ İş: Teorik bir dünyada, bu doğrudur!
Pagotti


2

Birçok geometrik problem için çok önemli olan Kosinüs Hukuku ,

alternatif metin

özellikle açı belirleme.


bu denklemde gama nedir?
Matt Ellen

1
@Matt Ellen: C tarafındaki kenarın açısı (IOW, A ve B arasındaki açı)
Lie Ryan

2
Ve tabii ki, sağ üçgenler için özel durum:a^2 + b^2 = c^2
Kendine not - bir isim düşün

2

Programlama çok geniş bir alandır. Matematik formülü hangi programlama alanında olduğunuza bağlıdır. Eğer grafiklere, oyun programlamaya giriyorsanız daha fazla trigonometri, geometri bilmeniz gerekir. Oyun programlama fizik, görüntü oluşturma, gölgelendirici gibi alanlara ayrılabilir. Liste devam eder. Eğer bir fizik simülasyon uzmanı iseniz, o zaman Fizik ile ilgili şeyleri bilmelisiniz.
Eğer güvenliğiniz varsa, bir Sayılar Teorisi uzmanı olmanız gerekir.
Genel olarak, bunların kombinasyonuna gidebilirsiniz ve hangisi ilginizi çekerse. Öğrenme asla acıtmaz.


2

İspat Yöntemleri

En önemlisi, göreceli sıklıkta kullandıklarım:

Dahası var ve birçoğunu bir noktada kullandım, ama bunlar bir bakışta kullandığımı hatırlayabildiğim 3. Ayrıca, birim veya entegrasyon testleri yazarken niyetlerini akılda tutabiliyorsanız, son derece faydalıdırlar .


2

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

Master Teorem programlama için bilmek iyidir. Yinelemeli algoritmaların karmaşıklığını bulmanıza yardımcı olabilecek yineleme ilişkilerini çözmenizi sağlar. Bu, “böl ve fethet” tarzı algoritma yazarken özellikle önemlidir. Kabaca konuşmak gerekirse, her bir "adımın" ve dallanma faktörünün karmaşıklığını biliyorsanız, karmaşıklığı elde etmek için ana teoremi kullanabilirsiniz.


1
programlama için bilmek neden iyidir?
Matt Ellen

@MattEllen: Yinelemeli algoritmaların karmaşıklığını bulmanıza yardımcı olabilecek yineleme ilişkilerini çözmenizi sağlar. Bu, “böl ve fethet” tarzı algoritma yazarken özellikle önemlidir. Kabaca konuşmak gerekirse, her bir "adımın" ve dallanma faktörünün karmaşıklığını biliyorsanız, karmaşıklığı elde etmek için ana teoremi kullanabilirsiniz.
Tikhon Jelvis

1
  • cebir
  • trigonometri
  • vektör (matris işlemleri)
  • hesap
  • [çeşitli enterpolasyonlar ve türevleri]
  • [yüzeyler, NURBS]

(parantezdekiler daha çok "uygulamalı" türdendir)

Genel talimatlar vermek zordur, çünkü bulunduğunuz alana güçlü bir şekilde bağlıdır. Ancak yukarıdakiler oldukça fazla mühendislik derecesinin temellerini kapsar. Dikkat edin, bu kategoriler genellikle çakışır (trigonometri + matris ops., Matematik + matris ops., Vb.).

Her zaman yakın bir Matematik el kitabım var. Biri genellikle bir şeyden emin değildir ve organize bir şekilde sunulmasına yardımcı olur.


1

Boole cebirini bilmek çok yardımcı olur. Gibi kod yazmaktan korur

if (x < 10)
    return true;
else
    return false;

Boole cebirinin bir kullanıcının bunu yazmasını önlemeye nasıl yardımcı olduğunu anladığımdan emin değilim? Kullanıcının orada ne yazması gerektiğini önerebilir misiniz? (X <10 dönüşünü varsayarım; ancak yanlış olabilir.)
Chris

1
Haklısın - dönüş x <10 olmalıdır. Bu şekilde düşün. (X <10) değerinin değerlendirilmesi Boole sonucunu döndürür. İf ifadesi daha sonra (true) true değerini döndürürse [x gerçekten 10'dan küçükse] 'ye bölünür; veya [x, 10'dan büyük veya eşitse]] (false) ... else false döndürürse;
Eric Olsson

2
(X <10) iki iş vakasını birbirinden ayırabilir. Ayrıntılı form ile, değerleri minimumda tutabileceğiniz için, bakım modunda çok güzel olan değerleri döndürmekten daha fazlasını yapabilirsiniz

1

Optimizasyon sorunları için, günlük olasılığını anlamak iyidir. Örneğin, toplam kareleri en aza indirmeye çalışıyorsanız, bu olasılık günlüğünü en üst düzeye çıkarmakla aynıdır, çünkü (kabaca konuşursak)

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

Performans ayarı alanındaki diğer favoriler Binom ve Beta dağılımlarıdır. Hesaplamaları çok basittir.

Bir programın durumundan 10 rastgele zaman örneği alırsanız ve F = zamanın% 40'ı için belirli bir durumdaysanız, o zaman adil olmayan bir jetonla jeton atma deneyi gibidir. Bu durumda göreceğiniz sayı, ortalama 10 * 0.4 = 4 olan bir Binom dağılımı ve sqrt (10 * 0.4 * 0.6) = sqrt (2.4) = 1.55'in standart sapmasıdır.

Öte yandan 10 numune alırsanız ve 4 numune üzerinde bu durumda görürseniz, bu size F'nin ne kadar büyük olduğu hakkında ne söyler? Olası sonuçlar 0, 1, 2, 3, 4, ..., 9, 10'dur. Bu 11 olasılıktır ve (4) 'ü görme olasılığı 5'tir. Yani, 11 eşit (0,1) rasgele sayı alın ve sıralayın. Beşincisinin dağılımı, bir Beta dağılımı olan F'nin dağılımıdır. Modu 4/10. Ortalama 5/11. Varyansı 5 * 6 / (11 ^ 2 * 12) = 0.021 ve standart sapma = 0.144'tür.

Birçok kişi, yazılım performans sorunlarını bulmak ve yanlış olanları bulmaktan kaçınmak için çok sayıda örneğe ihtiyaç olduğunu düşünmektedir. Bu dağılımlar az sayıda örneğin maliyetiyle ilgili çok şey ortaya koyabildiğini göstermektedir.


0

Bu biraz basit olabilir, ancak G=(V,E)akılda tutulması gereken iyi bir şeydir. Başka bir deyişle, grafik bir köşe ve kenar kümesidir. Grafikler birçok şeyi temsil etmek için çok kullanışlıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.