Genel sınıflar kütüphanesi - hatalar, açıklamalar, sorular, kullanım özellikleri ve öneriler - sayfa 9

 
Peter Konow'un fotoğrafı.
İki fonksiyon ve bir dizi kullandığımı çözüme ekleyeceğim. İşaretçi veya bağlantı yok.

Çözümünüz iyi değil. Zaten 100 kelime için 100x100x255'lik bir dizi ayırdınız, yani. 2.550.000 hücre! Ve 10 0000 kelime varsa, 32 bit sistemlerde bellek sınırına ulaşılacaktır. Ya 100'den fazla çarpışma varsa? S harfi ile başlayan ve P harfi ile başlayan kaç kelime vardır? - Açıkça 100'den fazla ve neden şimdi bu nedenle onları saklamıyorsunuz?

 
fxsaber :

Onlar. her görev için sözlüğün boyutu (RAM) ile karma işlevinin (CPU) hesaplama karmaşıklığı arasında bir orta yol bulmanız gerekir.

Evet doğru. Aşağıda hash fonksiyonlarının gereksinimleri hakkında yazacağım.
 
fxsaber :

Tüm bu yazılanlardan sonra, başlıkta tartışılan şekilde keneleri saklamanın pratik bir görevi olmadığını düşündüm. Zamana göre sıralanırlar ve basit bir dizide bulunurlar.

Benzer şekilde Geçmiş Siparişler/Anlaşmalar. Depolanmış, HistorySelect'e göre, zamana göre dizide de depolanırlar. Ve orada (mevcut uygulamada) bilet veya kimliğe göre bir kayıt aramak için tartışılan hiçbir şey olmadığını hissediyorum.

Ve hepsi, adlandırılmış tarih söz konusu olduğunda bir şeyi çitle çevirmenin uygun olmadığı için. Pratik yapmak için basit bir dizi yeterlidir.

Belki evet.
 
fxsaber :

Şapka ve gereksiz varlıklar şeklinde ayak örtüsü olmadan kısa ve öz yazmak için büyük bir istek.

Bu bir vaka çalışması çok üzgünüm ama hayır. Doğru, savaş versiyonunda kodun şöyle yazıldığını not ediyorum: mümkün olduğunca kısa ve verimli (istediğiniz gibi). Eğitim örneklerinde, kod herkes için olabildiğince basit ve anlaşılır bir şekilde yazılmıştır, böylece deneyimsiz bir kullanıcı bile anlayabilir.

ps Şapkalar, tamam, ben temizleyeceğim.
 
Vasili Sokolov :

Doğru, savaş versiyonunda kodun şöyle yazıldığını not ediyorum: mümkün olduğunca kısa ve verimli (istediğiniz gibi).


Gerçekte, projelerde kodlar "davranış kurallarına" göre yazılır.
Ve fxsaber gibi bir seçenek kullanılmaz:

 bool Contains( string word)
{
   return words[word[ 0 ]- 'a' ] != NULL ;
}

Nedeni banal - uygun hata ayıklamanın imkansızlığı.

 
Vasili Sokolov :

Çözümünüz iyi değil. Zaten 100 kelime için 100x100x255'lik bir dizi ayırdınız, yani. 2.550.000 hücre! Ve 10 0000 kelime varsa, 32 bit sistemlerde bellek sınırına ulaşılacaktır. Ya 100'den fazla çarpışma varsa? S harfi ile başlayan ve P harfi ile başlayan kaç kelime vardır? - Açıkça 100'den fazla ve neden şimdi bu nedenle onları saklamıyorsunuz?


Peter Konow kodundan önerilen kodu incelemek için geri döndü.
Üzgünüm, ama bu tamamen karanlık ve genel olarak karma konusunun tamamen yanlış anlaşılması, hash tablolarından bahsetmiyorum bile.
Habr'a gidebilir ve en azından hash konusunu öğrenebilirseniz, neden bu tabutu tekerlekler üzerinde yarattınız?

Evet, kendi hash tablonuzu yeterince uygulamak önemsiz bir iş değil.
Ancak önerilen kodlarda herhangi bir anlayış söz konusu bile değil.

 

Arkadaşlar. Konunun ölü olduğunu görüyorum.

Tartışmaya karışmak istemiyorum ve bu yüzden gönüllü olarak ayrılıyorum.

Belki de kütüphanede birçok ilginç şey vardır.

Tartışmak.

(Benim çözümüm zaten daha kötü çünkü 3,2 kat daha yavaş.)

 
Vasili Sokolov :

Çözümünüz iyi değil. Zaten 100 kelime için 100x100x255'lik bir dizi ayırdınız, yani. 2.550.000 hücre! Ve 10 0000 kelime varsa, 32 bit sistemlerde bellek sınırına ulaşılacaktır. Ya 100'den fazla çarpışma olursa? S harfi ile başlayan ve P harfi ile başlayan kaç kelime vardır? - Açıkça 100'den fazla ve neden şimdi bu nedenle onları saklamıyorsunuz?

Bir dizinin boyutu, bir sözlüğün boyutuna uyacak şekilde kolayca değiştirilebilir.

Sonsuz seçenekler dikkate alınmaz.

 
Sergey Dzyublik :


Peter Konow kodundan önerilen kodu incelemek için geri döndü.
Üzgünüm, ama bu tamamen karanlık ve genel olarak karma konusunun tamamen yanlış anlaşılması, hash tablolarından bahsetmiyorum bile.
Habr'a gidebilir ve en azından hash konusunu öğrenebilirseniz, neden bu tabutu tekerlekler üzerinde yarattınız?

Evet, kendi hash tablonuzu yeterince uygulamak önemsiz bir iş değil.
Ancak önerilen kodlarda herhangi bir anlayış söz konusu bile değil.

Bu kod başlangıçtır. Hiç kimse daha fazla gelişme yapmakla uğraşmıyor.
 
Vasili Sokolov :

Çözümünüz iyi değil. Zaten 100 kelime için 100x100x255'lik bir dizi ayırdınız, yani. 2.550.000 hücre! Ve 10 0000 kelime varsa, 32 bit sistemlerde bellek sınırına ulaşılacaktır. Ya 100'den fazla çarpışma olursa? S harfi ile başlayan ve P harfi ile başlayan kaç kelime vardır? - Açıkça 100'den fazla ve neden şimdi bu nedenle onları saklamıyorsunuz?

Benim versiyonumda, 100'den fazla çarpışma olamaz. Aynı harfle başlayan ve aynı sayıda harfe sahip 100'den fazla kelime düşünebilir misiniz?

("metin 1", "metin 2", "metin 3", "metin 4", "metin 5"... hariç)