Precisa de ajuda! Não consigo resolver o problema, estou atingindo limitações de hardware - página 12

 
komposter:


O banco de dados inteiro cabe ou não nas 10 linhas lakh? todos os arquivos cumulativamente
 
Candid:

Mas as seqüências são independentes uma da outra, não são? Então por que não podemos percorrer as datas em uma seqüência de carga única de uma só vez? Aqui, a propósito, pode ser possível ir a algum algoritmo de recorrência eficiente, mas isso depende de sua sorte. O tamanho de um milhão sobre um milhão permanecerá, e o arquivo será lido uma vez.

Naturalmente, um problema onde o número de passos na próxima iteração permanece o mesmo (ou seja, a área de busca como computada não fica mais estreita) não parece robusto. Mas isto é subjetivo, é claro.

A recorrência em tais dimensões cairá quando o limite de cache for excedido.
 
muitas seqüências de transações de tipo único, cada seqüência é ordenada por tempo.

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

A tarefa é passar de D1 para D2 com passo de M minutos (ou melhor - exatamente por pontos de fazer negócios de todas as seqüências), encontrar a seqüência que é melhor do que outras pelo critério K (uma tarefa separada - não apenas encontrar a melhor seqüência, mas ordenar todo o conjunto pelo critério e sair os 10 primeiros - mas é uma opção, ainda não necessária).

O critério K é calculado com base em X operações anteriores da seqüência correspondente, enquanto que o cálculo de quase todas as informações sobre cada uma das X operações (apenas o lucro, por exemplo, não é suficiente).

É por aqui que deveríamos ter começado.

Se entendi corretamente o seguinte:

1) Um arquivo de 20 gb consiste em cerca de um milhão de seqüências ordenadas por tempo

2) O tamanho de cada seqüência pode variar e depende do número de negócios que a seqüência contém

3) O tamanho médio de uma sequência é 20/10^6 = 20 Mb, então o que podemos garantir para baixar completamente uma sequência?

4) O coeficiente K depende apenas dos negócios dentro da seqüência dada

5) Para cada seqüência temos que encontrar K (no total 10^6 peças) e selecionar as 10 melhores

A Se criarmos outro arquivo com valores de distâncias entre seqüências.

1) Ver quantas sequências podemos baixar e somar a distância entre elas (mantendo os valores intermediários das somas)

2) Nós lemos a distância do arquivo para a RAM

3) Executar para cada seqüência do algoritmo de busca para encontrar K (sabemos onde começa a seqüência, pois mantemos os subtítulos calculados no passo 1)

4) Novamente o ponto 1 começa um pouco à frente

Quanto aos 10 primeiros:

n é o valor total de K, m é o número de melhores.

1) você pode encontrar todos os K e então, com a ajuda da estrutura de dados amontoados, escolher o número necessário de melhores valores (Get heap O(n), escolher o melhor O(log n) número de vezes m, espaço na memória - n)

2) contar o número necessário - m instâncias (por exemplo, 10), ordená-las e usar uma busca binária para encontrar o ponto de inserção para as demais instâncias K.

(ordenação inicial O(m*log m), busca por inserção O(log m) número de vezes (n-m), inserção O(1), espaço de memória ocupado - m).

 
Urain:
A recorrência nestas dimensões cairá quando o limite do cache for excedido.
Na recursividade clássica, o tamanho do cache é fixo.
 
ALXIMIKS:

3) O tamanho médio da seqüência é 20/10^6 = 20 MB, o que irá carregar completamente uma seqüência que podemos garantir?

A propósito, sim, você pode carregar lotes de sequências de uma só vez.
 

Sinto que não consigo obter a essência do que é necessário e do que é dado (((

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

e sim20/10^6 = 20kb porque 1gb = 1000mb = 10^6kb

 
YuraZ:

Indo em direção a SQL


  • Relativamente novo para mim (não tenho trabalhado de perto, apenas perguntas básicas);

Isto pode ser bastante lento na fase de aprendizagem.

Se você escolher esta opção, é melhor construir toda a lógica comercial com procedimentos armazenados

deixar o Expert Advisor apenas duas funções, enviar uma solicitação para o servidor e obter um resultado completamente acabado

todos os cálculos no servidor

  • A complexidade da instalação em uma única máquina cliente (versão autônoma);

Na verdade, na web você pode encontrar muitas descrições de como colocar o servidor SQL

( ORACL, SYBASE + CENTOS por exemplo ) ORACL, SYBASE, MS SQL + WINDOWS máquina autônoma

ORACL é um pouco mais complicado de aprender - menos especialistas, menos literatura.

MS SQL - talvez a maior quantidade de informações e mais literatura na web.

não haverá dificuldades - há muitas descrições na web e mais livros na loja.

O MSSQL 2012 por seus parâmetros é muito próximo ao ORACL - já em 2014.

SQL + LINUX é geralmente escolhido para fins de produção e se você não sabe nada sobre LINUX é melhor usar WINDOWS.

Balão MSSQL Expres, mas as restrições usam 1 núcleo, 1Gb de memória e 10Gb de base

outros são pagos.

 
komposter:
...

Há muitas seqüências de negócios semelhantes, cada seqüência é ordenada por tempo.

As transações em seqüências diferentes são diferentes, distribuídas desigualmente no tempo (e de forma diferente em cada seqüência). O número de acordos é diferente. Mas todos eles estão no intervalo de Data1 a Data2.

A tarefa - passando de D1 para D2 com passo de M minutos (ou melhor - especificamente por pontos de fazer acordos de todas as seqüências), encontrar uma seqüência, que é melhor do que outras pelo critério K (uma tarefa separada - não apenas encontrar a melhor seqüência, mas ordenar todo o conjunto pelo critério e sair os 10 primeiros - mas é uma opção, ainda não necessária).

...

Eu não entendo onde.

Há um critério - todos - no intervalo de Data1 a Data2.

komposter:

Tudo é assim.

E então a "data certa" é deslocada para o ponto de fechamento do negócio da seqüência selecionada e o algoritmo se repete.

E assim por diante um milhão de vezes =)

Ou seja, o próximo é lido.

Por que não dividir o arquivo em muitos intervalos de Data1 a Data2? Haverá seqüências de gastos que podem ser fechadas, certo?

 
Silent:

Eu não entendo onde.

Aqui está o critério - tudo está entre a Data1 e a Data2.

Ou seja, a leitura é a seguinte.

Por que não dividir o arquivo em muitos intervalos de Data1 a Data2? Haverá seqüências de uso que podem ser fechadas, certo?

Aparentemente, um dos resultados de um único passe de data é uma nova data.
 

se o problema for este:

dada uma linha 1 2 3 4 5 6 7 8 9

dada uma largura de, por exemplo, 4, você tem que ir com esta largura através de toda a linha para encontrar algum valor dentro da largura (por exemplo, um mínimo):

primeiro você precisa encontrar em 1 2 3 4, depois 2 3 4 5, depois 3 4 5 6, depois 4 5 6 7, depois .... etc.

então a tarefa é resolvida mantendo o mínimo na estrutura de dados da fila:

1) a implementação disto foi sugerida no curso de vídeo mails.ru através de quatro estruturas de dados em pilha

2) Eu inventei verbalmente uma implementação através da estrutura de dados em fila e da estrutura de dados em dec, muito provavelmente, alguém já o fez uma vez e o nome dele já foi dado, eu só preciso encontrá-lo.