Algoritmada matematiğin önemi nedir?

Algoritmik

Hectopat
Katılım
6 Temmuz 2022
Mesajlar
4.311
Çözümler
6
Algoritma öğrenmeye baslamak için matematiği çok iyi bilmek mi gerekiyor?
Herhangi bir şart var mı algoritma için?
 
Daha önce aynı sorunun sorulduğu başka bir konuda yazdığım cevabı aşağıya ekliyorum:

Soruyu sadece yazılımla değil, bilgisayarın tüm alanıyla ilgili olarak cevaplamak istiyorum. Öncelikle yazılım alanında matematik bilirsek program yazarken istediğimiz algoritmayı daha efektif bir yoldan halletmiş oluruz. Bu demek değildir ki matematiği iyi bilmeyen birisi iyi kod yazamaz. Yazar, fakat arka planda matematikte bilmediği bir şeyi aslında kendisi bulmuş olur ya da uzun yoldan yapar. Mesela bunları şöyle açıklayayım:

1) Matematiği bilmeyen biri 5x5 boyutundaki bir resmi nasıl yan yatırır?



Yazılımcının düşüncesi: “Resmi sola yatırmam demek resmin üst yatay tarafını sol tarafta yukarıdan aşağıya (dikey) indirmem demektir:”



|=====>



Yani aslında bu kişi matematik bilmese bile bu işin algoritmasını kurdu ve güç bir yoldan yaptı ama matematik bilen birisi bunu çok rahat anlayacak ki buna matematikte “Matrisin Devriği (Transpose of Matrix)” deniyor Bu da matematikte matris konusunu bilen yazılımcının algoritmik düşüncesi:



Görüldüğü üzere matematik bilmeyen bir yazılımcı bu işi mantığını kullanarak aslında matematikteki matrisin transpozunu bilmeden yaptı.

2) Matematiği bilmeyen bir yazılımcı A’dan B’ye kadar olan sayıları nasıl toplar?
A = 83
ve B = 1887 diyelim.

Yazılımcının düşüncesi: “Bir tamsayı değişkeni belirleyip ilk değer olarak 83’ü atayayım: int t = 83. Daha sonra da 1887´ye kadar sayan bir döngü kurup t değişkenine bu döngüdeki sayı değerini atayayım:”



Mesela burada yazılımcı matematik konularından mahrum olmanın cezası olarak zaman alan bir döngüyle işi halletmeye çalıştı. Sıkıntı şu; A’dan B’ye kadar olan sayılar ne kadar çoksa döngü de o kadar kez çalışıyor, bu da performans kaybı demektir. Halbuki Gauss yöntemini bilen bir yazılımcı bunu çok basit ve kısa zamanda sonucu bulacak şekilde tasarlayabilirdi. İlk sayı a, b ise son sayı):


Görüldüğü gibi formül asla sayının ne kadar büyük olduğuna bakmadan hemen sonucu veriyor: 1777925

Daha fazla uzatmak istemiyorum. Bunun yerine kabaca şöyle diyebilirim:

  • Görüntü işleme konusuyla ilgileneceksen matrisleri ve doğrusal cebiri (+ trigonometri de lazım olur) bilmelisin.
  • Algoritma performans analizi yapmak için köklü sayılar, üslü sayılar ve logaritma bilmeni öneririm.
  • Oyun motoru veya oyun programcılığı için trigonometri ve doğrusal cebir bilmelisin.
  • Üçgenlerin ve yuvarlakların olduğu her yerde trigonometri bilmek önemli. Mesela herhangi bir grafik kütüphanesi kullanmadan şekiller çizmen lazım ya da sıfırdan bir grafik kütüphanesi yapıyorsun ve haliyle bu şekilleri oluşturan fonksiyonları trigonometri kullanarak kendin yazacaksın.
  • Bilgisayar organizasyonu gibi bir konuyu devreler konusuyla birleştirip işin içine devreleri sokarsan boolean cebiri (hoş bu ayrık matematik altında bulunan ve normal matematikte olmayan bir konu – yani bilgisayarcılar-elektronikçiler için bir konu aslında) bilmen faydalı olur.
