Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-04-2010, 15:07   #1
gabmac2
Senior Member
 
Iscritto dal: Jun 2009
Messaggi: 5536
[C] Ordinamento e accesso random

Ho 1 problema e una domanda da porre,
come si può accedere a dati in modo random in un file per porli in una lista,ho un txt contenente
es
111
aaa
bbb
222
ccc
ddd
333
ttt
hhhh
555
yyy
iiii

ad esempio si vuole che il random prenda valori a caso ,come si fa a "mandarlo a capo" nella ricerca ,nel senso,come si fa a fargli capire di prendere i valori (sono in terzine,codice,nome e cognome)

domanda,miglior algoritmo ordinamento per lista linkata?

Grazie in ancitipo
gabmac2 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2010, 15:38   #2
lupoxxx87
Senior Member
 
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
Quote:
Originariamente inviato da gabmac2 Guarda i messaggi
ad esempio si vuole che il random prenda valori a caso ,come si fa a "mandarlo a capo" nella ricerca ,nel senso,come si fa a fargli capire di prendere i valori (sono in terzine,codice,nome e cognome)

EEEEH ?!

per l'ordinamento di algoritmi ce n'è a bizzeffe
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2010, 15:43   #3
gabmac2
Senior Member
 
Iscritto dal: Jun 2009
Messaggi: 5536
si,ok,ma per creare un archivio qual' è il miglior tipo di lista ,linkata,doppiamente linkata ,circolare.....?e su questo tipo di lista qual' è il miglior ordinamento ?
gabmac2 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2010, 19:14   #4
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12840
Bisogna vedere bene cosa vuoi fare, cmq in genere un'ottima struttura dati è un albero binario di ricerca, consente la ricerca in O(log N).

In pratica ogni nodo X dell'albero ha un figlio sinistro e uno destro, nel figlio sinistro in genere si pone l'elemento minore di X, mentre nel figlio destro l'elemento maggiore o uguale a X (se vuoi memorizzare doppioni).

Uno dei problemi con questa struttura è che l'albero può essere sbilanciato tutto da un lato e degenerare nel caso pessimo in una lista collegata (ricerca in O(N) in tal caso), per ovviare a questo si adotta il bilanciamento automatico, che non è immediato da implementare (vedi alberi AVL).
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2010, 19:56   #5
gabmac2
Senior Member
 
Iscritto dal: Jun 2009
Messaggi: 5536
grazie,avrei però bisogno di ordinare in loco e come lista per un piccolo archivio,va bene la linkata?
gabmac2 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2010, 20:57   #6
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12840
Quote:
Originariamente inviato da gabmac2 Guarda i messaggi
grazie,avrei però bisogno di ordinare in loco e come lista per un piccolo archivio,va bene la linkata?
Se spieghi meglio cosa vorresti fare forse riusciamo a darti un aiuto più mirato.

In ogni caso l'ordinamento in genere è finalizzato alla ricerca, e una struttura come un albero binario se mantenuta opportunamente bilanciata ti garantisce prestazioni superiori senza ricorrere ad un continuo ordinamento dei dati (l'ordinamento viene imposto direttamente all'inserimento dei dati).

Se il fine è la ricerca dei dati allora ti consiglio di usare un albero binario.

Tanto per la cronaca i principali DBMS fanno uso di strutture ad albero.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2010, 21:26   #7
gabmac2
Senior Member
 
Iscritto dal: Jun 2009
Messaggi: 5536
grazie! ok,ma io devo (per esercizio) creare in una lista (come voglio) ,ed effettuare ricerche e l' ordinamento (con quello che voglio),non posso usare db
Da qui le domande per entrambe le cose,andrei su linkata e quicksort,confermate?

Per l' altra domanda come posso fare a posizionarmi su una riga i-esima di un file txt (accedendo con read) ,dove questa riga sia multipla di 3? (seek?)

Grazie in anticipo!
gabmac2 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2010, 22:00   #8
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12840
Quote:
Originariamente inviato da gabmac2 Guarda i messaggi
grazie! ok,ma io devo (per esercizio) creare in una lista (come voglio) ,ed effettuare ricerche e l' ordinamento (con quello che voglio),non posso usare db
Da qui le domande per entrambe le cose,andrei su linkata e quicksort,confermate?

Per l' altra domanda come posso fare a posizionarmi su una riga i-esima di un file txt (accedendo con read) ,dove questa riga sia multipla di 3? (seek?)

Grazie in anticipo!
Ah ecco se era un'esercizio potevi dirlo prima ,cmq non ho mai detto che devi usare un DB, ho detto che le strutture ad albero proprio per la loro efficienza sono usate nei DB.

Detto ciò una lista doppiamente linkata (che quindi ha anche riferimento al predecessore) la vedo meglio.

Puoi andare di quicksort, però non ho mai implementato algoritmi di ordinamento su strutture diverse dagli array, ci potrebbero essere delle difficoltà dovute al fatto che non puoi accedere in maniera diretta agli elementi della lista ma devi usare un iteratore.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2010, 23:14   #9
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Con lsesk puoi posizionarti in un punto qualsiasi del file! Dai uno sguardo qui http://www.manpagez.com/man/2/lseek/

Comunque per un algoritmo di ordinamento devi sempre definire un (non ricordo bene il nome ma te lo chiamo così) comparatore!
Ad esempio per i numeri un comparatore ti dice che 1 è minore di 2 oppure che 1 è uguale a 1! Per elementi diversi dai numeri devi definirlo tu! Ad esempio per un ordinamento lessicografico "pippa" viene prima di "pippo" (che esempiaccio gagliardo eh)!
Comunque come Java anche il C ha già la funzione di quick sort e anche di merge sort, e addirittura anche di heap sort .... http://www.manpagez.com/man/3/qsort/
devi solo implementare il comparatore...
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2010, 08:03   #10
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12840
Se non erro quelle funzioni vanno bene solo per gli array, e non ad esempio per le liste collegate.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2010, 08:33   #11
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Se non erro quelle funzioni vanno bene solo per gli array, e non ad esempio per le liste collegate.
A non ne ho idea però se c'era una cavia che voleva ammazzarsi un po per provare
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2010, 08:47   #12
gabmac2
Senior Member
 
Iscritto dal: Jun 2009
Messaggi: 5536
grazie ragazzi,allora ,al momento però penso partirò con una linkata semplice e quicksort,eventualmente poi approfondirò con la doppiamente linkata

per lseek come faccio a portarmi ad esempio alla quarta riga?

lseek(file, 4, SEEK_SET); ?

Grazie!

Ultima modifica di gabmac2 : 14-04-2010 alle 09:13.
gabmac2 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2010, 09:34   #13
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da gabmac2 Guarda i messaggi
grazie ragazzi,allora ,al momento però penso partirò con una linkata semplice e quicksort,eventualmente poi approfondirò con la doppiamente linkata

per lseek come faccio a portarmi ad esempio alla quarta riga?

lseek(file, 4, SEEK_SET); ?

Grazie!
tutto dipende dal terzo parametro... comunque ricorda che l'offset parte da zero quindi se sei all'inizio la quarta è 3
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2010, 12:30   #14
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12840
Edit.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2010, 18:34   #15
gabmac2
Senior Member
 
Iscritto dal: Jun 2009
Messaggi: 5536
grazie,ma allora cosa devo scrivere per andare alla terza riga?
gabmac2 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2010, 19:11   #16
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
E' probabile che ti convenga leggere prima tutta le righe, e poi sceglierle a caso
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2010, 19:32   #17
gabmac2
Senior Member
 
Iscritto dal: Jun 2009
Messaggi: 5536
ad esempio vorrei generare un numero es 6 e andare al sesto record,come posso fare?
gabmac2 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2010, 19:45   #18
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Carichi tutte le stringhe in una lista o un array, e poi vai a prendere il sesto elemento...

Possibile pseudocodice per il C
1. conto quante righe ci sono
2. Creo un array di tante righe
3. rileggo il file, memorizzando ciascuna riga nel posto giusto
4. inizio a tirare i valori a caso e restituisco ogni volta il record corrispondente.

In C#, che mi piace tanto ma tanto ma tanto di piu', sarebbe

Codice:
string[] data = File.ReadAllLines(@"C:\temp\mioFile.dat");
Random rnd=new Random();
string primoDato = data[rnd.Next(data.Length)];
Non ho invece capito a cosa ti servirebbe l'ordinamento.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 14-04-2010 alle 19:49.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2010, 19:51   #19
gabmac2
Senior Member
 
Iscritto dal: Jun 2009
Messaggi: 5536
grazie,è l' idea che avevo avuto io,ma devo assolutamente andare sul file come ho scritto (è il testo del problema),come posso fare?Penso si possa accedere a un iesima riga
gabmac2 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2010, 20:53   #20
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Puoi andare di quicksort, però non ho mai implementato algoritmi di ordinamento su strutture diverse dagli array, ci potrebbero essere delle difficoltà dovute al fatto che non puoi accedere in maniera diretta agli elementi della lista ma devi usare un iteratore.
In realtà (in particolare per il quicksort) non comporta grosse difficoltà. Tempo fa aveva implementato proprio il quicksort su una lista doppiamente collegata, magari lo ripesco e lo posto qua.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
Veterano italiano lascia Tesla sbattendo...
Il robot che gioca a ping pong meglio di...
IA e ransomware: una combinazione micidi...
Addio treni e aerei? Per Hyperloop un te...
Microsoft porta una comoda novità...
Le azioni Gemini balzano oltre il 30% al...
TSMC diventa produttore di... miele! Dal...
Windows 11 24H2, rimosso un vecchio bloc...
Autunno su AliExpress: sconti folli fino...
È ancora dominio Apple: iPhone 16...
Dogecoin diventa azionista di maggioranz...
xAI, la startup di Elon Musk, si ridimen...
NVIDIA nei guai in Cina: accusata di vio...
Ducati presenta la moto elettrica con ba...
Pikachu Illustrator, la carta Poké...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:41.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v