Ho bisogno di aiuto! Non riesco a risolvere il problema, sto incontrando delle limitazioni hardware - pagina 12

 
komposter:


L'intero database entra in 10 lakh linee o no? tutti i file insieme
 
Candid:

Ma le sequenze sono indipendenti l'una dall'altra, no? Allora perché non possiamo fare un ciclo attraverso le date di una sequenza caricata in una volta sola? Qui, tra l'altro, potrebbe essere possibile andare a qualche algoritmo di ricorrenza efficiente, ma questo è come la fortuna vuole. La dimensione di un milione su un milione rimarrà, e il file sarà letto una volta sola.

Naturalmente, un problema in cui il numero di passi rimane lo stesso all'iterazione successiva (cioè l'area di ricerca non si restringe mentre il calcolo procede) non sembra molto robusto. Ma questo è soggettivo, ovviamente.

La ricorsione su tali dimensioni cade quando si supera il limite della cache.
 
Ci sono molte sequenze di transazioni di tipo singolo, ogni sequenza è ordinata per tempo.

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

Il compito è quello di passare da D1 a D2 con passo M minuti (o meglio - esattamente per punti di fare scambi di tutte le sequenze), trovare una sequenza, che è meglio di altre per criterio K (un compito separato - non solo per trovare la migliore sequenza, ma per ordinare l'intero set per criterio e produrre i primi 10 - ma è un optional, non ancora necessario).

Il criterio K è calcolato sulla base di X scambi precedenti della sequenza corrispondente, calcolando quasi tutte le informazioni su ciascuno di X scambi (solo il profitto, per esempio, non è sufficiente).

Qui è dove avremmo dovuto iniziare.

Ho capito bene quanto segue:

1) Un file di 20 gb consiste in circa un milione di sequenze ordinate per tempo

2) La dimensione di ogni sequenza può variare e dipende dal numero di affari che la sequenza contiene

3) La dimensione media di una sequenza è 20/10^6 = 20 Mb, quindi cosa possiamo garantire per scaricare completamente una sequenza?

4) Il coefficiente K dipende solo dagli scambi all'interno della sequenza data

5) Per ogni sequenza dobbiamo trovare K (in totale 10^6 pezzi) e selezionare i primi 10

A Se creiamo un altro file con i valori delle distanze tra le sequenze.

1) Vedere quante sequenze possiamo scaricare e sommare la distanza tra loro (mantenendo i valori intermedi delle somme)

2) Leggiamo la distanza dal file nella RAM

3) Eseguire per ogni sequenza dell'algoritmo di ricerca per trovare K (sappiamo dove l'inizio delle sequenze, perché manteniamo i subtum calcolati nel passo 1)

4) Ancora una volta iniziare il punto 1 spostandosi un po' più avanti

Per quanto riguarda la top 10:

n è il totale dei valori di K, m è il numero dei migliori.

1) si possono trovare tutti i K e poi, con l'aiuto della struttura dati heap, scegliere il numero necessario di valori migliori (ottenere heap O(n), scegliere il migliore O(log n) numero di volte m, spazio in memoria - n)

2) contare il numero richiesto - m istanze (per esempio, 10), ordinarle e usare una ricerca binaria per trovare il punto di inserimento per le rimanenti K istanze.

(ordinamento iniziale O(m*log m), ricerca di inserimento O(log m) numero di volte (n-m), inserimento O(1), spazio di memoria occupato - m).

 
Urain:
La ricorsione su queste dimensioni cadrà quando il limite della cache viene superato.
Nella ricorsione classica la dimensione della cache è fissa.
 
ALXIMIKS:

3) La dimensione media delle sequenze è 20/10^6 = 20 MB, che cosa caricherà completamente una sequenza che possiamo garantire?

A proposito, sì, si possono caricare lotti di sequenze in una volta sola.
 

Mi sembra di non riuscire a capire cosa è necessario e cosa è dato (((

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

e sì,20/10^6 = 20kb perché 1gb = 1000mb = 10^6kb

 
YuraZ:

Andare verso l'SQL


  • Relativamente nuovo per me (non ho lavorato da vicino, solo query di base);

Questo può essere abbastanza lento nella fase di apprendimento.

Se si sceglie questa opzione, è meglio costruire tutta la logica di business con le stored procedure

lasciando all'Expert Advisor solo due funzioni: inviare una richiesta al server e ottenere un risultato completamente finito

tutti i calcoli sul server

  • La complessità dell'installazione su una singola macchina client (versione stand-alone);

In effetti, sul web si possono trovare molte descrizioni di come mettere il server SQL

( ORACL, SYBASE + CENTOS per esempio ) ORACL, SYBASE, MS SQL + WINDOWS macchina indipendente

ORACL è un po' più complicato da imparare - meno esperti, meno letteratura.

MS SQL - forse la più grande quantità di informazioni e più letteratura sul web.

non ci saranno difficoltà - ci sono molte descrizioni sul web e più libri nel negozio.

MSSQL 2012 con i suoi parametri è molto vicino a ORACL - già nel 2014.

SQL + LINUX è di solito scelto per il funzionamento in un ambiente di produzione - se non si conosce LINUX è meglio usare WINDOWS

MSSQL Expres balloon ma le restrizioni utilizzano 1 core, 1Gb di memoria e 10Gb di base

altri sono pagati.

 
komposter:
...

Ci sono molte sequenze di accordi simili, ogni sequenza è ordinata per tempo.

Le transazioni in diverse sequenze sono diverse, distribuite in modo non uniforme nel tempo (e in modo diverso in ogni sequenza). Il numero di accordi è diverso. Ma tutti sono nell'intervallo da Data1 a Data2.

Il compito - passando da D1 a D2 con passo M minuti (o meglio - esattamente per punti di fare accordi di tutte le sequenze), trovare una sequenza, che è migliore di altre per criterio K (un compito separato - non solo trovare la migliore sequenza, ma ordinare l'intero set per criterio e produrre i primi 10 - ma è un optional, non ancora necessario).

...

Non capisco dove.

C'è un criterio - tutti - nell'intervallo da Data1 a Data2.

komposter:

Tutto è così.

E poi la "data giusta" viene spostata al punto di chiusura dell'affare della sequenza selezionata e l'algoritmo si ripete.

E così via un milione di volte =)

Cioè, il prossimo viene letto.

Perché non dividere il file in molti intervalli da Data1 a Data2? Ci saranno delle sequenze spese che possono essere chiuse, giusto?

 
Silent:

Non capisco dove.

Ecco il criterio: tutto è compreso tra Data1 e Data2.

Cioè, si legge come segue.

Perché non dividere il file in molti intervalli da Data1 a Data2? Ci saranno sequenze esaurite che possono essere chiuse, giusto?

A quanto pare uno dei risultati del passaggio di una data singola è una nuova data.
 

se il problema è questo:

data una riga 1 2 3 4 5 6 7 8 9

data una larghezza per esempio di 4, bisogna andare con questa larghezza attraverso tutta la fila per trovare qualche valore all'interno della larghezza (per esempio un minimo):

prima dovete trovare in 1 2 3 4 poi 2 3 4 5 poi 3 4 5 6 poi 4 5 6 7 poi .... ecc.

allora il compito viene risolto mantenendo il minimo nella struttura dei dati della coda:

1) l'implementazione di questo è stata suggerita nel video corso di mails.ru attraverso quattro strutture di dati stack

2) Ho inventato verbalmente un'implementazione attraverso la struttura dati della coda e la struttura dati dec, molto probabilmente, qualcuno l'ha già fatto una volta e porta il suo nome, devo solo trovarlo.