paint-brush
Büyük O Gösterimi: Nedir ve Neden Önemlidir?ile@inovak
1,206 okumalar
1,206 okumalar

Büyük O Gösterimi: Nedir ve Neden Önemlidir?

ile Ivan Novak4m2023/08/04
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

Big O ile iletişim kurmak, kariyerinin başındaki geliştiriciler için yüz eriten ilk geçişlerden biridir. Buradaki özellikle odak noktası, girdi boyutu arttıkça *en kötü senaryoda* çözümler arasında karşılaştırma yapılabilmesini sağlamaktır. Soyut olarak potansiyel çözümler (algoritmalar* demekle aynı şey) hakkında konuşabilmek istiyoruz.
featured image - Büyük O Gösterimi: Nedir ve Neden Önemlidir?
Ivan Novak HackerNoon profile picture
0-item

Bu eğlenceli birşey! Big O ile iletişim kurmak, kariyerinin başındaki geliştiriciler için ilk yüz eritme geçişlerinden biridir.


Nedenine bakalım.


Ama önce bir pit stop. İlkokuldaki kesinlikle saçma kelime problemlerini hatırlıyor musun?


Sally markete gitti ve 37 karpuz aldı. 20 doları vardı. Her karpuzun maliyeti 0,70 dolardır. Sally eve döndüğünde ne kadar parası vardır?


"Sally eve nasıl dönecek? 37 karpuzla mı?! Kavunlar için yeterli alana sahip bir Uber almak için 6,00 dolar yeterli olmayacak... Sally ne yapıyor?" diye merak mı ettiniz?

Aptal Sally.


Bazı insanlar bunun ağaçlar için ormanı kaybetmek olduğunu söylüyor. Bunun pratik problemleri oluşturmanın son derece tembel bir yolu olduğunu söylüyorum.


Big O Notasyonu'nun amacı , zanaatımızın kalitesi hakkında diğer insanlarla konuşabilmek, kelimenin tam anlamıyla iletişim kurabilmektir . Buradaki özellikle odak noktası, girdi boyutu arttıkça en kötü senaryoda çözümler arasında karşılaştırma yapılabilmesini sağlamaktır.


Soyut olarak potansiyel çözümler ( algoritmalarla aynı şey ) hakkında konuşabilmek istiyoruz. Bu çok önemli bir noktadır: Özette . Elimizdeki veriler hiç umurumuzda değil . Bu fikirlerle oynadığımızda teorik olarak devasa ama sonlu bir veri kümesi varsayıyoruz.


Elimizdeki verileri düşündüğümüzde bu somut bir mantıktır. Big O Notasyonunu düşündüğümüzde soyut mantık yürütüyoruz. Somut mantığa geri dönmek KOLAY. Hayatımızın çoğunu burada geçiriyoruz. Kolaydır, genellikle açıktır ve rahattır.

Şimdi caddeyi geçmeli miyim? Araba var mı? HAYIR? Tamam, çapraz.


Soyut mantık yürütürken bunu yapmayın!

Tanımlar, Hızla

Burada sana bir iyilik yapmamın sakıncası var mı? Yolunuza çıkabilecek bir sürü matematik terimi de var. İşte bazı yaygın Büyük O terimleri için en iyi durumdan en kötüye doğru sırayla bir görsel. Terminolojiye takılıp kalmak yerine düşünmeyi ve öğrenmeyi yapabilmemiz için bunlara ihtiyacımız var.


O(1) - "Sabit Zaman"

Girişin ne kadar büyük olduğu önemli değil, sistem sonucu her zaman aynı sürede döndürür.


O(log n) - "Günlük Zamanı"

Çözüm (veya algoritma) girdiyi yineledikçe, her yineleme daha da hızlanır!


O(n) - "Doğrusal Zaman"

Algoritma yinelenirken, her yineleme bir önceki yinelemeyle aynı süreyi alır.


O(n log n) - burada süslü bir terminoloji yok

Fikirlerin birleştirilebileceğini gösterir (evet). Biz yineledikçe, her yineleme yavaşlar ama oldukça yavaş bir şekilde yavaşlar.


