Algoritmos, métodos de solução, comparação de seu desempenho - página 15

 
fxsaber:

Há um claro padrão de desrespeito repetido pela comunidade e um claro padrão de provocação.

Nem sempre é possível não lê-lo (os cargos de uma pessoa em vários tópicos construtivos), depois do que desenvolver e esquecer - ainda menos.

Trolling and spitting in the hands of help, cujo número distingue muito este recurso do lado positivo.


Pode estar errado.

Controle suas emoções, por favor. Se você não aceita o ponto de vista de outra pessoa, você pode optar por não participar da discussão. Ninguém está forçando você a isso.

 
Vladimir Karputov:

Corrija-me, mas o comprimento das cordas não é finito?

https://msdn.microsoft.com/ru-ru/library/sx08afx2.aspx

Não consigo encontrar esta limitação para a MQL5...

Uma corda é basicamente uma matriz de uchar, com suas próprias características especiais, como o re-particionamento automático. É por isso que o comprimento das cordas não é limitado pelo menos de forma explícita, nem o tamanho da matriz. Mas uma string muito longa pode potencialmente ficar sem memória, como evidenciado pelo código de erro específico como ERR_STRING_RESIZE_ERROR (Memória insuficiente para realocar a string).


 
Vasiliy Sokolov:

Uma cadeia é essencialmente um conjunto de uchar, com seus próprios benefícios, tais como o reparticionamento automático. Portanto, o comprimento das cordas não é limitado, pelo menos explicitamente, nem o tamanho da matriz. Mas uma string muito longa pode potencialmente ficar sem memória, como evidenciado pelo código de erro específico como ERR_STRING_RESIZE_ERROR (Memória insuficiente para realocar a string).


Informações valiosas para mim também. Obrigado.
 
fxsaber:

Restrição de memória apenas

obviamente uma restrição do tipo comprimento, ou seja, ao lado de INT_MAX
 
Реter Konow:

1. Ou seja, a velocidade do algoritmo não é importante. A solução é "conceitualmente poderosa" e isso é suficiente. Ok.

2. Então, você só liga através do plug-in e pronto? Ok.

//--------------------------------------------------------------------

Se o critério principal para avaliar o algoritmo é"Conceptualmente Poderoso", então eu perdi.

Se o critério principal para julgar o algoritmo - simplicidade, rapidez e conveniência - eu ganho.

Podemos encerrar o tema neste ponto.


Você ainda pode acelerar e simplificar "seu algoritmo" (e você é constantemente informado sobre ele), se substituir a cadeia por duas int[] do mesmo tamanho e armazenar o número de transações em uma, e no outro mágico e procurar o índice necessário de mágico na busca correspondente da matriz de transações. Será mais rápido. Naturalmente, este é um caso especial que se segue ao seu exemplo.

Peter aprendeu arrays e entendeu que eles são ferramentas universais e poderosas, então ele começou a aprender cordas... Você pode imaginar o que vai acontecer quando ele aprenderá sobre estruturas?)

Piotr substitui estas funções em seu exemplo:

struct SDealMagic {int deal,magic;} array[];
//
void Trading()
{
   Random_orders_of_strategy=MathRand();
   ArrayResize(array,Random_orders_of_strategy);
   for(int i=0; i<Random_orders_of_strategy; i++)
   {
      array[i].deal=i;
      array[i].magic=MathRand()
   }
}
//
int Get_magic(int deal_number)
{
   for(int i=0; i<Random_orders_of_strategy; i++)
      if(array[i].deal==deal_number) return(array[i].magic);
   return(-1);
}

E a velocidade tomará o padrão :)

 
Реter Konow:

1. Ou seja, a velocidade do algoritmo não é importante. A solução é "conceitualmente poderosa" e isso é suficiente. Ok.

2. Então, você só liga através do plug-in e pronto? Ok.

//--------------------------------------------------------------------

Se o critério principal para avaliar o algoritmo é"Conceptualmente Poderoso", então eu perdi.

Se o critério principal para avaliar o algoritmo - "Simplicidade, velocidade e conveniência " - eu ganho.

Neste momento, podemos encerrar o assunto.


Apenas um exemplo mostra o mais comum - ou seja, muitas informações extras, pelo menos o depurador e definidor na impressão está ausente - ou então teria acrescentado mais 300 linhas.

Pelo menos o código inteiro é completamente....

a parte do código que você precisa adicionar e chamar através da biblioteca será muito mais conveniente, menos codificada e mais legível

 
Alexandr Andreev:

Quando um ticker vem com um magik - ele deve ser salvo e depois pode ser enviado ao ticker ou ao magik de uma forma conveniente.

Na verdade, a solução mais rápida seria armazenar todas as informações na estrutura. Mas os acessos serão feitos através do índice de referência sammiva ordenado.

Esta é uma solução de vanguarda e, portanto, não é a mais rápida. É melhor fazer isso através do HashMap. Entretanto, não precisaríamos de uma estrutura na implementação atual, mas sim de uma classe herdada de uma certa interface para descrever os campos de suas ordens.

 
Yury Kulikov:

Você pode acelerar e simplificar "seu algoritmo" (e eles continuam lhe falando sobre ele), se você substituir a string por duas int[] do mesmo tamanho e armazenar o número da transação em uma e o mágico na outra e procurar o índice necessário de mágico pela enumeração correspondente da matriz de transações. Será mais rápido. Naturalmente, este é um caso especial que se segue ao seu exemplo.


Esta é uma proposta interessante e útil. Manutenção de registros paralelos. Eu o fiz em minhas outras soluções.

A única coisa é que não sabemos o número de pedidos que a EA irá fazer inicialmente. Que tamanho devemos definir para a série int?

Foi por isso que decidi usar um cordel.

 
fxsaber:

Esta é uma solução de vanguarda e, portanto, não é a mais rápida. É melhor fazer isso através do HashMap. Mas a implementação atual não exigiria uma estrutura, mas uma classe herdada de uma certa interface para descrever os campos de suas ordens.


Ainda não encontrei o arquivogenérico, parece que esta é uma construção antiga. Então, como será fornecido o princípio de navegação - qual é o código fonte?

 
Реter Konow:

É uma sugestão interessante e inteligente. Manutenção de registros paralelos. Já o fiz em minhas outras soluções.

A única coisa que não sabemos é o número de pedidos que serão feitos pelo Consultor Especialista. Que tamanho devemos definir para a série int?

Por isso, decidi pegar um fio.

Peter, existe uma grande função chamada ArrayResize(). Ele permite aumentar o tamanho de uma matriz no momento da execução do programa.