Gördüğüm kadarıyla, resmi bilgisayar bilimleri eğitiminde big-O notasyonu ve zaman ve bellek karmaşıklığı çok vurgulanıyor gibi görünüyor ... kendi kendine öğretildiği halde, bu algı bu tür eğitimlere sahip insanların duyma ve okumaya dayanmaktadır. söyle ve yaz.
Genel fikirlerin ve kavramların önemli olduğuna inanmama rağmen, iletişim amaçları dışında bunun (büyük-O notasyonu ve çeşitli terminoloji gibi) resmileştirilmesinin neredeyse önemli olduğuna inanmıyorum. Birisi resmi gösterim ve terminolojiye aşina olmadığı için, belirli bir durumda bir algoritmanın diğerinden daha hızlı nasıl ve neden daha hızlı olacağını göremeyeceği anlamına gelmez. İnsanlar dengeli bir ikili ağaç aramak için geçen sürenin, herhangi bir biçimsel anlamda karmaşıklık teorisini ilk önce öğrenmeden düğüm sayısının taban-2 logaritması ile ilişkili olduğunu görebilirler, eğer ağacın nasıl çalıştığını anlarlar ve makul bir yüksek seviyeye sahiplerse okul matematik. Ne zaman karmaşıklığa ve bellek kullanımına dikkat etmeyi bilmek ve tipik ve en kötü durumları düşünmek önemlidir ... ancak bazı insanlar bunu yapmaz.
Gösterim ve terminoloji iletişim için önem kazanır. Bir algoritmanın performansının bir miktarını bir başkasına iletmek için güzel bir yol verirler. Sık sık makalelerde ve açıklamalarda yer aldığından, en azından belirsiz bir anlayışa sahip olmak daha kolay olur.
Bu yüzden evet, kavramlar önemlidir (ancak kaynaklar ve zaman yeterli olduğunda ancak veriler yeterli olmadığında). Ancak kavramlar önemli olsa da, bunların resmileştirilmesi genellikle o kadar önemli değildir - ve notasyon ve terminolojinin kavramların kendileriyle aynı olmadığını hatırlamak gerekir.
Düzenle:
Kavramları resmi olarak çalışmış biri kadar ayrıntılı olarak anladığımı iddia etmem, ancak genel fikirlerin çoğu mantıklı. Bunu resmi olarak incelemede bir değer olduğunu düşünüyorum, ama bu değerin bir kısmı hala var olmadan var olabilir.
Kavramları (resmi çalışma dışında) tanıtmaya gelince, iyi bir başlangıç, insanları veri yapılarının ne kadar bellek yükü olduğunu, algoritmaların hangi adımları içerdiğini ve bunların farklı verilerle nasıl değiştiğini düşünmeye teşvik etmek olduğunu düşünüyorum.
Ayrıca, bir ağacın dengeli olması durumunda ne olacağı ve mümkün olduğu kadar dengesiz olması durumunda ne olacağı ya da çoğu düğümün ağaçta kaç seviye olacağı veya kaç tane daha düğüm olabileceği gibi varsayımsal durumları ve değişiklikleri göz önünde bulundurmaya yardımcı olur. derinlik bir seviye artırılırsa tutun. Bu düşünme şekli, sadece karmaşıklığa bakarken değil, programcılar için genellikle yararlıdır; ve algoritmaların ve veri yapılarının farklı koşullar altında nasıl performans gösterdiğini düşünmeye uygulanırsa, doğal olarak karmaşıklığın daha resmi bir incelemesiyle aynı yönü gösterir.
O(n^2)
anlama geldiğini bilmiyorlar .