O(n^2) - "n kare"

Her yineleme için yinelemeler oldukça hızlı bir şekilde yavaşlar.


O(n!) - "n faktöriyel"

Her yineleme için yinelemeler süper hızlı bir şekilde yavaşlar.


Amaç "n faktöriyel"den mümkün olduğunca uzak durmaya çalışmak ve Constant'tan çok daha kötüye gitmemeye çalışmak.


Bütün bunları anladıktan sonra şimdi aradaki boşluğu doldurmaya çalışalım.

Somut ve Soyut Düşünce Arasındaki Boşluğu Kapatmak

Büyük O Notasyonunu Anlamak

Büyük O gösterimi, bir algoritmanın (çözümün) performansını veya karmaşıklığını tanımlamak için kullanılır. Giriş boyutu büyüdükçe bir algoritmanın (çözümün) nasıl performans göstereceğine dair üst düzey bir anlayış sağlar.


Örneğin, O(n) karmaşıklığına sahip bir algoritmanın çalışma süresi, girdi boyutuyla doğrusal olarak artacaktır.

Somut ve Soyut Düşünce

Bu zorluk, geliştiricilerin belirli veriler hakkında akıl yürütmeyi algoritmanın kendisi hakkında akıl yürütmeyle karıştırdıklarında ortaya çıkar. "Ama bu veriler gerçek" gibi ifadeler bu kafa karışıklığının sinyali olabilir.


Gerçek veriler hakkında akıl yürütmek başlamanıza yardımcı olsa da çözümü mevcut girdiden ayırmak hayati önem taşır.

Neden Yanlış Anlaşılma?

Kariyerinin başındaki geliştiriciler, daha büyük ölçekli sorunlarla ilgili deneyim eksikliğinden veya mevcut bir sorunun ayrıntılarına fazla dalmış olmalarından dolayı bu hatayı yapabilirler. Ölçeklenebilir çözümler oluşturmak için somut ayrıntıları soyut karmaşıklıktan ayırmak önemlidir.

Pratik Sonuçlar

Girdi 100 veya 100.000 kat arttığında algoritmaya ne olur? İnanılmaz derecede karmaşık bir çözüm karmaşıklığı, daha büyük bir veri kümesiyle parçalanabilir.


Küçük veri kümeleri için iyi görünen bir algoritma, daha büyük veri kümelerinde önemli ölçüde başarısız olabilir ve bu da performans sorunlarına ve diğer zorluklara yol açabilir.

Soyut Düşünmeyi Öğrenmek

Sorunlar hakkında soyut düşünme yeteneğini geliştirmek, uygulama ve rehberlik gerektirir. Bazı stratejiler şunları içerir:


  • Soyut modeller oluşturma : Sorunları genelleştirilmiş bir şekilde temsil etme.


  • Algoritmaları verilerden ayrı olarak analiz etme : Algoritmanın belirli veri noktalarından bağımsız olarak nasıl davrandığını değerlendirme.


  • Ölçeklendirme senaryoları oluşturma : Algoritmanın değişen girdi boyutlarıyla nasıl performans göstereceğini hayal etmek.


Genel olarak soyut düşünme ve özel olarak Büyük O Gösterimi, algoritma tasarımında, diğer bir deyişle bir soruna çözüm bulmada temel becerilerdir.


Geliştiriciler, problem karmaşıklığını algoritma karmaşıklığından ayırmayı öğrenerek, yaygın tuzaklardan kaçınabilir ve tek başına çalışırken problem çözme yeteneklerini geliştirebilir VE bu şekilde nasıl iletişim kuracaklarını öğrenmek için benzer şekilde zaman harcayan diğer kişilerle birlikte çalışma becerilerini önemli ölçüde geliştirebilirler.


Karmaşık problemler çoğu zaman karmaşık çözümler gerektirmez. (Sally'nin muhtemelen başlangıçta 37 karpuza ihtiyacı yoktu… 37 karpuzla ne yapacak?!)