Birçok genç programcı, bu sorunun cevabını bulmaya çalışırken webi tarar: Algoritma ve Veri yapısını nasıl çalışır? Kesinlikle, başlamak için iyi bir yer … Ama sanırım daha alakalı bir soru şu: algoritmalar ve veri yapıları nedir ve neden bunları incelemeliyim?
Bu motive edici tırnak ile başlayalım: “Her program algoritmalara ve veri yapılarına bağımlıdır, ancak az sayıda program yeni olanların icadına bağlıdır.” – Kernighan & Pike
Algoritma Nedir?
Vikipedi “bir algoritma gerçekleştirilecek adımların kendi kendine yeten adımlar dizisidir” diyor.
Algoritmalar, hesaplama, veri işleme ve / veya otomatik akıl yürütme görevlerini yerine getirir. ” Algoritmaları, veri yapılarını ve bunların önemini açıklamaya çalışırken hala bazılarımızın kelimelerle dolaşabileceğine şaşıracaksınız.
Basitçe, bir burger pişirirken veya iki sayı eklerken, sihirini orda çalıştıran bir algoritma var. Hisse senedi piyasalarının izlenmesinden petrol krizlerine, çiftlik ruh eşlerine çiftlik veriminin belirlenmesine kadar, algoritmalar her yerde mevcut.
İnternet’ten bir tanımı şudur: Bir algoritma, bir problemi çözmek veya bir görevi tamamlamak için ayrıntılı bir adım adım talimat seti veya formülüdür.
Bilgisayarınıza hangi görevin gerçekleştirileceğini söylemelisiniz, değil mi? Giriş-çıkış ilişkisini elde etmek için algoritmalara veya belirli hesaplama prosedürlerine ihtiyacınız var. Tekrarlama, sıralama ve koşullu mantık veya karar, günlük hayatınızda kendini gösteren hesaplama kavramlarıdır.
Sabah rutininiz bir algoritma olabilir. Nasıl tahmin edebilir misin? Harvard bilgisayar bilimcisi David J. Malan’ın görebileceği harika bir TEDEd karikatürü var.Video altyazısını açıp dilini türkçe yapmayı unutmayın.
Algoritmalar talimatlardan çok daha fazlasıdır. Onlara algoritmalar veya programlama temelleri deyin, önemli değil, önemli olan şey size bir süreçte açık adımlar tanımlamayı ve farklı adımlar anlamında çözümleri kavramlaştırmayı öğretmeleridir.
Örnekler
Kanada, Waterloo Üniversitesi’nden Prof. William Cook önderliğinde iki yıllık bir proje hakkında bu makaleyi okuyun. Matematik ekibi TSP’ye yeni boyutlar ekledi; Google Haritalar’ı kullanarak İngiltere’de yaklaşık 25.000 bara ulaşmak için mümkün olan en kısa mesafeyi hesapladılar. Yol daireseldir, en uzun mesafe 50 saat ve ortalama mesafe bir saattir. Bu listede her bir bara gitmek istersen, 28.270 mil için hazır ol.
William Cook şöyle dedi: “Bir sürü dolaşan bar meraklısı geliştirmek için yola çıkmadık.” Ama aynen böyle yaptılar!
Her şey gelecekteki sonuçların unutulması ve bu dakikanın üstesinden gelebilmenizle ilgilidir. Anlıyorum! Bir telefon defterinde bir isim bulmak için hangi yaklaşımı kullanırsınız? Kaba kuvvet algoritması.
İyi günler, algoritmanın nasıl çalıştığına gelelim (kaba kuvvet algoritması) ; zillion isimlerinden geçer ve çabucak bulursunuz, diğer bir deyişle, yeterince iyi bir çözüm bulana kadar tüm olasılıkları deneriz. Bir suçlu(hacker), deneme yanılma yaklaşımı olan kaba kuvvet yöntemini şifreli verileri kırmak için kullanabilir. Sorunun karmaşıklığı (boyutu) artarsa, bu çok iyi çalışmaz.Örnek vermem gerekirse ;
Kullanıcı adınız : Admin
Şifreniz : 123456
Ve suçlu kullanıcı adınızı öğrendi 1den 9999999 kadar olan sayıları döngüye soktu.Döngü her döndüğünde bu sayıları teker teker şifreniz mi diye kontrol ediyor. Bingo 123456. denemesinde buldu ! Ancak şifrenizin karmaşılıklığı artarsa içinde harf sayı ve sembol içerirse bu işe yaramicaktır.Bunun yanı sıra büyük firmalar ise üst üste yanlış deneme hakkı sınırı koymaktadır.Şimdi bir soru :
90’lı yılların sonlarında hatırlıyor musun IBM’in Deep Blue, o sırada hakim olan satranç şampiyonu Garry Kasparov’u yenmek için kaba kuvvet yöntemleri kullandı? Devam ettik ve hesaplama yetenekleri inancın ötesine geçti.
Veri sıkıştırma algoritmalarına sahip mp3’ten JPEG’e Zip dosyasına, zaman ve mekan tasarrufu yaparak dosya boyutunu küçültür. Huffman yaygın olarak kullanılmaktadır; Çoğu yinelenen bayt en küçük bit sayısını temsil eder. Bu aynı zamanda açgözlü bir yaklaşımdır ve en iyi kodlamayı bulmak için iyi çalışır. İstenilen ve gerçek çıkış sinyalleri arasındaki hatayı bir uydu servisi veya bir fabrika robotu için asgari düzeyde tutan bir algoritmaya ihtiyacınız olacak, evet? Bu, bir kontrol döngüsü geri besleme mekanizması kullanan oransal integral türevi (PID) algoritmasıdır. Elektronik bir geçmişten geliyorsan, ısıtma ve soğutma sistemlerinde PID kontrolü hakkında konuştuğumu biliyorsun. Yapay pankreas sistemleri üzerinde çalışan Harvard araştırmacılarına göre bu algoritma tahmin kontrolünü (MPC) kaybetmiş olabilir, ancak kesinlikle çip üzerinde laboratuvar cihazları için harikalar yaratıyor.
Bu sevimli bir konudur. Devam edebilirim. Ama elbette yapmayacağım. Bu blog post-data yapılarının bir sonraki konusuna meraklı olarak devam ediyoruz.
Veri Yapısı nedir ve neden incelemek gerekir?
Hiçbir biggie bu … veri yapısı düzenli bir veri düzenlemesi anlamına gelir. Anahtar belgeleri dosyalama kabinindeki klasörler halinde ayarlarken ihtiyacınız olan şey. Böyle bir sistem olmadan yasal bir katip hayal et! Shudder … Bir ansiklopedi veya banka ifadesi olsun, bu veri özetleri hakkında rastgele bir şey yoktur. İkili ağaçları veya ilişkisel dizileri düşünmeyin; bir alışveriş listesi düşün. Mucho daha kolay mı Veri yapıları nesneleri depolar ve manipüle etmelerine izin verir. Bir veri yapısının matematiksel bir modelini soyut veri türü (ADT) olarak adlandırırsınız. Burada ikili ilişkiler nesneleri birbirine bağlayabilir. Veri yapıları doğrusal (diziler, yığınlar, bağlı listeler veya kuyruklar) veya doğrusal olmayan (ağaçlar, grafikler, tablolar veya kümeler) olabilir.
Neden onlardan bahsediyorum? Soyutlamalar, bilim adamlarının gerçekte neyin önemli olduğuna, büyük resme odaklanmalarına ve enerjilerini cesur kütlesi üzerinde tüketmemelerine yardımcı olur. ADT, bir tanımlama mekanizmasıdır ve verilerin düzenlenmesi ve işlenmesi için önemlidir. Dalgalanan hisse senedi fiyatlarının bir grafiği, dünyanın para piyasalarının nasıl bir yol izlediğini soyutlamaktadır. Veya soyutlamanın başka bir günlük örneği arabamın başında ne olduğunu tam olarak bilmeden bana ağrı kesici almak için beni eczaneye ulaştıran araç olacaktır.
Nesneler artı İşlemler ADT’ye eşit. Uygulama gizli. Yani, müşteri, işlemlerin ne olduğunu bilir, ancak türün nasıl uygulandığını bilmiyordur. Örneğin, bir ADT tanımlamak için, bu nedenle kayıtları veya sınıfları, rutinleri veya yöntemleri tanımlamanız gerekir. Diyelim ki, kütüphane, gecikmiş para cezaları ödenmesi gerektiği zaman saklamak için programı değiştirir. Her ne kadar bunu bilmeseniz de, gerekirse onu dışarı atacaksınız. Fakat bir veri yapısı ADT’nin nasıl uygulandığını ve diğerlerinden farklı olarak verilerin nasıl saklandığını ve işlemlerin nasıl yürüdüğünü anlatır. Örneğin, Java kaynak kodu, yalnızca sınıfları uygulayanların erişebilmesi gerekir; bu nedenle, diğer programcılar yazılımla oynayamazlar.
algoritmaları ve veri yapıları
Programcıların hepsi için bir başka motivasyonlu alıntı ile bitireceğim: “Aslında, kötü bir programcı ile iyi bir programcı arasındaki farkın, kodunu veya veri yapılarını daha önemli görüp görmeyeceğini iddia edeceğim. Kötü programcılar koddan endişe eder. İyi programcılar, veri yapıları ve ilişkileri hakkında endişeler. “- Linus Torvalds
Sadece tekrarlamak için, bir tuğlayı başka bir yere koyarak bir ev yapamazsınız – bir sorunu anlamanız, bunun için uygun bir çözüm bulmanız ve nasıl uygulayacağınızı bilmeniz ve tüm bunları büyük resmin görmezliğini kaybetmeden yapmanız gerekir.
Algoritmalar hakkında makalelerime aşşağıdaki linkten ulaşabilirsiniz.
http://ramazanakbuz.com/category/algoritma/