Algoritmi, metodi di soluzione, confronto delle loro prestazioni - pagina 7

 
Alexandr Andreev:

bene, in poche parole, una stringa di un carattere è unchar con un codice da 0 a 255 e pesa 1 byte... e ha allocato appena abbastanza memoria per avere 256 valori, 257 non ci starà, tornerà al primo.

In qualsiasi pagina, ogni carattere è un numero da 0 a 255... quindi prendiamo il numero 10000000 - pesa 4 byte, lo convertiamo nella stringa "10000000" poi per ogni carattere allociamo la memoria come per un grafico individuale da 0 a 255... 8 byte in totale. Non c'è risparmio di memoria da nessuna parte.

Capisco cosa intendi.

Dobbiamo calcolare con precisione la quantità di memoria consumata in questa soluzione.

 
Реter Konow:

Puoi iniziare a scrivere la seconda riga. Poi il terzo e così via... :)

Ora capisco perché ci vuole così tanto tempo per creare il vostro "costruttore".
 
Vasiliy Sokolov:


p.s. Oh sì, hai un altro errore. Se MathRand alla terza chiamata restituisce ad esempio il numero 1000 e scrive _3_1000_, che tipo di medge sarà trovato per una transazione con numero d'ordine 1000?

Il punto è che MathRand è necessario solo per simulare i numeri medigei.

I numeri di Medjic sono impostati dall'utente, e può bypassare un valore inferiore a 100.000 (diciamo).

Tuttavia, potrebbe esserci un errore nell'esempio dato. Avete ragione.

Grazie per l'osservazione. Una soluzione completa dovrebbe tenerne conto.

 
Реter Konow:

Capisco il tuo punto di vista.

Dobbiamo calcolare con precisione la quantità di memoria consumata in questa soluzione.


Questo spreca anche un sacco di risorse sui riferimenti interni, perché l'accesso ad ogni carattere della stringa è uguale all'accesso all'array char[x]. Un collegamento in questo caso è l'accesso a un certo elemento della matrice. E lì si passa attraverso enormi mucchi. L'implementazione con int sarebbe molto più facile e veloce da capire...

Per quanto riguarda la limitazione della lunghezza delle stringhe, di solito dipende dal limite massimo di dimensione nell'array char[x] - anch'esso ha il suo limite massimo.

 

L'uomo sinceramente non si rende conto della portata della sua stupidità.
L'effetto Dunning-Kruger in azione.

 

Va bene, una persona ha solo bisogno di un linguaggio non tipizzato e nessun problema))

anche se ci sarà ancora una differenza di velocità
 
Vasiliy Sokolov:
p.s. Oh sì, hai un altro errore. Se MathRand alla terza chiamata restituisce per esempio il numero 1000 e scrive _3_1000_, quale magagna si troverà per trattare il numero ordinale 1000?
"Penserà" un po' di più e risolverà questo problema: metti un underscore prima dell'accordo, e un altro simbolo prima del mago :)
 
Alexandr Andreev:

Questo spreca anche un sacco di risorse sui riferimenti interni, perché accedere ad ogni carattere della stringa è lo stesso che accedere a char[x] di un array. Un collegamento in questo caso è l'accesso a un certo elemento della matrice. E lì si passa attraverso enormi mucchi. L'implementazione con int sarebbe molto più facile e veloce da capire...

Per quanto riguarda la limitazione della lunghezza delle stringhe, di solito dipende dalla limitazione della dimensione massima nell'array char[x] - ha il suo limite massimo, così come altri.

Non possiamo implementarlo con int, perché non sappiamo in anticipo il numero di transazioni future. Dobbiamo indovinare o cambiare la dimensione dell'array ad ogni scambio e riscrivere i dati avanti e indietro.

In che altro modo lo facciamo?

La velocità della mia soluzione è pazzesca.

La memoria viene consumata, ma non si sa quanto sia inefficiente. Dobbiamo scoprirlo con certezza.

 
Yury Kulikov:
Lui "penserà" un po' di più e risolverà questo problema: metterà un underscore prima della transazione, e un simbolo diverso prima del mago :)

Vorrei sottolineare che, a differenza di tutti gli altri qui, Peter ha probabilmente la più grande pazienza - e la volontà di scrivere codice monotono. Non c'è altro modo per spiegare come sia riuscito a scrivere così tanto

 
Реter Konow:

Non possiamo implementare con int, perché non sappiamo in anticipo il numero di scambi futuri. O dobbiamo indovinare, o dobbiamo cambiare la dimensione dell'array e sovrascrivere i dati avanti e indietro ad ogni scambio.

In che altro modo lo facciamo?

La velocità della mia soluzione è pazzesca.

La memoria viene consumata, ma non si sa quanto sia inefficiente. Dobbiamo scoprirlo con certezza.


Ci sono solo due varianti di stringa o ha una dimensione massima (in riserva), o anche la memoria è allocata e nel vostro caso durante il processo di aggiunta è allocata ogni volta.... Quindi, è lo stesso che cambiare la dimensione di un array int. 1in1 beh, forse ci vuole il 10% di tempo in più per l'int per allocare la memoria che per la stringa per allocare la memoria per 1 carattere, se si confrontano più caratteri allora credo che l'int vinca