Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-02-2013, 14:54   #41
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
Ma che cacchio dici? l'NFA ha il backtracking. Che cacchio dici? Leggiti l'articolo che ho postato e vedrai la differenza che c'è tra nfa e dfa. Leggiti il libro di Hopcroft e vedrai. Vedrai vedrai.
Un automa a stati finiti è deterministico se tutte le coppie (stato, simbolo di ingresso) producono una singola transizione allo stato successivo. Per gli automi non deterministici questo non è vero e quindi ci possono essere più transizioni.

Il backtracking non è una caratteristica degli nfa ma semplicemente una tecnica usata dalle varie librerie che implementano le regexp per trovare tutte le possibili soluzioni. Rileggiti articolo e libro che non hai capito bene.

Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
In quanto al "premature optimization" ti vorrei far notare che Knuth viene spesso, come in questo caso, citato a sproposito.

Premature optimization is the root of all evil è una frase di Knuth che si trova all'interno di un articolo in cui l'autore si spinge a considerare come buono l'uso del famigerato goto pur di migliorare le prestazioni.
In quell'articolo l'autore scrive che ama il codice leggibile e ben ordinato ma non ama per niente il codice inefficiente.
Cosa c'entra knuth?

Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
Vorrei vedere, nel caso di file xml di grosse dimensioni, le regexp in confronto al dfa superottimizzato come quello prodotto dagli strumenti suindicati...

Un automa a stati finiti deve scorrere tutti i caratteri uno alla volta per trovare tutti i match nel file xml. Si tratta di una soluzione lineare O(n) che dipende solo dalla dimensione del file quindi piuttosto efficiente.

La regexp dipende tantissimo dall'implementazione ma in java dovrebbe procedere così:
1. La parte iniziale "<title>" è composta da soli litteral. Può usare boyer-moore per cercare la prima occorrenza da cui partire con il match. Mi pare di ricordare che come algoritmo sia O(n/m) quindi più efficiente del normale automa.
2. Una volta trovato l'inizio del tag può fare la parte centrale di cattura del contenuto senza backtracking. [^<]+ è un semplice ciclo for.
3. Una volta catturato il contenuto esegue il test per "</title>" anche qui si tratta di soli litteral quindi ciclo for.
4. Se fa match riparte dal punto 1 partendo con la ricerca dopo </title> perché ormai il testo è stato consumato. Se non c'è stato parte dalla posizione successiva al <title> perché le () introducono backtracking.

L'uso di boyer-moore per trovare l'inizio dei match ed il fatto che il resto equivale in sostanza ad un dfa mi fa pensare che la regexp potrebbe essere più performante o in sostanza equivalente.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 14:57   #42
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Si ma

http://www.hwupgrade.it/forum/showpo...1&postcount=40

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 15:14   #43
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
http://msdn.microsoft.com/en-us/library/0yzc2yb0.aspx

The .NET Framework regular expression engine is a backtracking regular expression matcher that incorporates a traditional Nondeterministic Finite Automaton (NFA) engine such as that used by Perl, Python, Emacs, and Tcl. This distinguishes it from faster, but more limited, pure regular expression Deterministic Finite Automaton (DFA) engines such as those found in awk, egrep, or lex

Conferma ogni singola parola che ho scritto. Il matcher di c# fa uso di backtracking e di un nfa. Non è l'automa ma il matcher ad usarlo.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 15:39   #44
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
http://algs4.cs.princeton.edu/54regexp/

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 15:44   #45
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
https://github.com/knowitall/openregex

Implementation

Regular expressions are evaluated using Thomson NFA, which is fast and not have the pathological cases that most regular exprsesion libraries have. For more information about Thomson NFA in comparison to recurseive backtracking, read http://swtch.com/~rsc/regexp/regexp1.html. Future work may involve compiling NFAs to DFAs.

Future Work

Compile to DFA.

Use parser combinators for parsing regular expressions.

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 16:21   #46
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
Classici pattern patologici. Nel primo caso è l'alternazione unita al * mentre nel secondo è il doppio * interno ed esterno a far saltare il tutto. Risolverli è bovino. Basta usare l'atomic grouping o i possesive quantifiers a seconda dei gusti personali.

Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
https://github.com/knowitall/openregex

Implementation

Regular expressions are evaluated using Thomson NFA, which is fast and not have the pathological cases that most regular exprsesion libraries have. For more information about Thomson NFA in comparison to recurseive backtracking, read http://swtch.com/~rsc/regexp/regexp1.html. Future work may involve compiling NFAs to DFAs.