Uzatılabilir.

Kısaca tekrar etmem gerekirse matematik bilmeden çok iyi programlar yazabilirsin ama bazı konularda matematikte ilgili konuyu bilmediğin için o işi yapamayabilirsin. Yani Android Studio’da bir mobil uygulama yapmak için matematiği iyi bilmene gerek yok ama işin temeline inip daha iyi algoritmalar tasarlayabilmek için ve diğer başka matematik gerekli olan işler için matematikte ilgili konuları iyi bilmelisin.

Sana şunu söyleyeyim: Matematik okullarımızda anlatıldığı gibi, ne idiği belirsiz olan, oradan oraya akan anlam veremediğimiz sayılar ve ezbere yapılan bir alan değildir. Ben okulda matematiği hiç anlamayan biriydim. Bu yüzden canım çalışmak da istemezdi. Ne zaman çalışmaya kalksam okullar ve sınavlar için yazılmış, matematiğin aslına uymayan kitaplardan matematik öğrenemediğim için matematiğe ısınamamıştım. Lakin matematikteki bu konuların sırf eğlence olsun diye değil, gerçek hayattaki bazı sorunları çözmek için keşfedildiğini düşünürdüm ve bu yüzden de öğrenme isteği oluşurdu. Daha sonra Amazon sitesinden İngilizce olarak yazılmış matematik konularının her biri ayrı kitap olarak yazılmış olanları bulup okumaya başladım ve hala daha okuyorum ve öğreniyorum. Sana da tavsiyem okul için ezbere formüllerle anlatan ve konunun neye hizmet ettiğini anlatmayan okul/sınav kitaplarından uzak dur ve okuldan/sınavdan bağımsız olarak yazılmış (ki benim bildiklerim İngilizce) matematik kitaplarından konuyu öğrenmek için çaba göster. Daha sonra göreceksin ki matematikte olan konuların hiçbirisi öğrencilerin derslerden geçip geçemeyeceğini ölçmek için keşfedilmemiş, gerçek hayattaki sorunları ölçmek için ya da basitleştirmek için keşfedilmiş. Bilgisayarları ve yazılımları da gerçek hayattan ve mantıktan ilham alarak tasarladığımız için matematik işimize yarıyor.

Eğer amacın şu an için programlama dili öğrenmek ise çok fazla veya karmaşık matematik ağırlıklı örnekler çözmene gerek yok. Daha iyi programlamayı anlatan kitaplar var. Matematik konularını şimdiden programlama ile beraber öğrenmeye çalış. Daha sonra veri yapıları ve algoritmaları öğrenmeye çalış. Eğer matematik öğrenmeye daha başlamadıysan işte bu noktada matematik konularını da bu konuyla beraber öğrenmeye çalış. Çünkü veri yapıları ve algoritma analizi içerisinde matematik konularını barındırırlar. Şunu unutma bilgisayar ve yazılım asla programlama dili bilmek değildir. Dil sadece araç olarak kullanılır. Asıl önemli olan gerekli iş için en uygun algoritmayı tasarlayabilmek ve bilgisayarda uğraştığın alanı iyi bilmektir.

Asıl konu:

 
Yanıtınız için çok teşekkür ederim.
Bir kurs almıstım c#, normal bir şekilde öğrenmeye çalışıyordum ama algoritmanın gerekli oldugunu düşündüğüm için ara verdim kursa. Şu an matematik çalışıyorum belli bir aşamaya geleyim algoritma ve programlamaya devam ederim yanlıs düşünmüyorum değil mi?
 
Amator birisi bu soruya 4 islem bilsen yeter diyecektir.

Formal egitim alan birisi ise farkli algoritma gelistirme alanlari icin farkli matematik alanlarina hakim olman gerektigini sana soyleyecektir.

- Analitik/ Kartezyen Geometri -> 2D, 3D hesaplamalar. Ustteki image rotation hem lineer hem de analitik geometri bilgisi gerektirir.
- Sayilar Teorisi -> Fibo, asal sayilar, hashing
- Istatistik -> Heuristik algoritmalar, mean ~ var hesaplamalari, regression
- Lineer cebir -> Matris, ML algoritmalari
- Prob -> Naive Bayes' gibi hizli calisan algoritmalar, expected value hesaplamalari ( spor istatistikleri ve )
- Discrete Math -> Kombinasyon, permutasyon, induction algoritmalari
- Calculus -> Diger tum konular icin temel
- Graph/ Set Teori -> Navigasyon ve kume islemler

