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

Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
İşte giriş alanıyla birlikte kod. (Belki birileri işine yarar. Düzeltebilirsin).
Sadece bir nedenden dolayı dördü üzerinde tamamen çalışıyor. Beşte, alan görünmez. Nedenini aradım ve bulamadım.
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.
Nispeten evet.
Küçük eleman değerleri için, en uygun sözlük elemanların karesi sayısı olacaktır (3 yıl önceki dersten hatırladığım kadarıyla, ancak her zaman iki kez kontrol etmek daha iyidir).
Çok sayıda öğe nedeniyle en uygun boyutu seçmek mümkün olmadığında, sözlük boyutu beklenen öğe sayısından birkaç kat daha büyük alınır ve örneğin çarpışmaların her biri için dahili karma tabloları aracılığıyla çarpışma çözünürlüğü optimize edilir. .
Karmayı olabildiğince çabuk aranacak şekilde seçmeye çalışırlar, ancak elde edilen sonuçların sözlüğün boyutuna göre düzgün dağılımını sağlarlar.
Dağılımın tekdüzeliği, hash'lerde asal sayıların kullanımı ile ilgilidir.
Büyük harfler farklı bir koda sahip olduğundan ve dizinin "bırakılmasından" dolayı dizinin boyutunu artırmak zorunda kaldım.
"A" karakterinin kodu, "a" karakterinin kodundan tam olarak 32 farklıdır. Buna göre, diğerlerinin hepsinde de 32 fark vardır.
Belki dizinin boyutunu büyütmek gerekli değildi, sadece ilk karakteri değiştirmek yeterliydi."A" karakterinin kodu, "a" karakterinin kodundan tam olarak 32 farklıdır. Buna göre, diğerlerinin hepsinde de 32 fark vardır.
Belki dizinin boyutunu büyütmek gerekli değildi, sadece ilk karakteri değiştirmek yeterliydi.Kabul ediyorum. Bu algoritma iyi gelişmemiştir.
Dizi boyutu çok büyük. Dün, harflerin kodlarını tam olarak anlamadım.
İşte giriş alanıyla birlikte kod. (Belki birileri işine yarar. Düzeltebilirsin).
Sadece bir nedenden dolayı dördü üzerinde tamamen çalışıyor. Beşte, alan görünmez. Nedenini aradım ve bulamadım.
Ve bir not daha: Vasily'nin örneğinde, bir diziden söz edilir.
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
Genel sınıf kitaplığı - hatalar, açıklama, sorular, kullanım ve öneriler
Vasiliy Sokolov , 2017.12.07 14:30
1 numaralı ilişkisel dizi hakkında mümkün olduğunca basit
Generic'te sunulan algoritmaların çoğu, şu veya bu şekilde bir ilişkisel dizi veya sözlüğe dayanmaktadır. Ayrıca en sık kullanılan iki algoritmadan biridir. Programlamadaki tüm görevlerin %90'ının diziler ve sözlükler tarafından kapsandığını söylersem gerçeğe yakın olacağımı düşünüyorum. Uygulamaya geçmeden önce, bazı detayları kasıtlı olarak basitleştirerek, sözlüğün çalışmasını mümkün olduğunca basit ve anlaşılır bir şekilde anlatacağız.
Sözlüğü çok basit bir örnek kullanarak analiz edeceğiz: sıradan bir kelime sözlüğü. Diyelim ki elimizde bu kelimelerden sadece birkaçı var ve hepsi alfabenin farklı harfleriyle başlıyor:
İngiliz alfabesi 26 karakter içerir. 26 elemanlı bir dizi dizi oluşturalım:
Şimdi, kelimeleri ilk harflerine karşılık gelen dizinlerde saklamayı kabul edersek, en basit sözlüğü elde ederiz. İndekslemeyi sıfırdan yapacağız. "Elma" kelimesi 0 dizininde saklanacaktır, çünkü "a" karakteri alfabenin ilk harfidir, "kedi" - dizin 1'de, "köpek" - dizin 3'te, sis - dizin 4'ü işgal edecektir, yürü - dizin 24 ve sıfır, son 25. dizindir.
5 ile 23 arasındaki dizinlerin kullanılmayacağını unutmayın. Bu ek bellek tüketimi , ancak örneğin "yürümek" kelimesine anında başvurabiliriz, çünkü eğer varsa, o zaman indeks 24'te bulunduğunu biliyoruz.
İlk boş sözlüğümüzü yazalım:
Ve senin örneğinde
3B dizi ne kadar bellek kaplar? Boyutu artırmanız gerekirse ne olur?
Ve bir not daha: Vasily'nin örneğinde, bir diziden söz edilir.
Ve senin örneğinde
3B dizi ne kadar bellek kaplar? Boyutu artırmanız gerekirse ne olur?
Dizi boyutu çok büyük çünkü:
1. Bir kelimedeki maksimum harf sayısının 100 olabileceğine karar verdim. Açıkçası aşırıya kaçmış. 30'a düşürülebilir.
2. Olası harflerin sayısının da aşırı olduğu ortaya çıktı. Mümkün olduğu kadar çok farklı karakter için yer ayırmaya karar verdim. Azaltılabilir.
3. "Çarpışma" sayısı, yani bir kelimedeki kelimelerin ilk harfine ve harf sayısına göre eşleşmeleri 100 olarak ayarlanmıştır. Çok fazla. 50'ye düşürülebilir.
Boyutu büyütmenin amacını görmüyorum. Sadece başka bir sözlük yapabilirsin.
Dizi boyutu çok büyük çünkü:
1. Bir kelimedeki maksimum harf sayısının 100 olabileceğine karar verdim. Açıkçası aşırıya kaçmış. 30'a düşürülebilir.
2. Olası harflerin sayısının da aşırı olduğu ortaya çıktı. Mümkün olduğu kadar çok farklı karaktere yer vermeye karar verdim. Azaltılabilir.
3. "Çarpışma" sayısı, yani kelimelerin ilk harfine ve kelimedeki harf sayısına göre eşleşmeleri 100 olarak ayarlanmıştır. Çok fazla. 50'ye düşürülebilir.
Boyutu büyütmenin amacını görmüyorum. Sadece başka bir sözlük yapabilirsin.
Soru sözlükte yok. Sözlük, bir algoritma oluşturmanın bir örneğidir. Ve örneğinizdeki gibi 100'den çok eleman olabilir, ancak 1e10 veya daha fazla ... Bu durumda dizinin boyutu ne olacak???
Örneğin, mevcut tüm onay geçmişini bir dizide toplayın. Bir milisaniyede birden fazla tik olabilir, bu nedenle dizi tek boyutlu olamaz... ve bir milisaniyede maksimum kaç tik vardı??? iki mi beş mi??? Bu durumda dizinin boyutu ne olmalı??? Ne kadar bellek boşa harcanacak?
Örneğin, mevcut tüm onay geçmişini bir dizide toplayın.
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. Stored, HistorySelect tarafından değerlendirilerek, 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.
Bu nedenle, ticaret alanındaki pratik görevlerin formülasyonu ilginçtir.
ZY Siparişte HistorySelect'in hızlandırılması ne zaman oldu, o zaman, eminim ki, bir soruyu hash'li sözlükler değil, önbelleğe alma yoluyla çözdü.
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.
Bu nedenle, ticaret alanındaki pratik görevlerin formülasyonu ilginçtir .
ZY Siparişte HistorySelect'in hızlandırılması ne zaman oldu, o zaman, eminim ki, bir soruyu hash'li sözlükler değil, önbelleğe alma yoluyla çözdü.
Tartışmıyorum ama birisi bu şekilde bir görevi yerine getirmek istiyorsa bayrak onun elinde...
Birisi bunun anlamsız olduğunu düşünüyor, biri ustalaşamıyor ... Her iki durumda da daha basit uygulamalar var. Ama ticaretin "yarın" nasıl gelişeceğini kim bilebilir... Muhtemelen, yoklukta gereğinden fazla sahipsiz olmak ve sahipsiz kalmak daha iyidir.
Soru sözlükte yok. Sözlük sadece bir algoritma oluşturmaya bir örnektir. Ve örneğinizdeki gibi 100'den çok eleman olabilir, ancak 1e10 veya daha fazla ... Bu durumda dizinin boyutu ne olacak???
Örneğin, bir dizideki tüm kullanılabilir onay geçmişini toplayın. Bir milisaniyede birden fazla tik olabilir, bu nedenle dizi tek boyutlu olamaz... ve milisaniyede maksimum kaç tik vardı??? iki mi beş mi??? Bu durumda dizinin boyutu ne olmalıdır??? Ne kadar bellek boşa harcanacak?
Uygun bir sözlük oluşturma problemini çözdüm.
Keneler veya diğer öğeler, depolama konumuna hızlı erişim için başarıyla dizine eklenebilen kendi özel özelliklerine sahiptir.
Verilere hızlı erişim görevinin özü, bir öğenin birkaç sınıflandırılmış özelliğini tanımlamak ve bunları indekslemektir.
Bir eleman alınır, indekslerin alınabileceği uygun özellikler bulunur ve indeksler aracılığıyla depolama konumuna erişim sağlanır.
Yeterli indeks yoksa (örneğin, bir kelime için ilk harf ve harf sayısı indekslenebilir, ancak geri kalan özellikler uygun bir indeks sağlamaz), onu çevreleyen alan içindeki öğelerin doğrudan bir sayımını yaparız.
İlke evrenseldir, uygulamalar değişebilir.