Quali sono alcuni modelli Java adatti per la codifica algoritmica veloce? [chiuso]

0

Sono al college e di recente ho iniziato a gareggiare nella programmazione di gare con i miei amici. Queste competizioni implicano la risoluzione rapida di problemi algoritmici. È molto divertente, ma c'è un problema: sono costretto a usare Java. (I miei compagni di squadra usano Java.)

Sfondo: sono un programmatore JavaScript autodidatta e mi fa male scrivere codice Java. Lo trovo molto prolisso e inflessibile e mi sento rallentato quando devo dichiarare i tipi e decidere quale delle 80 strutture di dati dell'elenco utilizzare. Sono anche frustrato per la mancanza di funzionalità di programmazione funzionale e per l'aspetto prolisso che utilizza espressioni, array e dizionari regolari.

Ad esempio, considera il problema di trovare la lunghezza della stringa più lunga di caratteri consecutivi in una determinata stringa. Quindi la stringa XX22BBBBccXX222 darebbe 4 , per la stringa di quattro B s. In Java, dovrei scorrere e contare manualmente i caratteri e tenere traccia manualmente del massimo. (Questo è almeno per quanto ne so - non ho familiarità con Java come con JavaScript.) In JavaScript, lo troverei in questo modo:

var max = Math.max.apply(Math, str.match(/(.)*/g).map(function (s) { return s.length; }));

Molto più semplice e veloce, nel mio libro.

La domanda: quali sono alcune caratteristiche, tecniche o modelli Java ben adattati per una codifica algoritmica veloce?

    
posta Casey Chu 03.11.2013 - 14:50
fonte

2 risposte

2

Ho fatto alcune gare di programmazione e ho scoperto che le cose più importanti da sapere erano:

  • Le API complete delle tue classi di raccolta . Stacks, Sets, Maps e Queues sono piuttosto importanti per molti algoritmi.
  • Tutti i trucchi Elaborazione di stringhe (regex, unione di stringhe, analisi ecc.). Questo perché le stringhe sono spesso utilizzate come input / tipi di dati da manipolare
  • Tutte le varianti dei costrutti di looping / iterazione - di nuovo questi vengono visualizzati così frequentemente, vuoi essere in grado di selezionare quello giusto e usarlo praticamente in modo automatico.
  • Funzioni del tuo IDE . Il completamento del codice, il controllo del tipo, il test delle unità, ecc. Sono molto utili se si vuole scrivere velocemente il codice, pur essendo sicuro al 99% che sia corretto. Il compilatore / IDE può aiutarti molto.
risposta data 03.11.2013 - 16:38
fonte
2

Il nocciolo del problema è che non hai familiarità con Java come i tuoi amici.

Invece di cercare una soluzione generica, direi che la soluzione migliore qui è la stessa di quando si cerca di imparare una lingua o una base di codice in altre situazioni: maggiore esposizione.

In questo caso, la cosa più semplice sarebbe guardare le soluzioni dei tuoi amici per vedere quali modelli hanno usato, ma potrebbero non essere i più efficaci.

Un altro approccio sarebbe prendere il tuo Javascript e scomporlo in una forma più iterativa. Ad esempio:

Math.max.apply(Math, str.match(/(.)*/g).map(function (s) { return s.length; }));

Ci sono 3 elementi concettuali fondamentali su questo:

  • Il regex per la ricerca di raggruppamenti
  • Conversione di ciascun gruppo in una lunghezza
  • Ricerca del massimo

Individualmente sono tutti piuttosto facili. Java ha supporto per i gruppi di espressioni regolari , tutto ciò che serve è un semplice ciclo per ottenere le lunghezze e trovare il il massimo è altrettanto facile. Può anche essere reso più semplice combinando gli ultimi due in Java: poiché tutto ciò che serve per l'output è il numero, tutto ciò che serve è una singola variabile per contenere il risultato finale, piuttosto che un intero array per tutte le lunghezze della stringa.

    
risposta data 03.11.2013 - 18:09
fonte

Leggi altre domande sui tag