Bunlari hic bilmeden ufak tefek algoritmalar gelistirip basarilar kazanabilirsin.

Bu islere hic matematik bilmeden kalkisip basit bir otomat makinesinin verecegi para ustunu dahi hesaplayamayan koca koca adamlar var. Tavsiyem genc yasta matematikle birlikte goturun.
 
Yanıtınız için teşekkür ederim.
C# öğrenmek için bi kurs almıstım fakat önce algoritma sonra bu kursa bakayım dedim bu seferde matematik bilgim zayıf oldugu için direkt mat çalışmaya yöneldim kafamdaki mat > algoritma> programlama
Bu sekılde öğrenmeye başlayacağım mantıklı olur mu? Mat bilgim fazla yok unuttum her seyi sıfırdan başlıyorum. Nasıl hareket etmem gerekir?
 

Algoritma cok genis bir konu, nihai amacin algoritmayi cok cok iyi ogrenmekse matematik ~ algoritma birlikte calismalisin.

Nihai amacin programlama ogrenmekse mat ~ algoritma ~ data structure birlikte calismalisin.

Bence klasik egitim plani olan, asal sayilar, fibonacci sayilari, tree traversal , sorting, searching, graph , set vs gibi konular uzerinden hem dili hem de arka plandaki mat / algoritma bilgisini kapabilirsin.

Eger aldigin egitim bunlari kapsiyor ve seni dogru sekilde dogru kaynaklara yonlendiriyorsa ise yarar. Yok sadece "C# da liste boyle yapilir, encapsulation soyle yapilir" diyorsa bir ise yaramaz, onu zaten Microsoft dokumanindan daha dogru sekilde ogrenirsin.
 
Hocam hepsini bir götürecek zamanım yok, mat ve türkçeye çalışıyorum. Extra olarak dediklerinizi yapamam bu durumuna göre bir şey söyleyebilir misiniz? Evet dediğiniz gibi veri tipleri, operatörler, arayüz tanıtımı vs yapıyor kursta.
 

O halde ogrencisin, zaten bu isi hakkiyla yapacak zamanin yok. Olsa da dersler daha onemli.
Kursla devam edip kendine bir kac uygulama yaparsin, sonra da universite kazanip daha ciddi projeler vasitasiyla gelistirirsin kendini. Full time is bu cunku, arada goturulecek bir sey degil.
 
Hocam tam olarak böyle değil.
Benim amacım kursu bitirmek fakat bu kursu bitirirken nelere ihtiyax duyacağım yani tam donanımlı bitirmek istiyorum .

yani algoritma bilmeden ilerlenmiyorsa amacım algoritma öğrenip devam etmek.
alttan dersim var ve bu dersi geçmem için proje götürmem gerekiyor c# dilinde.

bahsettiğim kursun konularını size atıyorum hiçbir sey bilmeden ilerlenecek düzeyde mi kontrol etmenızı istiyorum buna göre de bana bi reçete yazarsınız


1. Kurulum
2. Arayüz Tanıtımı
3. Hello World Yazdırma ve Yorum Satırı
4. Veri Tipleri
5. Operatörler
6. Break Point ve Tooltip Önemi
7. Kullanıcıdan Değer Alma
8. Tür Dönüşümleri
9. Karar Yapıları
10. Switch Case Yapısı
11. Döngüler(Loops)
12. Diziler(Arrays)
13. Metotlar(Methods)
14. Classlar
15. Kapsülleme
16. Static ve ArrayList
17. Erişim Belirleyiciler
18. Inheritance
19. Polymorphsim
20. Interface
21. Abstract Classlara Giriş
22. Enum
23. Generic Koleksiyonlar
24. Generic Classlar
25. Windows Form
26. Kütüphane Otomasyon Yapımı
27. Araba Yarışı Yapımı
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…