Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nothing Ear e Ear (a): gli auricolari per tutti i gusti! La ''doppia'' recensione
Nothing Ear e Ear (a): gli auricolari per tutti i gusti! La ''doppia'' recensione
Nothing propone sul mercato non uno ma ben due auricolari nuovi: Ear di terza generazione e Ear (a) ossia un nuovo modello a basso costo pronto a ritagliarsi una fetta di mercato. Entrambi rimangono fedeli al marchio per il design ancora trasparente ma fanno un balzo in avanti notevole per qualità e soppressione del rumore.  
Sony FE 16-25mm F2.8 G: meno zoom, più luce
Sony FE 16-25mm F2.8 G: meno zoom, più luce
Il nuovo Sony FE 16-25mm F2.8G si aggiunge all'analogo 24-50mm per offrire una coppia di zoom compatti ma di apertura F2.8 costante, ideali per corpi macchina altrettanto compatti (vedi A7c ) e fotografia di viaggio.
Motorola edge 50 Pro: design e display al top, meno il prezzo! Recensione
Motorola edge 50 Pro: design e display al top, meno il prezzo! Recensione
Motorola è decisa sulla sua strada: questo nuovo edge 50 Pro non guarda a specifiche stellari ma considera di più l’aspetto estetico. E si propone elegantemente con linee sinuose e un sistema operativo veloce. Peccato per un prezzo un po' fuori mercato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-01-2013, 12:57   #1
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
[Vari] Contest 19: Full Text Search(e non solo).

Scaricate i file di input da qui:

https://github.com/hwupgradecontest/...ree/master/All

Si tratta di una serie di opere letterarie che ho preso da qui:

http://www.liberliber.it/

Grazie a Msangi e The_Ouroboros, il link su github dove potete mettere i vostri sorgenti:
https://github.com/hwupgradecontest/contest19

Per aggiungere il proprio codice du github:

The_Ouroboros:
http://www.hwupgrade.it/forum/showpo...&postcount=784

Vicius:
https://github.com/hwupgradecontest/README



Punto A:
Il programma dovrà leggere i file .txt fondendoli e creandone uno solo delle dimensioni specificate dall'utente. Il file di output sarà poi utilizzato per il Punto B: algoritmi di Full Text Seach.
La fusione dei vari file txt va effettuata prendendo le singole righe di ogni file di input e mescolandole, in modo casuale, con quelle di tutti gli altri file.
Vanno escluse, nel file di output, le righe vuote. Vanno inoltre eliminati gli spazi superflui. Due o più spazi consecutivi andranno sostituiti con uno spazio solo. Le tabulazioni vanno sostituite con uno spazio.
Per il punto B utilizzeremo il programma che si rivelerà il migliore dal punto di vista delle prestazioni ma soprattutto dalla qualità dell'output.
Il programma, CUI o GUI, a vostra scelta, dovrà dunque permettere all'utente di specificare il nome del file di output e la dimensione. Nel caso l'utente scelga una dimensione maggiore di quella del totale dei file di input, si ricominci dal primo file e via via con tutti gli altri, mescolando sempre in modo casuale le righe.

Esempio(CUI):


Punto B:
Da definire più in la. Ci occuperemo degli algoritmi per la Full Text Seach e confronteremo le prestazioni(e la qualità dei risultati) con alcuni programmi che vanno per la maggiore nel settore: Lucene, Zettair, Indri.
Punto B.1:
Quote:
B.1:
Si realizzi un programmino che, data in input una stringa di ricerca, indichi l'esatta posizione (riga e colonna) nel file creato al punto A.

Si prendano separatamente i tempi per la creazione dell'indice e quelli per la ricerca.

Se volete utilizzare un algoritmo brute force, senza creare l'indice, siete liberi di farlo.
L'esempio qui: http://www.hwupgrade.it/forum/showpo...&postcount=180


Punto B.2:
Quote:
Si scriva un programmino simile a quello presente nella distribuzioni Linux per contare i caratteri, le parole, le righe, la riga più lunga e la parola più lunga(quest'ultima cosa il comando wc non la fa):


Le parole dovranno essere parole di senso compiuto. "---------" o "........" o "£$%*/*&&&" non sono parole di senso compiuto.
"parola", "ciao", "hello" invece si, sono parole di senso compiuto.
Si veda, inoltre, questo post(grazie a msangi): http://www.hwupgrade.it/forum/showpo...&postcount=618.
E questo(grazie a clockover): http://www.hwupgrade.it/forum/showpo...&postcount=645

Punto B.3
Si modifichi il programmino di cui al punto B.2 in modo da fargli accettare due argomenti dalla riga di comando(oltre al nome del file):

1) Il parametro "-L=d" dove d sta per la dimensione minima delle parole che l'utente desidera per il conteggio. Per esempio, -L=5 significa che l'utente desidera che vengano conteggiate le parole con lunghezza >= 5.

