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

 
Alexandr Andreev:

Bueno, en pocas palabras, una cadena de un carácter es unchar con algún código de 0 a 255 y pesa 1 byte... y tiene asignada la memoria suficiente para tener 256 valores, 257 no caben ahí, volverá a la primera.

En cualquier página, cada carácter es un número del 0 al 255... así que tomamos el número 10000000 - pesa 4 bytes, lo convertimos en la cadena "10000000" luego para cada carácter asignamos memoria como para un gráfico individual de 0 a 255... 8 bytes en total. No hay ahorro de memoria en ninguna parte.

Entiendo lo que quieres decir.

Tenemos que calcular con precisión el consumo de memoria para esta solución.

 
Реter Konow:

Puedes empezar a escribir la segunda línea. Luego el tercero y así sucesivamente... :)

Ahora entiendo por qué tarda tanto en crear su "constructor".
 
Vasiliy Sokolov:


p.s. Oh sí, tienes un error más. Si MathRand en la tercera llamada devuelve, por ejemplo, el número 1000 y escribe _3_1000_, ¿qué tipo de medge se encontrará para una operación con número de orden 1000?

La cuestión es que MathRand sólo es necesario para simular números medianos.

Los números de Medjic son fijados por el usuario, y puede pasar por alto un valor inferior a 100.000 (digamos).

Sin embargo, puede haber un error en el ejemplo dado. Tienes razón.

Gracias por la observación. Una solución completa debería tener esto en cuenta.

 
Реter Konow:

Ya veo lo que quieres decir.

Tenemos que calcular con precisión la cantidad de memoria que consume esta solución.


Esto también desperdicia muchos recursos en las referencias internas, porque el acceso a cada carácter de la cadena es el mismo que el acceso al array char[x]. Un enlace en este caso es el acceso a un determinado elemento de la matriz. Y allí sólo se verán enormes pilas de ellos. La implementación con int sería mucho más fácil y rápida de entender...

En cuanto a la limitación de la longitud de la cadena, suele depender del límite de tamaño máximo de la matriz char[x], que también tiene su propio límite máximo.

 

El hombre realmente no se da cuenta del alcance de su propia estupidez.
El efecto Dunning-Kruger en acción.

 

Está bien, una persona sólo necesita un lenguaje no tipificado y sin problemas))

aunque seguirá habiendo una diferencia de velocidad
 
Vasiliy Sokolov:
p.s. Oh sí, tienes un error más. Si MathRand en la tercera llamada devuelve, por ejemplo, el número 1000 y escribe _3_1000_, ¿qué magia se encontrará para tratar con el número ordinal 1000?
Se "pensará" un poco más y se resolverá este problema: pon un guión bajo antes del trato, y otro símbolo antes del mago :)
 
Alexandr Andreev:

Esto también desperdicia muchos recursos en las referencias internas, porque acceder a cada carácter de la cadena es lo mismo que acceder a char[x] de un array. Un enlace en este caso es el acceso a un determinado elemento de la matriz. Y allí sólo se verán enormes pilas de ellos. La implementación con int sería mucho más fácil y rápida de entender...

En cuanto a la limitación de la longitud de la cadena, suele depender de la limitación del tamaño máximo de la matriz char[x], que tiene su propio límite máximo, así como otros.

No podemos implementarlo con int, porque no sabemos de antemano el número de transacciones futuras. Tenemos que adivinar o cambiar el tamaño de la matriz en cada operación y reescribir los datos de ida y vuelta.

¿De qué otra manera lo hacemos?

La velocidad de mi solución es una locura.

Se consume memoria, pero no se sabe cómo de ineficiente. Tenemos que averiguarlo con seguridad.

 
Yury Kulikov:
Va a "pensar" un poco más y resolver este problema: pondrá un guión bajo antes de la transacción, y un símbolo diferente antes del mago :)

Me gustaría señalar que, a diferencia de todos los demás aquí, Peter probablemente tiene la mayor paciencia - y una disposición para el código monótono. No hay otra manera de explicar cómo se las arregló para escribir tanto

 
Реter Konow:

No podemos implementar con int, porque no sabemos de antemano el número de operaciones futuras. O bien tenemos que adivinar, o bien tenemos que cambiar el tamaño de la matriz y sobrescribir los datos de ida y vuelta en cada operación.

¿Cómo si no lo hacemos?

La velocidad de mi solución es una locura.

Se consume memoria, pero no se sabe cómo de ineficiente. Tenemos que averiguarlo con seguridad.


Sólo hay dos variantes de la cadena o bien tiene un tamaño máximo (en reserva), o bien la memoria se asigna y en su caso durante el proceso de adición se asigna cada vez.... Por lo tanto, es lo mismo que cambiar el tamaño de una matriz int. 1en1 Bueno, tal vez se necesita un 10% más de tiempo para int para asignar la memoria que para la cadena de asignar la memoria de 1 carácter, si se compara más caracteres, entonces supongo que gana int