Domanda

Sono un programmatore C ++ per principianti e, per allungare la mente, ho provato alcuni dei problemi su projecteuler.net . Nonostante l'interesse per la matematica a scuola, mi sono trovato automaticamente a cercare soluzioni di forza bruta ai problemi, piuttosto che cercare qualcosa di snello o elegante.

Sembra una cattiva mentalità? Mi sento un po 'in colpa nel farlo in questo modo, ma forse veloce e sporco va bene qualche volta ...

È stato utile?

Soluzione

Penso che dovresti guardare qual è il tuo obiettivo finale e quali sono i tuoi vincoli.

A volte un metodo bruteforce può risolvere un problema in 50ms provando ogni combinazione di soluzioni e un "intelligente" la soluzione può risolverlo in 10ms. A quel punto, la soluzione meno intelligente ma più semplice da comprendere supera la soluzione intelligente.

Tuttavia, ci sono alcuni problemi in cui la forza bruta non sarà solo inelegante ma semplicemente non funzionerà. Ci sono molti problemi in cui, se si tenta di forzarli ingenuamente, ci vorrà molto tempo per risolverli. Quindi, ovviamente, questi tipi di problemi richiedono un approccio più elegante.

Quindi chiediti, perché stai tentando questi problemi di Project Euler? Lo stai facendo per imparare? Quindi forse provare una soluzione intelligente sarebbe nel tuo interesse, ma solo dopo aver inizialmente provato una soluzione di forza bruta per aiutarti a capire il problema.

Quando faccio i problemi di Python Challenge, provo a farlo nel modo più succinto possibile, spingendo i limiti delle mie capacità. Dopo averlo risolto, rivedo le risposte delle altre persone e prendo appunti mentali su persone più intelligenti di me e di ciò che hanno fatto. Alcune persone faranno un uso speciale di una struttura di dati a cui non avevo pensato che fosse più adatta al compito o avranno piccoli trucchi matematici che usano per rendere il loro algoritmo più efficiente. Alla fine cerco di assorbire quanta più intelligenza possibile e farla mostrare la prossima volta che mi viene presentato un problema di natura simile.

Altri suggerimenti

No, questa non è una brutta cosa. Ho avuto soluzioni così eleganti da sbagliarle.

Come programmatore principiante, spenderai più della tua energia mentale per capire come implementare effettivamente le cose in C ++, piuttosto che spendere energia per trovare una soluzione intelligente per ogni problema. Questo va bene, perché ti dà l'opportunità di esplorare diverse aree di C ++ mentre lavori su una serie di vari tipi di problemi.

Quando acquisisci competenza in C ++ e non devi pensare a come fare ogni piccola cosa, allora sarai in grado di dedicare più tempo a inventare soluzioni senza forza bruta.

Le soluzioni eleganti non sono state create spontaneamente; sono stati derivati ??dalle soluzioni a forza bruta quando era richiesta più velocità o meno consumo di memoria dalla soluzione attuale.

Quindi no, non lo è. È così che sono nate le soluzioni eleganti.

Ho attraversato questa evoluzione:

  1. Fallo compilare
  2. Fallo funzionare come previsto
  3. Scopri una soluzione che funziona
  4. Scopri una buona soluzione
  5. Scopri più soluzioni e trova le migliori
  6. Scopri più soluzioni e trova il meglio per questa situazione
  7. ?? non ci sono ancora arrivato

Direi che no, non è un brutto segno. In effetti, stai facendo un favore a te stesso allontanandoti dalle ottimizzazioni premature, che è sicuramente una buona cosa.

Ken Thompson: " In caso di dubbio, usa la forza bruta "

l'apprendimento è un processo di forza bruta. Non direi male. Nel provare a fare qualcosa in quel modo potresti notare uno schema. Penso che finché pensi a qualcosa e cerchi di trovare soluzioni, imparerai. Ci sono poche persone che saltano alle soluzioni più eleganti o efficienti.

Sarebbe difficile convincermi che le persone che stanno cercando di imparare potrebbero mai essere definite cattive. Tranne forse uno scienziato malvagio: P

buona fortuna.

Ti adatti alla regola di runtime di 1 minuto per i problemi? Se sì, allora la tua "forza bruta" La soluzione soddisfa tutti i requisiti e in realtà è un ottimo segno che puoi trovare rapidamente qualcosa che funzioni!

Questo tipo di problemi incoraggia la micro-ottimizzazione e algoritmi molto intelligenti, ma in generale un'implementazione molto leggibile sarà molto più facile da mantenere e sarà favorita nel mondo degli affari.

Se capita che si tratti di una situazione in cui "forza bruta" = & Gt; & Quot; semplice " e "elegante" = & Gt; "complesso", quindi vince la forza bruta. E questo è molto spesso vero.

Niente affatto. Risolvi il problema correttamente e completamente, quindi rendilo più performante o elegante se necessario.

Questo non vuol dire che dovresti ignorare evidenti miglioramenti delle prestazioni ... Non concentrarti su di loro fino a quando non capisci meglio il problema.

Per inserirlo in un contesto diverso:

Quando usi una libreria che non conosci molto bene (per la creazione dell'interfaccia utente, ad esempio) puoi risolvere un semplice problema in modo perfettamente performante, anche se sai che esiste un modo "corretto". per farlo. Se sei curioso e preoccupato che il tuo codice di forza bruta ti faccia sembrare un deficiente, troverai presto il modo "corretto" per farlo (ad es. nei fine settimana o mentre dormi). Nel frattempo, attraverso la forza bruta, avrai qualcosa che funziona.

In realtà dimentico di usare la forza bruta a volte e inizio a scansionare l'API per il "giusto" soluzione. Questo è sicuramente un errore in molti casi. Se la soluzione della forza bruta è facile da implementare, si ridimensiona secondo le tue necessità (davvero, se funziona), quindi dimentica la soluzione corretta. La troverai abbastanza presto (e molte volte lo sapevo già!), ma nel frattempo hai risolto il problema e sei riuscito a passare al successivo.

I blocchi stradali sono terribili durante la codifica e dovrebbero assolutamente essere evitati più delle soluzioni di forza bruta.

Sicuramente non è un brutto segno la tendenza alla forza bruta, specialmente come principiante perché potresti non conoscerlo meglio. Soprattutto con Project Euler, è un brutto segno implementare un metodo di forza bruta e non rivedere i commenti per imparare un metodo più efficiente.

Finisco spesso nella stessa barca in cui ti trovi ed è proprio per questo che ho iniziato a fare P.E. problemi - Stavo implementando molti approcci di forza bruta e volevo espormi a soluzioni più eleganti ...

Hai pesato la tua opzione. Se la soluzione della forza bruta farà il lavoro e funziona bene, è una buona soluzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top