2) Il parametro "-F=file" dove file sta per il nome di un file specificato dall'utente dove sono listati, una parola per riga, le parole che l'utente desidera escludere dalla ricerca. Per esempio:
Codice:
il
lo
la
i
gli
le
Col suddetto file passato come argomento, il programmino dovrà escludere dal conteggio le parole "il", "lo", "la", "i", "gli", "le".

------------------------------------------------------------------------------------------------------------------------------------------------------

E, a cura dell'utente Marco.r:
Punto C:
Catene Markoviane. In preparazione.

Ultima modifica di Vincenzo1968 : 20-02-2013 alle 18:25. Motivo: Aggiornato link file input
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2013, 13:29   #2
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Per esempio, se abbiamo questi file in input:

File 1:
Codice:
file 1 riga 1
file 1      riga 2
file 1 riga 3
File 2:
Codice:
file 2 riga 1

file 2           riga 2
file 2 riga 3
File 3:
Codice:
file 3 riga 1
     file 3        riga 2
file 3 riga 3
Il file risultante dovrà essere, per esempio, così:
Codice:
file 3 riga 2
file 2 riga 2
file 3 riga 1
file 3 riga 3
file 1 riga 3
file 1 riga 1
file 2 riga 3
file 2 riga 1
file 1 riga 2
Come vedete, nel file di output, sono stati eliminati gli spazi superflui e le righe vuote.
Le righe debbono risultare disposte in modo casuale. Una nuova esecuzione del programma darà, ovvviamente, una nuova disposizione delle righe.

Per esempio:
Codice:
file 3 riga 1
file 1 riga 3
file 3 riga 3
file 1 riga 2
file 2 riga 2
file 1 riga 1
file 2 riga 3
file 3 riga 2
file 2 riga 1

Ultima modifica di Vincenzo1968 : 17-01-2013 alle 10:48.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2013, 13:51   #3
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Dall'incipit del Cap. IV de I Promessi Sposi di Alessandro Manzoni:

Quote:
Il sole non era ancor tutto apparso sull'orizzonte, quando il padre Cristoforo uscì dal suo convento di Pescarenico, per salire alla casetta dov'era aspettato.
Dall'incipit del Cap. VIII di Quer pasticiaccio brutto de via Merulana di Carlo Emilio Gadda:
Quote:
Il sole non aveva ancora la minima intenzione di apparire all'orizzonte che già il brigadiere Pestalozzi usciva(in motocicletta) dalla caserma degli erre erre ci ci di Marino per catapultarsi alla bottega-laboratorio dove non era minimamente aspettato, almeno in quanto brigadiere fungente.

Ultima modifica di Vincenzo1968 : 17-01-2013 alle 10:06.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 09:29   #4
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
Leggendo il contest una cosa non mi è chiara.

Dici che il programma deve mischiare insieme le righe dei due file in ordine casuale, ma nell'esempio mescoli i file anche partendo da metà di quella che io considererei una riga (un qualcosa che va da newline a newline), quindi vorrei capire: qual'è la tua idea di riga in questo caso?

Ciao

EDIT: Un altra cosa che non ho capito bene è cosa succede quando l'output è maggiore dell'input. Cosa intendi per "si ricomincia dal primo file" ? Intendi che riscrive il testo in ordine dal primo file in poi o intendi che si resetta il mescolamento e si riparte a mescolare i file?
__________________
GPU Compiler Engineer

Ultima modifica di AnonimoVeneziano : 14-01-2013 alle 09:39.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 15:54   #5
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Vi anticipo già 50 ms per un file da 2 mb

Ero partito usando C++11 e la stl eccetera, e per quanto sia diventata parecchio veloce in sè mi forzava a copiare la memoria in giro... sotto 500 ms non si scendeva.
Il buon vecchio C è ancora imbattuto

EDIT: ok, 43 ms e sto, almeno sul mio SSD.
Un'esecuzione usa ~40 ms per fopen/fread, ~2 ms per fare il parsing dei file e ~0.1 ms per scrivere l'output (questo grazie allo SSD che è una bestia ), probabilmente nel caso dello SSD sarebbe molto più veloce leggendo tutti i file in parallelo, ma d'altra parte nel caso di un HDD meccanico sarebbe molto peggio, e vincerebbe alla grande accorpare tutti i files in un file solo per minimizzare il seek time.

Odio un pò sti problemi che esce Vincenzo1968 perchè finiscono sempre a fare a botte con l'HD
__________________
*ToMmO*

devlog | twitter

Ultima modifica di Tommo : 14-01-2013 alle 16:20.
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 16:18   #6
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
Quote:
Originariamente inviato da Tommo Guarda i messaggi
Vi anticipo già 50 ms per un file da 2 mb

Ero partito usando C++11 e la stl eccetera, e per quanto sia diventata parecchio veloce in sè mi forzava a copiare la memoria in giro... sotto 500 ms non si scendeva.
Il buon vecchio C è ancora imbattuto
Non puoi sperare di usare la STL e di andare veloce ...
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 16:22   #7
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Quote:
Originariamente inviato da AnonimoVeneziano Guarda i messaggi
Non puoi sperare di usare la STL e di andare veloce ...
In realtà il problema era che non esiste un modo per assegnare memoria preesistente a std::string, e quindi non avrei potuto usare il "trucco" che ha tagliato di 10 volte il tempo...
ma come dicevo, a pari algoritmo non sono più lente di C, e di sicuro il codice esce molto più bello a vedersi (e la condivisione di memoria che ho usato è come chiedere bug a manetta )

EDIT: ecco il codice

main.cpp

LineBuffer.h

common_header.h

EDIT2: ho provato a farlo girare su un disco in rete (lag come se piovesse, 13 mb/s max) e come previsto ci mette quasi 1.6 secondi... un dettaglio interessante però è che già alla 3a run ci metteva solo 66 ms, il che prova che Windows è abbastanza furbo da mettere in cache i file usati di recente sul disco più veloce
__________________
*ToMmO*

devlog | twitter

Ultima modifica di Tommo : 14-01-2013 alle 17:36.
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 16:44   #8
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
Se qualcuno avesse avuto gli stessi dubbi riguardo al testo del contest queste sono state le risposte di Vincenzo alle mie domande:

Quote:
Quando l'output è maggiore dell'input si riparte dall'inizio. Si prendono tutti i file e si ricomincia a mescolare le righe(di tutti i file) fino a quando il file di output non raggiunge la dimensione voluta.
Non ho capito bene la prima domanda. Considera che nell'esempio ho mescolato le righe a mano; il programma lo devo ancora finire.

T'ho scritto in privato perché m'hanno sospeso e non posso postare nel thread. Potresti cortesemente postare tu la mia risposta?
Al limite specifica che te l'ho chiesto io tramite pm.
A quel punto ho riformulato la mia prima domanda e lui ha risposto che si , bisogna identificare ogni riga e mescolarle insieme (le righe vanno da newline a newline)
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2013, 14:53   #9
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Veneto
Messaggi: 6688
Comunicazione di servizio da Vincenzo1968:

http://classes.soe.ucsc.edu/ism293/S...mp_3_Lemur.pdf

http://ciir.cs.umass.edu/~strohman/indri/

http://www.lemurproject.org/lemur/In...ryLanguage.php

http://myweb.uiowa.edu/cgharris/images/indri.pdf

Serviranno per il punto B.
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 10:07   #10
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Questa la mia versione in Java: Generate.java.

A leggere tutti i file da disco ci mette circa 800ms. Per creare un file di 5 gb ci impiega poco più di 4 minuti.

Codice:
➜ Contest  time java contest.Generate file -D5GiB
java contest.Generate file -D5GiB  78.23s user 159.79s system 98% cpu 4:01.87 total
Non ho potuto provare la versione di tommo perché stdafx.h cozza un po' con osx e linux. Fare un confronto sullo stesso hardware sarebbe interessante ma non credo che ci sia una grande differenza tra i due. Una vota passato una certa dimensione il limite dovrebbe essere il disco.

Si potrebbe passare a nio per evitare di scopiazzare stringhe qua e là. Eliminare la regex e ripulirsi a mano il testo. Ed usare un executor per distribuire il lavoro tra i vari core. Ma non credo ne valga la pena.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 10:22   #11
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ragazzi, una cortesia:

per facilitare il compito agli utenti che volessere provare i programmi postati(e soprattutto a me che devo scaricare i sorgenti di tutti e stilare le classifiche), bisognerebbe zippare i sorgenti e metterli su un sito di file sharing.

Ce ne sono un fottìo. Uno dei miei preferiti è:

http://www.filedropper.com/

