Algoritmalar, karar yöntemleri, performanslarının karşılaştırılması - sayfa 7

 
Alexandr Andreev :

Özetle, bir karakterden oluşan bir dize, 0 ila 255 arasında belirli bir koda sahip bir karakterdir ve 1 bayt ağırlığındadır ... ve bunun için yalnızca 256 değer olacak şekilde çok fazla bellek ayrılmıştır, 257 sığmaz orada, ilkine geri dönecek.

Evet, herhangi bir dizgede, her karakter 0 ile 255 arasında bir sayıya eşittir ... int 10000000 sayısını alırız - 4 bayt ağırlığındadır, "10000000" dizesine çevirir ve ardından her karakter için tek bir grafik olarak bellek ayırır 0'dan 255'e. .. toplam 8 bayt Hafızayı kaydetmeye yakın hiçbir yer yok

Seni anladım.

Bu çözümde tüketilen bellek miktarını doğru bir şekilde hesaplamak gerekir.

 
Реter Konow :

İkinci satırı yazmaya başlayabilirsiniz. Sonra üçüncü ve benzeri... :)

Şimdi, "kurucu"nuzun oluşturulmasının neden bu kadar uzun sürdüğü açık.
 
Vasiliy Sokolov :


ps Ah, evet, başka bir hatanız var. Üçüncü aramada MathRand, örneğin 1000 sayısını döndürür ve _3_1000_ yazarsa, seri numarası 1000 olan işlemde hangi sihir bulunacak?

Gerçek şu ki MathRand sadece sihirbazların sayısını simüle etmek için gereklidir.

Sihirli sayılar kullanıcı tarafından belirlenir ve 100.000'den küçük bir değeri atlayabilir (diyelim).

Ancak yukarıdaki örnekte bir hata olabilir. Haklısın.

Gözleminiz için teşekkürler. Tam bir çözüm bunu hesaba katmalıdır.

 
Реter Konow :

Seni anladım.

Bu çözümde tüketilen bellek miktarını doğru bir şekilde hesaplamak gerekir.


Aynı zamanda, bir çok kaynak israfı da iç bağlantılara gidecektir. bir dizgenin her karakterine erişmek, bir char[x] dizisine erişmekle aynıdır. Bu durumda bir başvuru, belirli bir dizi öğesine erişimdir. Ve onları orada büyük yığınlar halinde sıralayacaksın. int ile uygulama birçok kez daha kolay, daha net, daha hızlı olurdu ...

Dize uzunluk sınırı genellikle char[x] dizisindeki maksimum boyut sınırına bağlıdır - diğerleri gibi kendi maksimum sınırına sahiptir

 

Bir kişi içtenlikle kendi aptallığının boyutunu anlamıyor.
Dunning-Kruger etkisi iş başında.

 

Evet, her şey yolunda, sadece bir kişinin yazılmamış bir dile ihtiyacı var ve sorun yok))

hız farkı yine de
 
Vasiliy Sokolov :
ps Ah, evet, başka bir hatanız var. Üçüncü aramada MathRand, örneğin 1000 sayısını döndürür ve _3_1000_ yazarsa, seri numarası 1000 olan işlemde hangi sihir bulunacak?
Biraz daha "düşünecek" ve bu sorunu çözecek: anlaşmanın önüne bir alt çizgi, sihrin önüne bir sembol daha koyacak :)
 
Alexandr Andreev :

Aynı zamanda, bir çok kaynak israfı da iç bağlantılara gidecektir. bir dizgenin her karakterine erişmek, bir char[x] dizisine erişmekle aynıdır. Bu durumda bir başvuru, belirli bir dizi öğesine erişimdir. Ve onları orada büyük yığınlar halinde sıralayacaksın. int ile uygulama birçok kez daha kolay, daha net, daha hızlı olurdu ...

Dize uzunluk sınırı genellikle char[x] dizisindeki maksimum boyut sınırına bağlıdır - diğerleri gibi kendi maksimum sınırına sahiptir

Gelecekteki işlemlerin sayısını önceden bilmediğimiz için int ile uygulayamıyoruz. Her ticarette dizinin boyutunu tahmin etmemiz veya değiştirmemiz ve verileri ileri geri yeniden yazmamız gerekiyor.

Başka nasıl yapılır?

Çözümümün hızı çılgın.

Bellek tüketilir, ancak ne kadar verimsiz olduğu bilinmemektedir. Tam olarak öğrenmen gerekiyor.

 
Yury Kulikov :
Biraz daha "düşünecek" ve bu sorunu çözecek: anlaşmanın önüne bir alt çizgi, sihrin önüne bir sembol daha koyacak :)

Buradaki herkesin aksine, Peter'ın büyük olasılıkla en büyük sabra sahip olduğunu ve monoton kodlara hazır olduğunu belirtmek isterim. Yoksa nasıl bu kadar çok yazmayı başardığını anlatamam.

 
Реter Konow :

Gelecekteki işlemlerin sayısını önceden bilmediğimiz için int ile uygulayamıyoruz. Her ticarette dizinin boyutunu tahmin etmemiz veya değiştirmemiz ve verileri ileri geri yeniden yazmamız gerekiyor.

Başka nasıl yapılır?

Çözümümün hızı çılgın.

Bellek tüketilir, ancak ne kadar verimsiz olduğu bilinmemektedir. Tam olarak öğrenmen gerekiyor.


Bir dize için yalnızca iki seçenek vardır, ya başlangıçta maksimum boyuta sahiptir (yedekte) ya da bellek de tahsis edilir ve sizin durumunuzda, ekleme işlemi sırasında her seferinde tahsis edilir .... Yani, aynı int için bir dizinin boyutunu değiştirmek gibi. 1v1 peki, daha fazla karakter karşılaştırırken int'nin, dizenin 1 karakter için bellek ayırmasından %10 daha uzun bellek ayırması mümkündür - sanırım int için zafer

Neden: