È un algoritmo piuttosto comune nella riga di comando che analizza. Dato un insieme di nomi di opzioni lunghi predefiniti - calcola il prefisso più breve che identifica in modo univoco una di queste opzioni. Così, per esempio, per le seguenti opzioni:Come calcolare i prefissi unici più brevi di un set di stringhe?
-help
-hostname
-portnumber
-name
-polymorphic
Questo sarebbe l'output:
-he
-ho
-por
-n
-pol
sto pensando due possibili modi per farlo - sia come un albero:
*
/| \
/| \
H N P
/\ |
E O O
/\
R L
O la ricerca di stringhe:
for (String s : strings) {
for (int i = 1; i < s.length(); s++) {
if (search(strings,s.substring(0,i)) == 1) {
result.add(s.substring(0,i);
break;
}
}
}
Quindi, la domanda è:
- Quale sceglieresti?
- Mi manca un'ovvia terza via?
Contesto, contesto, contesto! Vorrei andare per quello che era meglio nel mio scenario. –
L'opzione 1 sembra il modo migliore per andare. Veloce, preciso e diretto ... – Kendrick
Il contesto è l'analisi della riga di comando, quindi sarebbe costruito una sola volta e utilizzato una sola volta. Dal momento che questo è garbage collection e la maggior parte dei sistemi operativi limita le righe di comando in meno di 1 MB l'utilizzo della memoria non è un problema. Le prestazioni devono essere bilanciate tra la costruzione della struttura e la successiva ricerca, poiché entrambe, in generale, verranno eseguite una sola volta. –