Non richiede iscrizione e soprattutto, quando uno clicca sul link per scaricare il file, non bisogna aspettare i maledetti trenta secondi di pubblicità(c'è solo da inserire 4 caratteri per il riconoscimento umano).

Edit: Ho visto ora che nel link di Vicius c'è il link diretto che permette di scaricare il file compresso. Ma, se il programma è composto da più file sorgenti?

Ultima modifica di Vincenzo1968 : 17-01-2013 alle 10:31.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 10:30   #12
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Questa la mia versione in Java: Generate.java.

A leggere tutti i file da disco ci mette circa 800ms. Per creare un file di 5 gb ci impiega poco più di 4 minuti.

Codice:
➜ Contest  time java contest.Generate file -D5GiB
java contest.Generate file -D5GiB  78.23s user 159.79s system 98% cpu 4:01.87 total
Non ho potuto provare la versione di tommo perché stdafx.h cozza un po' con osx e linux. Fare un confronto sullo stesso hardware sarebbe interessante ma non credo che ci sia una grande differenza tra i due. Una vota passato una certa dimensione il limite dovrebbe essere il disco.

Si potrebbe passare a nio per evitare di scopiazzare stringhe qua e là. Eliminare la regex e ripulirsi a mano il testo. Ed usare un executor per distribuire il lavoro tra i vari core. Ma non credo ne valga la pena.
Io sono riuscito a compilare la versione di Tommo su Linux ma ho dovuto togliere i file afx e inserire manualmente gli include.

Quindi ragazzuoli, quando utilizzate Visual Studio, create un progetto vuoto altrimenti vengono inseriti gli afx e poi li debbo modificare a mano(per compilarli su Linux). A meno che non decidiate che la vostra versione debba girare solo su Windows.



Comunque il file prodotto dalla versione di Tommo ha qualche problemino(lascia qualche riga vuota e qualche spazio superfluo). Lo sta sistemando.

Ultima modifica di Vincenzo1968 : 17-01-2013 alle 10:57.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 10:55   #13
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515


Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 11:17   #14
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ah dimenticavo: il tempo dev'essere espresso in secondi.

Quindi non
Quote:
825 ms
ma
Quote:
0.825 secondi
"secondi" scritto per esteso, non abbreviato "s.".

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 11:33   #15
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi


I package di java proprio non ti entrano in testa . I file .class devono stare nella cartella contest. Devi lanciarlo da fuori dando il nome completo contest.Generate.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 12:44   #16
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
I package di java proprio non ti entrano in testa . I file .class devono stare nella cartella contest. Devi lanciarlo da fuori dando il nome completo contest.Generate.


Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 12:52   #17
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Spiegatemi una cosa. Le funzioni per la gestione dei file in C a 64 bit sono standard(e quindi posso tranquillamente compilare e in Windows e in Linux)?

Per esempio, la funzione "_ftelli64" è standard o è specifica del compilatore Microsoft?
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 12:56   #18
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quando hai compilato i sorgenti ti deve aver creato due file class. Il primo è Generate.class che è il programma principale. E poi c'è anche un Generate$1.class che è la classe anonima creata per TXT_FILES.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 13:26   #19
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515




Non è standard. Mo debbo arrangiarmi con le macro per la compilazione condizionale.

Che debbo usare per GCC/Linux?
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 13:28   #20
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Quando hai compilato i sorgenti ti deve aver creato due file class. Il primo è Generate.class che è il programma principale. E poi c'è anche un Generate$1.class che è la classe anonima creata per TXT_FILES.
Ok. Se non funziona nemmeno così le urla le sentirete fin lassù al nord.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nothing Ear e Ear (a): gli auricolari per tutti i gusti! La ''doppia'' recensione Nothing Ear e Ear (a): gli auricolari per tutti ...
Sony FE 16-25mm F2.8 G: meno zoom, più luce Sony FE 16-25mm F2.8 G: meno zoom, più lu...
Motorola edge 50 Pro: design e display al top, meno il prezzo! Recensione Motorola edge 50 Pro: design e display al top, m...
Ecovacs Goat G1-800, mettiamo alla prova il robot tagliaerba facile ed efficace Ecovacs Goat G1-800, mettiamo alla prova il robo...
ASUS ProArt 1, un PC completo ad altissime prestazioni per creator e non solo ASUS ProArt 1, un PC completo ad altissime prest...
SYNLAB sotto attacco: sospesa l'attivit&...
BYD Seal U, primo contatto. Specifiche, ...
Intel ha completato l'assemblaggio dello...
Cina: aumenta del 40% la produzione di c...
GPT-4 quasi come un oculista: in un test...
Prezzi super per gli Apple Watch SE di s...
L'intelligenza artificiale ruba posti di...
The Witcher 3: disponibile su Steam il R...
Xiaomi 15: trapelano importanti specific...
Fallout 5? Meglio aspettare la seconda s...
Motorola Edge 50 Pro è ora disponibile s...
La tecnologia digitale sta trasformando ...
ASUSTOR presenta ADM 4.3 con nuove funzi...
S8 MaxV Ultra e Qrevo Pro: i nuovi aspir...
Goldene: creati, per la prima volta, fog...
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: 00:06.


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