Ich brauche Hilfe! Ich kann das Problem nicht lösen, ich stoße an die Grenzen der Hardware - Seite 12

 
komposter:


Passt die gesamte Datenbank in 10 lakh Zeilen oder nicht? alle Dateien zusammen
 
Candid:

Aber die Sequenzen sind doch unabhängig voneinander, oder? Warum können wir dann nicht in einer Schleife die Daten einer einzeln geladenen Sequenz auf einmal durchlaufen? Hier ist es übrigens möglich, einen effizienten Rekursionsalgorithmus zu verwenden, aber das hängt von Ihrem Glück ab. Die Größe von einer Million auf eine Million wird beibehalten, und die Datei wird einmal gelesen.

Ein Problem, bei dem die Anzahl der Schritte bei der nächsten Iteration gleich bleibt (d. h. der berechnete Suchbereich wird nicht kleiner), sieht natürlich nicht robust aus. Aber das ist natürlich subjektiv.

Die Rekursion auf solche Dimensionen fällt weg, wenn das Cache-Limit überschritten wird.
 
Es gibt viele einzelne Sequenzen von Transaktionen, jede Sequenz ist nach Zeit sortiert.

Сделки в разных последовательностях разные, по времени распределены неравномерно (и в каждой последовательности по своему). Сделок разное количество. Но все - в интервале от Даты1 до Даты2.

Die Aufgabe besteht darin, sich von D1 nach D2 mit einem Schritt von M Minuten zu bewegen (oder besser - genau nach den Punkten, in denen alle Sequenzen gehandelt werden), die Sequenz zu finden, die nach dem Kriterium K besser ist als die anderen (eine separate Aufgabe - nicht nur die beste Sequenz finden, sondern die gesamte Menge nach dem Kriterium sortieren und die Top 10 ausgeben - aber das ist eine optionale, noch nicht notwendige Aufgabe).

Das Kriterium K wird auf der Grundlage von X vorangegangenen Geschäften der entsprechenden Sequenz berechnet, wobei fast alle Informationen über jedes der X Geschäfte berücksichtigt werden (nur der Gewinn reicht z. B. nicht aus).

Hier hätten wir ansetzen müssen.

Habe ich das Folgende richtig verstanden?

1) Eine 20-GB-Datei besteht aus etwa einer Million Sequenzen, die nach Zeit sortiert sind.

2) Die Größe der einzelnen Sequenzen kann variieren und hängt von der Anzahl der Geschäfte ab, die die Sequenz enthält

3) Die durchschnittliche Größe einer Sequenz beträgt 20/10^6 = 20 Mb, was können wir also garantieren, um eine Sequenz vollständig herunterzuladen?

4) Der K-Koeffizient hängt nur von den Gewerken innerhalb der gegebenen Sequenz ab

5) Für jede Sequenz müssen wir K (insgesamt 10^6 Stück) finden und die besten 10 auswählen

A Wenn wir eine weitere Datei mit den Werten der Abstände zwischen den Sequenzen erstellen.

1) Schauen Sie, wie viele Sequenzen Sie herunterladen können, und addieren Sie den Abstand zwischen ihnen (und behalten Sie die Zwischenwerte der Summen)

2) Wir lesen den Abstand aus der Datei in den RAM

3) Führen Sie für jede Sequenz des Suchalgorithmus zu finden K (wir wissen, wo der Beginn der Sequenzen, weil wir die Untersummen in Schritt 1 berechnet halten)

4) Beginne wieder mit Punkt 1 und bewege dich ein wenig nach vorne.

Was die Top 10 betrifft:

n ist die Gesamtzahl der Werte von K, m ist die Anzahl der besten.

1) Sie können alle K finden und dann mit Hilfe der Heap-Datenstruktur die benötigte Anzahl der besten Werte auswählen (Get heap O(n), choose the best O(log n) number of times m, space in memory - n)

2) Zählen Sie die erforderliche Anzahl m Instanzen (z. B. 10), sortieren Sie sie und verwenden Sie eine binäre Suche, um den Einfügepunkt für die verbleibenden K Instanzen zu finden.

(anfängliches Sortieren O(m*log m), Suche nach Einfügung O(log m) Anzahl der Male (n-m), Einfügung O(1), belegter Speicherplatz - m).

 
Urain:
Die Rekursion auf diese Dimensionen wird abgebrochen, wenn das Cache-Limit überschritten wird.
Bei der klassischen Rekursion ist die Cache-Größe fest vorgegeben.
 
ALXIMIKS:

3) Die durchschnittliche Sequenzgröße beträgt 20/10^6 = 20 MB, was wird eine Sequenz, die wir garantieren können, vollständig laden?

Übrigens, ja, Sie können mehrere Sequenzen auf einmal laden.
 