Future Work

Compile to DFA.

Use parser combinators for parsing regular expressions.

Ennesima riconferma di quello che scrivevo. Dfa e nfa sono equivalenti.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 20:56   #47
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Minchia si, equivalenti sono(in un occhio si e in un occhio no):



Proprio uguali uguali.



RegExpVicius.java:
Codice:
import java.util.regex.Pattern;
import java.util.regex.Matcher;

// <title>Mio libro</title><year>2012</year><home>Mia casa</home>

public class RegExpVicius {

    public static void main(String[] args) {
		int x;
        String xml = "<title>Mio libro</title><year>2012</year><home>Mia casa</home>";

        Pattern TITLE = Pattern.compile("<title>([^<]+)</title>");
		
        x = 0;
        while ( x < 100000000 ) {
			Matcher matcher = TITLE.matcher(xml);
			while (matcher.find()) {
				if ( x < 3 )
					System.out.println("Titolo: " + matcher.group(1));
			}
			x++;
		}
    }
}
RegExpVincenzo1968.java:
Codice:
import java.io.Console;

public class RegExpVincenzo1968
{	
    public static void main(String[] args)
    {
		int x;
        String xml = "<title>Mio libro</title><year>2012</year><home>Mia casa</home>";        
        
		CParser parser = new CParser();			
		                
        x = 0;
        while ( x < 100000000 )
        {			
			if ( parser.Parse(xml) )
				if ( x < 3 )
				System.out.println(parser.GetValue());
			
			x++;
		}
    }    
}
Le classi CLexer e CParser sono un adattamento di quelle che avevo postato nel thread sulle espressioni aritmetiche:

http://www.hwupgrade.it/forum/showpo...96&postcount=7

Chi fosse interessato ai sorgenti mi contatti via pm

Il mio dfa non è nemmeno ottimizzato. Non ho nemmeno minimizzato gli stati



Vicius, Vicius! L'nfa è una illusione. L'nfa Java una doppia illusione.(semi cit.)

EDIT: Non capisco perché mi si sminchia l'indentazione. Il codice è perfettamente indentato. Mah!

Ultima modifica di Vincenzo1968 : 01-03-2013 alle 10:01.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 21:22   #48
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2776
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
EDIT: Non capisco perché mi si sminchia l'indentazione. Il codice è perfettamente indentato. Mah!
Perché un po' è indentato con i tab e un po' con gli spazi
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 21:38   #49
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
Vicius, Vicius! L'nfa è una illusione. L'nfa Java una doppia illusione.(semi cit.)
Ci sono diverse cose che non vanno in quel codice che hai postato. Poi potrei farti vedere come portare il tempo di esecuzione sotto i 3 secondi (sarebbe un po' imbrogliare ). Però francamente non ne ho più voglia. Pensavo, anzi no speravo, che col tempo ti saresti un po' aperto cercando di crescere ma vedo non ti interessa. Rimani pure nel tuo piccolo mondo.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 22:39   #50
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Perché un po' è indentato con i tab e un po' con gli spazi
No è indentato solo con i tab. Forse la cosa è dovuta al fatto che Geany, non so perché, mi aggiunge un sacco di tab alla fine di ogni riga(e non capisco con quale criterio: ci sono righe senza tab alla fine e righe con un fottìo di tab ).

Quindi io da me il codice lo vedo perfettamente indentato. Quando lo copincollo qui, evidentemente tutti quei tab a fine riga combinano il casino.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 22:49   #51
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Ci sono diverse cose che non vanno in quel codice che hai postato. Poi potrei farti vedere come portare il tempo di esecuzione sotto i 3 secondi (sarebbe un po' imbrogliare ). Però francamente non ne ho più voglia. Pensavo, anzi no speravo, che col tempo ti saresti un po' aperto cercando di crescere ma vedo non ti interessa. Rimani pure nel tuo piccolo mondo.
Che schifìo c'è nel codice che ho postato? E' semplicemente il codice che hai postato tu racchiuso all'interno di un ciclo while che itera per 100000000(leggasi: cento milioni) di volte.

Ultima modifica di Vincenzo1968 : 28-02-2013 alle 22:56.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 04:36   #52
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
EDIT: Non capisco perché mi si sminchia l'indentazione. Il codice è perfettamente indentato. Mah!
Aprilo in gvim e scrivi:
Codice:
:1,$s/\t/    /g
Cosi' sostituisci tutti i tab con spazi.

Dopo di che, scrivi:
Codice:
:se expandtab
Questo fa in modo che i tuoi tab vengano automaticamente rimpiazzati con l'adeguato numero di spazi durente l'editing.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 09:45   #53
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Aprilo in gvim e scrivi:
Codice:
:1,$s/\t/    /g
Cosi' sostituisci tutti i tab con spazi.

Dopo di che, scrivi:
Codice:
:se expandtab
Questo fa in modo che i tuoi tab vengano automaticamente rimpiazzati con l'adeguato numero di spazi durente l'editing.
No ma il problema non sono i tab in sè. Sono i tab a fine riga.
Per esempio:

\tif (x > 0)

me lo ritrovo così:

\tif (x > 0)\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t

Vedi tutti quei tab(\t) alla fine?

È fastidioso anche quando debbo aggiungere del codice alla fine della riga. Mi sposto nella riga, premo il tasto "Fine" e mi ritrovo a millemila chilometri di distanza. Mi tocca eliminarli con backspace. Alla fine mi fa male il ditino.

Non c'è modo, con Vim, di eliminare del tutto i tab a fine riga anziché sostituirli con spazi? Ma i tab all'inizio della riga me li deve lasciare.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 09:47   #54
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
No ma il problema non sono i tab in sè. Sono i tab a fine riga.
Per esempio:

\tif (x > 0)

me lo ritrovo così:

\tif (x > 0)\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t

Vedi tutti quei tab(\t) alla fine?

È fastidioso anche quando debbo aggiungere del codice alla fine della riga. Mi sposto nella riga, premo il tasto "Fine" e mi ritrovo a millemila chilometri di distanza. Mi tocca eliminarli con backspace. Alla fine mi fa male il ditino.

Non c'è modo, con Vim, di eliminare del tutto i tab a fine riga anziché sostituirli con spazi? Ma i tab all'inizio della riga me li deve lasciare.
Codice:
%s/\t*$//g
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 10:52   #55
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Comunque:

http://infolab.stanford.edu/~ullman/ialc.html

http://www.amazon.com/gp/product/032...27CA8DP7KDKZ87


Il testo tratta l'argomento da un punto di vista pratico, non formale. Se preferite qualcosa di più formale, più rigoroso, dovete procurarvi la prima edizione. Ma non è per tutti: dovete avere delle solide basi matematiche. Io, per esempio, non riuscirei a leggerlo. Occhio! Be careful!

http://shop.oreilly.com/product/9780596528126.do


Su quest'ultimo si veda:

- il par. 4.6: NFA, DFA and POSIX
- il par 4.6.3.1: DFA efficiency: you get consistent, clean power.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 14:14   #56
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ottimizzato codice. Minimizzati stati dell'automa. Sostituiti if statement con switch statement.

Nuovi tempi:






NFA...
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 16:09   #57
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
http://www.hwupgrade.it/forum/showpo...&postcount=130

Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Ma anche no.

È vero che ho sparato la lettura dei file su thread multipli ma l'ho fatto solo per divertimento. Non credo di aver ottenuto un incremento di prestazioni con quello.

Piuttosto eliminando la regex per la pulizia dei file e passando a nio ho potuto costruirmi in anticipo i bytebuffer che avrei usato poi durante la scrittura, mappare in memoria i file da leggere, gestirmi il buffering a mano ed allocare i buffer fuori dal heap.

Usando collectins.shuffle al posto di Random dovrei aver anche aiutato il processore che di sicuro prima sbarellava a causa degli accessi completamente casuali alla memoria.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Nuovo storico lancio per il razzo spazia...
Elgato Embrace: una sedia ergonomica pro...
Brad Pitt torna in pista: F1 – Il Film a...
Hitachi Vantara annuncia la sua AI Facto...
Brembo passa all'alluminio riciclato al ...
HONOR pronta a sfidare gli iPad Pro con ...
OpenAI esce allo scoperto: confermati i ...
In arrivo altri due prodotti da Apple en...
Il tool per aggiornare da Windows 10 a W...
Rishi Sunak entra in Microsoft e Anthrop...
Porsche in poche ore chiude la formazion...
iPhone 17 disponibili su Amazon al prezz...
La Ferrari Elettrica non è la cau...
Ricarica da record: Zeekr supera i 1.300...
Un 'capezzolo' con feedback aptico al po...
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: 02:07.


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