Hashtable tabanlı çözüm
Hashtable'ın karmaşıklığı neden yaptığından emin değilim Ω(n2) Eğer nolduğu karakter sayısı (değil kelime).
Belgedeki her karakteri yinelerseniz ve yinelediğinizde, kelimenin karma kodunu hesaplarsanız, nkarakter. Yani, bir harfle karşılaşır karşılaşmaz kelime başlar, bu yüzden kelime bitene kadar hash hesaplamaya başlayın (noktalama için bazı özel durumlar vardır, ancak bunlar karmaşıklığı etkilemez). Her kelime için, karma hesaplandıktan sonra, onu bir hashtable'a ekleyin. Bu, her kelimeyi iki kez gözden geçirmekten kaçınmaktır, yani ilk önce kelimeleri bulmak için belgeyi tekrarlamak ve daha sonra bunları bir karma tabloya eklemek, ancak bu durumda karmaşıklık da olabilirΩ(n).
Hashtable'daki çarpışmalar kesinlikle bir sorundur ve orijinal hashtable'ın ne kadar büyük olduğuna ve hash algoritmasının ne kadar iyi olduğuna bağlı olarak, O(1) ekleme ve sayma işlemleri için ve böylece O(n)algoritma için, ancak bellek pahasına. Ancak, en kötü durumun nasıl ortaya çıkabileceğini hala takdir edemiyorumO(n2) Eğer n karakter sayısıdır.
Varsayım, karma algoritmanın karakter sayısına göre zaman içinde doğrusal olmasıdır.
Radix sıralama tabanlı çözüm
Alternatif olarak, İngilizce varsayarsak, kelimelerin uzunluğu iyi bilindiği için, bunun yerine bir ızgara oluşturur ve O(kN) nerede k İngilizcedeki bir kelimenin maksimum uzunluğu ve Ntoplam kelime sayısıdır. verilmişn belgedeki karakter sayısıdır ve k bir sabittir, asimptotik olarak bu miktarlar O(n).
Şimdi her kelimenin sıklığını sayın. Kelimeler sıralandığından, aynı veya farklı olup olmadığını görmek için her kelimeyi bir önceki kelimeyle karşılaştıracağız. Aynı ise, kelimeyi kaldırır ve öncekine bir sayı ekleriz. Farklıysa, sadece 1 sayısını yapın ve devam edin. Bu gerektirir2n karşılaştırmalar nerede n karakter sayısı ve dolayısıyla O(n) bir bütün olarak karmaşıklık içinde.
İngilizce'deki en uzun birkaç kelime gülünç derecede uzundur , ancak daha sonra kelime uzunluğu makul bir sayı (30 veya daha küçük gibi) ile sınırlanabilir ve beraberinde gelebilecek hata payını kabul eden sözcükleri kısaltabilir.