Ich habe das Gefühl, dass ich nicht weiß, was nötig ist und was gegeben ist (((

 А потом "нужная дата" сдвигается на точку закрытия сделки из выбранной последовательности и алгоритм повторяется.

und ja20/10^6 = 20kb weil 1gb = 1000mb = 10^6kb

 
YuraZ:

Auf dem Weg zu SQL


  • Für mich ist das relativ neu (ich habe mich nicht näher damit beschäftigt, sondern nur grundlegende Fragen gestellt);

Dies kann in der Lernphase recht langsam sein.

Wenn Sie diese Option wählen, ist es besser, die gesamte Geschäftslogik mit gespeicherten Prozeduren zu erstellen

Der Expert Advisor hat nur noch zwei Funktionen - eine Anfrage an den Server senden und ein fertiges Ergebnis erhalten

alle Berechnungen auf dem Server

  • Die Komplexität der Installation auf einem einzelnen Client-Rechner (Standalone-Version);

Im Internet finden Sie zahlreiche Beschreibungen, wie Sie den SQL-Server

( z.B. ORACL, SYBASE + CENTOS ) ORACL, SYBASE, MS SQL + WINDOWS Einzelplatzrechner

ORACL ist etwas komplizierter zu lernen - weniger Experten, weniger Literatur.

MS SQL - vielleicht die größte Menge an Informationen und mehr Literatur im Internet.

es wird keine Schwierigkeiten geben - es gibt viele Beschreibungen im Internet und weitere Bücher im Shop.

MSSQL 2012 ist von den Parametern her sehr nah an ORACL dran - schon 2014.

SQL + LINUX wird normalerweise für den Betrieb in einer Produktionsumgebung gewählt - wenn Sie LINUX nicht kennen, ist es besser, WINDOWS zu verwenden

MSSQL Expres Ballon aber Einschränkungen verwenden 1 Kern, 1Gb des Speichers und 10Gb Basis

andere werden bezahlt.

 
komposter:
...

Es gibt viele ähnliche Sequenzen von Geschäften, jede Sequenz ist nach Zeit sortiert.

Die Vorgänge in den verschiedenen Sequenzen sind unterschiedlich und zeitlich ungleichmäßig verteilt (und in jeder Sequenz anders). Die Anzahl der Geschäfte ist unterschiedlich. Sie liegen aber alle im Intervall von Datum1 bis Datum2.

Die Aufgabe - sich von D1 nach D2 mit M Minutenschritt zu bewegen (oder besser - speziell nach Punkten, die alle Sequenzen betreffen), eine Sequenz zu finden, die besser ist als andere nach dem Kriterium K (eine separate Aufgabe - nicht nur die beste Sequenz zu finden, sondern die ganze Menge nach dem Kriterium zu sortieren und die Top 10 auszugeben - aber das ist eine optionale, noch nicht erforderliche Aufgabe).

...

Ich verstehe nicht, wo.

Es gibt ein Kriterium - alle - im Intervall von Datum1 bis Datum2.

komposter:

Alles ist so, wie es ist.

Dann wird das "richtige Datum" auf den Zeitpunkt des Geschäftsabschlusses der ausgewählten Sequenz verschoben und der Algorithmus wiederholt sich.

Und so weiter eine Million Mal =)

D.h., der nächste wird gelesen.

Warum nicht die Datei in viele Intervalle von Datum1 bis Datum2 aufteilen? Es wird verbrauchte Sequenzen geben, die geschlossen werden können, richtig?

 
Silent:

Ich verstehe nicht, wo.

Hier ist das Kriterium - alles liegt zwischen Datum1 und Datum2.

Das heißt, sie lautet wie folgt.

Warum wird die Datei nicht in viele Intervalle von Datum1 bis Datum2 unterteilt? Es wird verbrauchte Sequenzen geben, die geschlossen werden können, richtig?

Offenbar ist eines der Ergebnisse eines einmaligen Datumsübergangs ein neues Datum.
 

wenn das Problem dieses ist:

eine Reihe gegeben 1 2 3 4 5 6 7 8 9

Bei einer Breite von z. B. 4 muss man mit dieser Breite durch die ganze Zeile gehen, um einen Wert innerhalb der Breite zu finden (z. B. ein Minimum):

Zuerst müssen Sie in 1 2 3 4 dann 2 3 4 5 dann 3 4 5 6 dann 4 5 6 7 dann .... finden. usw.

dann wird die Aufgabe gelöst, indem das Minimum in der Datenstruktur der Warteschlange beibehalten wird:

1) Die Umsetzung wurde in dem mails.ru-Videokurs durch vier Stack-Datenstrukturen vorgeschlagen

2) Ich habe verbal eine Implementierung durch eine Warteschlangen-Datenstruktur und eine dez-Datenstruktur erfunden, höchstwahrscheinlich hat das schon einmal jemand gemacht und es ist nach ihm benannt, ich muss es nur noch finden.

Grund der Beschwerde: