Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
La tecnologia SQD-Mini LED di TCL arriva sul taglio da 65 pollici con la serie C8L: 2040 zone, pannello WHVA 2.0 e un picco che alle rilevazioni delle sonde tocca i 4400 nit nel profilo Filmmaker e un HDR quasi perfetto
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro
Wireless 2.4 GHz, Bluetooth 5.4, cancellazione attiva del rumore, design pieghevole e un'autonomia che mette in imbarazzo prodotti che costano il doppio. Le Maestro 500 non eccellono in nulla, ma offrono tutto. E a questo prezzo è difficile chiedere di più
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: 5646
[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: 5646
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: 13003
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: 5646
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: 13003
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: 5646
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: 13003
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: 13003
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: 5646
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: 13003
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: 5646
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: 5646
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: 5646
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


Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
NVIDIA mostra una comunità di rob...
Sony annuncia LYTIA L910, arriva il sens...
Ericsson, il 5G è l’infrastruttur...
Marvell punta tutto su TSMC A14: sar&agr...
Hyundai a un passo dal controllo totale ...
Questo SSD vecchio 16 anni ha resistito ...
Monopattino elettrico Xiaomi in offerta:...
Microsoft usa le capre di Age of Empires...
Microsoft conferma bug nel Cestino in tu...
Accenture crolla del 20% in borsa, il pe...
ASUS Pro WS W890E-SAGE SE: sette PCIe 5....
Attenzione al prezzo di questa TV Hisens...
Chrome sbeffeggiato da Ballmer nel 2009:...
Un gioco Mac compatibile con Apple Silic...
La batteria allo stato solido di Honda s...
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: 23:31.


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