Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
En la última variante también hice una comprobación para ello. Quien lo necesite puede utilizarlo.
Sí. Pero, ¿cómo sabemos que los algoritmos proporcionados no dejan espacios en blanco? La suma de comprobación no lo demuestra. Tampoco el número de elementos. Al fin y al cabo, la función cuenta los elementos que había antes de redimensionar el array.
En casi todas las presentaciones esto se implementa sin problemas enviando una consulta con NULL.
Hay otro requisito para el algoritmo: la colocación correcta de los elementos dentro de la matriz después de eliminar los elementos innecesarios. Esta comprobación debe realizarse primero. Luego hay una comprobación de la velocidad.
El código explica qué devuelve qué. Hay matrices barajadas. Hay en otra matriz.
P.D. Y sólo para que conste. Mi función tiene algunos controles, pero no se utiliza. Pero ya tiene todo esto y más.
No estoy cuestionando la profesionalidad de los participantes y sus plazas. Simplemente señalé un defecto en la comprobación de la suma de comprobación y también, la necesidad de una verificación adicional de la corrección de la disposición de los elementos en la nueva matriz.
Si todo esto es correcto, he obtenido merecidamente el penúltimo lugar.
En mi práctica, rara vez pienso en la velocidad de las operaciones específicas. Me preocupa más la concisión y la claridad de la solución. Me sorprendió que esta entrada
if(Arr[q]==val){deleted++; q--;}
podría ser lento.
Pero si añadimos un criterio más de evaluación del algoritmo -la compacidad de la solución- probablemente esté en el primer lugar.
Si se combinan los dos criterios, velocidad y compresión, y se calcula la puntuación media del algoritmo, entonces ocupo un lugar más alto en la tabla.
La versión de Fedoseyev, sin embargo, está aún más condensada que la mía.Sin embargo, si se añade otro criterio para evaluar los algoritmos, la compresión de la solución, probablemente esté en primer lugar.
Su versión del bucle principal:
y este es el de Fedoseyev:
Ambas variantes hacen lo mismo. ¿Quién es el más conciso?
Su versión del ciclo principal:
y este es el de Fedoseyev:
Ambos hacen lo mismo. ¿Quién es el más conciso?
A él. Lo tiene en lugar de...
for(;i<sz;i++)
Es más sucinto).
Lo ha hecho. Lo tiene en lugar de...
Esto es más sucinto).
Lo mismo ocurre con el compilador.
Simplemente tiene un montón de cosas innecesarias, por lo que funciona más lento que los demás (ni siquiera estoy considerando la primera opción del tema).
El código de Fedoseyev tiene una comprobación, una asignación y un incremento en una pasada del bucle (no cuento las comprobaciones e incrementos para la organización del bucle).
En cambio, tiene dos comprobaciones, una suma de dos variables, tres incrementos y una asignación.
Toda la esperanza es que el compilador optimice, de lo contrario ArraySize se ejecuta en cada iteración.
Toda la esperanza es que el compilador optimice, de lo contrario ArraySize se ejecuta en cada iteración.
Sí, el compilador parece comprobar que si el tamaño del array no cambia en el bucle, sustituye independientemente esta función por un valor y calcula esta función una sola vez.
En cualquier caso, si haces esto:
el tiempo de ejecución de la función no cambiará.
Así que para que sea más compacto tiene sentido escribirlo exactamente como lo hizo Peter :)
Pero estoy de acuerdo, personalmente a mí también me pican los ojos. Parece que la función será llamada cada vez.
Pero estoy de acuerdo, personalmente también me corta el rollo. Parece que la función será llamada cada vez.
En mi opinión, es mejor no dar al compilador la posibilidad de elegir)
Déjeme hacerle una pregunta,
if(count>6) { ArrayCopy
más de seis: ¿el valor se obtiene por intuición científica o hay una justificación?)En mi opinión, es mejor no dar al compilador la posibilidad de elegir)
Déjame hacerte una pregunta,
if(count>6) { ArrayCopy
más de seis - el valor se obtiene por presentimiento científico, o ¿cuál es el razonamiento detrás de él?)Sí, eso es exactamente. El método de la intuición científica. En realidad de 5 a 8 según mis observaciones. Puede automatizar este proceso autoajustando este número cada vez. Al fin y al cabo, este número puede ser diferente para distintos procesadores y sistemas.
Por ejemplo, si cambias todos los ArrayCopy y ArrayFill en la clase CCanvas por este principio, puedes obtener una buena ganancia en la velocidad del canvas.