yardıma ihtiyacım var! Görev çözülmedi, demirin sınırlamalarıyla karşılaşıyorum - sayfa 12
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
Ama diziler birbirinden bağımsız mı? O zaman neden bir kez yüklenen dizideki tarihlerde bir kerede bir döngü yapmak imkansız? Bu arada, bazı etkili tekrarlayan algoritmalara geçmek mümkün olabilir, ancak bu ne kadar şanslı. Milyona milyon boyutu kalacak ve dosya bir kez okunacak.
Genel olarak, elbette, bir sonraki yinelemede adım sayısının aynı kaldığı bir problem (yani, hesaplamalar ilerledikçe arama alanı daralmaz) özellikle sağlam görünmez. Ama bu tabi ki subjektif.
Сделки в разных последовательностях разные, по времени распределены неравномерно (и в каждой последовательности по своему). Сделок разное количество. Но все - в интервале от Даты1 до Даты2.
Görev, D1'den D2'ye M dakikalık bir adımla (veya daha iyisi, özellikle tüm dizilerin işlem noktalarına göre) geçmek, K kriterine göre diğerlerinden daha iyi bir dizi bulmaktır (ayrı bir görev sadece en iyi diziyi bulmak için, ancak tüm seti kritere göre sıralamak ve ilk 10'u görüntülemek için - ancak bu isteğe bağlıdır, henüz gerekli değildir).
Kriter K, kendisine karşılık gelen dizinin önceki X işlemi temelinde hesaplanır, hesaplamalarda X işlemlerinin her biri hakkında neredeyse tüm bilgiler kullanılır (örneğin sadece kâr yeterli değildir).
İşte başlamalıydı.
Aşağıdakileri doğru anladım mı:
1) 20 GB'lık bir dosya, zamana göre sıralanmış yaklaşık bir milyon diziden oluşur
2) Her bir dizinin boyutu farklı olabilir ve dizinin içerdiği işlem sayısına bağlıdır.
3) Ortalama olarak bir dizinin boyutu 20/10^6 = 20 Mb'dir, bir diziyi tamamen indireceğimizi garanti edebilir miyiz?
4) K katsayısı yalnızca belirli bir sıradaki işlemlere bağlıdır.
5) Her dizi için K (toplam puan 10^6 parça) bulmalı ve ilk 10'u seçmeliyiz.
Ve diziler arasındaki mesafelerin değerleriyle başka bir dosya oluşturursanız.
1) Kaç tane dizi indirip aralarındaki mesafeyi toplayabileceğimize bakarız (toplamların ara değerlerini koruyarak)
2) Bu mesafeyi dosyadan RAM'e okuyoruz
3) Her dizi için K arama algoritmasını çalıştırıyoruz (1. adımda hesaplanan alt toplamları kaydettiğimiz için dizilerin başlangıcının nerede olduğunu biliyoruz)
4) başlangıç noktası 1'i tekrar biraz ileriye doğru hareket ettirin
İlk 10'a gelince:
n - K'nin toplam değerleri, m - en iyinin sayısı.
1) tüm K'yi daha sonra, yığın veri yapısını kullanarak, en iyilerinden gerekli sayıda seçin (Yığın O (n), en iyi O'yu (log n) seçme sayısı m, bellek alanı - n)
2) hemen gerekli sayıyı hesaplayın - m adet (örneğin, 10), bunları sıralayın ve kalan K'nin ekleme noktasını aramak için ikili aramayı kullanın.
(birincil sıralama O(m*log m), ekleme arama O(log m) kez sayısı (nm), ekleme O(1), bellek alanı - m)
Önbellek sınırı aşıldığında bu tür boyutlarda özyineleme düşecektir.
3) Ortalama olarak bir dizinin boyutu 20/10^6 = 20 Mb'dir, tam bir dizi indireceğimizi garanti edebilir miyiz?
Genel olarak özü, gerekli olanı ve verileni yakalayamadığımı hissediyorum (((
А потом "нужная дата" сдвигается на точку закрытия сделки из выбранной последовательности и алгоритм повторяется.
ve evet 20/10^6 = 20 kb çünkü 1gb = 1000 mb = 10^6 kb
SQL'e doğru gidersek
Bu, geliştirme aşamasında oldukça yavaş olabilir.
Bu seçeneği seçerseniz, tüm iş mantığını saklı yordamlarla oluşturmak daha iyidir.
sunucuya bir istek göndermek ve tamamen hazır bir sonuç almak için uzmana yalnızca iki işlev bırakarak
sunucudaki tüm hesaplamalar
Aslında, internette bir SQL sunucusunun nasıl kurulacağına dair birçok açıklama bulabilirsiniz.
( ORACL,SYBASE + CENTOS örneğin ) ORACL,SYBASE,MS SQL+WINDOWS ayrı makine
ORACL - öğrenmesi biraz daha zor - daha az uzman, daha az literatür
MS SQL - belki de web'deki en fazla bilgi ve daha fazla literatür
belirli bir zorluk olmayacak - internette mağazada çok fazla açıklama var daha fazla kitap var
MSSQL 2012, parametrelerinde ORACL'e yaklaştı - zaten 2014 var
SQL + LINUX paketinin seçimi genellikle endüstriyel operasyonda seçilir - ve LINUX bilgisi yoksa, WINDOWS almak daha iyidir
MSSQL Expres topu ancak limitler 1 çekirdek, 1 GB bellek ve 10 GB taban kullanır
geri kalanı ödenir.
...
Pek çok benzer işlem dizisi vardır, her bir dizi zamana göre sıralanmıştır.
Farklı dizilerdeki işlemler farklıdır, zaman içinde (ve her dizide kendi yolunda) eşit olmayan bir şekilde dağıtılır. İşlemler değişiklik gösterir. Ancak her şey Date1'den Date2'ye kadar olan aralıktadır.
Görev, D1'den D2'ye M dakikalık bir adımla (veya daha iyisi, özellikle tüm dizilerin işlem noktalarına göre) geçmek, K kriterine göre diğerlerinden daha iyi bir dizi bulmaktır (ayrı bir görev sadece en iyi diziyi bulmak için, ancak tüm seti kritere göre sıralamak ve ilk 10'u görüntülemek için - ancak bu isteğe bağlıdır, henüz gerekli değildir).
...Nerede olduğunu anlamıyorum.
İşte bir kriter - her şey - Tarih1'den Tarih2'ye kadar olan aralıkta.
O gibi.
Ardından "gerekli tarih", seçilen diziden işlemin kapanış noktasına kaydırılır ve algoritma tekrarlanır.
Ve böylece bir milyon kez daha =)
Yani, aşağıdakiler okunur.
Dosyayı neden Date1'den Date2'ye kadar birçok aralığa bölmüyorsunuz? Kapatılabilecek diziler üzerinde çalışılacak mı?
Nerede olduğunu anlamıyorum.
İşte bir kriter - her şey - Tarih1'den Tarih2'ye kadar olan aralıkta.
Yani, aşağıdakiler okunur.
Dosyayı neden Date1'den Date2'ye kadar birçok aralığa bölmüyorsunuz? Kapatılabilecek diziler üzerinde çalışılacak mı?
görev ise:
verilen satır 1 2 3 4 5 6 7 8 9
bir genişlik verildiğinde, örneğin 4, genişlik içinde bir değer (örneğin, bir minimum) bulmak için tüm satır boyunca bu genişlikle hareket etmeniz gerekir:
önce 1 2 3 4 sonra 2 3 4 5 sonra 3 4 5 6 sonra 4 5 6 7 sonra .... vb. bulmanız gerekir.
daha sonra sorun, kuyruk veri yapısında bir minimum tutularak çözülür:
1) bunun mail.ru video kurslarında uygulanmasının dört yığın veri yapısı aracılığıyla yapılması önerildi.
2) Kuyruk veri yapısı ve güverte veri yapısı aracılığıyla sözlü olarak bir uygulama buldum, büyük olasılıkla biri bunu zaten yaptı ve onun adını aldı, sadece onu bulmanız gerekiyor.