Algoritmos, métodos de solución, comparación de su rendimiento - página 15

 
fxsaber:

Hay un patrón claro de falta de respeto reiterada a la comunidad y un patrón claro de provocación.

No leerlo (los mensajes de una persona en varios hilos constructivos) no siempre es posible, después de lo cual desarrollarlo y olvidarlo - aún menos.

La pesca de arrastre y el escupitajo en manos de la ayuda, cuyo número distingue en gran medida este recurso del lado positivo.


Podría estar equivocado.

Controla tus emociones, por favor. Si no aceptas el punto de vista de otra persona, puedes optar por no participar en la discusión. Nadie te obliga a hacerlo.

 
Vladimir Karputov:

Corrígeme, pero ¿la longitud de las cuerdas no es finita?

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

No encuentro esta limitación para MQL5...

Una cadena es básicamente una matriz uchar, con sus propias características especiales, como la re-partición automática. Por eso la longitud de la cadena no está limitada, al menos de forma explícita, ni tampoco el tamaño del array. Pero una cadena muy larga puede potencialmente quedarse sin memoria, como lo demuestra un código de error específico como ERR_STRING_RESIZE_ERROR (Memoria insuficiente para reasignar la cadena).


 
Vasiliy Sokolov:

Una cadena es esencialmente una matriz uchar, con sus propias ventajas, como la repartición automática. Por lo tanto, la longitud de las cadenas no está limitada, al menos explícitamente, como tampoco lo está el tamaño de las matrices. Pero una cadena muy larga puede potencialmente quedarse sin memoria, como lo demuestra un código de error específico como ERR_STRING_RESIZE_ERROR (Memoria insuficiente para reasignar la cadena).


Información valiosa para mí también. Gracias.
 
fxsaber:

Sólo restricción de memoria

obviamente una restricción de tipo de longitud, es decir, junto a INT_MAX
 
Реter Konow:

1. es decir, la velocidad del algoritmo no es importante. La solución es "conceptualmente poderosa" y eso es suficiente. Bien.

2. Entonces, ¿se conecta a través del plug-in y ya está? Bien.

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

Si el principal criterio para evaluar el algoritmo es el"poder conceptual", entonces he perdido.

Si el principal criterio para juzgar el algoritmo - la simplicidad, la velocidad y la comodidad - que ganar.

Podemos cerrar el tema en este punto.


Todavía se puede acelerar y simplificar "su algoritmo" (y se le dice constantemente), si se sustituye la cadena por dos int[] del mismo tamaño y se almacena el número de transacción en uno, y en el otro mago y se busca el índice de mago necesario en la búsqueda correspondiente del array de transacciones. Será más rápido. Por supuesto, este es un caso especial que se desprende de su ejemplo.

Peter aprendió las matrices y comprendió que son herramientas universales y poderosas, luego empezó a aprender las cadenas... ¿Te imaginas lo que pasará cuando aprenda sobre las estructuras?)

Piotr sustituye estas funciones en su ejemplo:

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);
}

Y la velocidad tomará el patrón :)

 
Реter Konow:

1. es decir, la velocidad del algoritmo no es importante. La solución es "conceptualmente poderosa" y eso es suficiente. Bien.

2. Entonces, ¿se conecta a través del plug-in y ya está? Bien.

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

Si el principal criterio para evaluar el algoritmo es el"poder conceptual", entonces he perdido.

Si el criterio principal para evaluar el algoritmo - "La simplicidad, la velocidad y la conveniencia " - que ganar.

En este punto podemos cerrar el tema.


Sólo un ejemplo muestra el más común - es decir, una gran cantidad de información extra, al menos el controlador de depuración y definir en la impresión está ausente - o de lo contrario habría añadido otras 300 líneas.

Al menos todo el código es completamente ....

la parte del código que necesitas añadir y llamar a través de la biblioteca será mucho más conveniente, menos codificada y más legible

 
Alexandr Andreev:

El ticker con un majik - debe ser guardado y luego puede ser enviado al ticker o majik en una forma conveniente.

De hecho, la solución más rápida sería almacenar toda la información en la estructura. Pero los accesos se harán a través del índice de referencia ordenado sammiva.

Se trata de una solución frontal y, por tanto, no es la más rápida. Sería mejor hacerlo mediante HashMap. Sin embargo, no necesitaríamos una estructura en la implementación actual, sino una clase heredada de una determinada interfaz para describir los campos de sus órdenes.

 
Yury Kulikov:

Puedes acelerar y simplificar "tu algoritmo" (y no paran de repetirlo), si sustituyes la cadena por dos int[] del mismo tamaño y almacenas el número de transacción en uno y el magik en el otro y buscas el índice necesario del magik por la enumeración correspondiente del array de transacciones. Será más rápido. Por supuesto, este es un caso especial que se desprende de su ejemplo.


Es una propuesta interesante y útil. Mantenimiento de registros paralelos. Lo hice en mis otras soluciones.

Lo único es que no sabemos el número de órdenes que el EA colocará inicialmente. ¿Qué tamaño debemos establecer para la matriz int?

Por eso he decidido utilizar una cadena.

 
fxsaber:

Se trata de una solución frontal y, por tanto, no es la más rápida. Es mejor hacerlo a través de HashMap. Pero la implementación actual no requeriría una estructura, sino una clase heredada de una determinada interfaz para describir los campos de sus órdenes.


No he encontrado el archivogenérico, parece que se trata de una construcción antigua. Entonces, ¿cómo se proporcionará el principio de navegación - cuál es el código fuente?

 
Реter Konow:

Es una sugerencia interesante e inteligente. Mantenimiento de registros paralelos. Lo he hecho en mis otras soluciones.

Lo único que no sabemos es el número de órdenes que colocará el Asesor Experto. ¿Qué tamaño debemos establecer para la matriz int?

Así que decidí coger una cuerda.

Peter, hay una gran función llamada ArrayResize(). Permite aumentar el tamaño de un array en el momento de la ejecución del programa.

Razón de la queja: