Richiede sempre molta pratica di programmazione prima di padroneggiare veramente un algoritmo? [chiuso]

1

Ho programmato per diversi anni. E ho scoperto che è sempre difficile padroneggiare un algoritmo (che cosa significa "master" qui è capire come funziona l'algoritmo e potrebbe implementarlo indipendentemente in qualche linguaggio di programmazione).

Potrei implementare alcuni semplici algoritmi (come bubble sort, ricerca binaria, algoritmi di attraversamento grafico di base come DFS, BFS, problemi di programmazione dinamica di base come). Ma è molto difficile per me padroneggiare alcuni algoritmi avanzati come KMP, max-flow.

Potrei capire l'idea di base dietro gli algoritmi. Ma di solito sono bloccato all'implementazione e dimentico l'algoritmo da un po '.

Quindi le mie domande sono:

  1. qual è una procedura ragionevole per imparare / padroneggiare un nuovo algoritmo?
  2. Ho bisogno di esercitarmi ancora e ancora su piattaforme come USACO, topcoder per dominarlo? O c'è un modo migliore?
posta xiao 18.09.2011 - 13:56
fonte

3 risposte

7

In L'arte della programmazione informatica Donald Knuth suggerisce di eseguire manualmente l'algoritmo con carta e penna per renderlo veramente interno. Ho trovato che funziona bene.

Sono sicuro che un sacco di gente qui deriderà questo come pedante, ma se stai facendo analisi algoritmica (cioè, cercando di trovare prestazioni e caratteristiche di memoria neutrali all'hardware), vale la pena tentare. Questo è prima facie richiesto se stai analizzando qualcosa in cripto poiché probabilmente vorrai provare certi aspetti probabilistici dell'algoritmo.

Per prima cosa ammetto che questa pratica richiede molto tempo ed è probabilmente in disaccordo con la maggior parte dei programmatori ... Faccio ricerca quindi non ho davvero scadenze. Penso che sia bene prendere familiarità con l'algoritmo in astratto e vedere il particolare linguaggio di programmazione come una mera implementazione di quell'algoritmo. Sfortunatamente, il corpo teorico del lavoro per la relazione tra qualcosa come un algoritmo matematicamente astratto e la sua "reificazione" (sorry!) Nella sintassi non è ancora completo.

    
risposta data 18.09.2011 - 17:41
fonte
0

Penso ad un livello più astratto degli algoritmi che in un linguaggio di programmazione: le idee essenziali, i meccanismi e la grande complessità nello spazio e nel tempo non richiedono il livello dettagliato di un linguaggio di programmazione.

Quindi penso che non dovresti forzare te stesso a essere in grado di implementare ogni algoritmo in un solo passaggio. Piuttosto conosci un ampio insieme di algoritmi o concetti algoritmici ancora più astratti. Quindi puoi decidere quale algoritmo scegliere, e se non ne trovi uno appropriato in una libreria, solo allora impiega più tempo a implementarlo.

Per apprendere questi algoritmi e concetti algoritmici astratti, leggi piuttosto un diario di libri o conferenze sugli algoritmi, vedi per es. link .

    
risposta data 18.09.2011 - 15:43
fonte
0

Penso che il commento di delnan sia praticamente la risposta che ti serve. Per aggiungere qualcosa dalla mia parte, direi che ogni requisito o codice che implementate è di per sé un algoritmo. Supponiamo di voler aggiungere 100 dipendenti a un database aziendale e di estrarne uno con un salario inferiore a 5k / mese. L'algo per questo sarà: -

input:
a list of 100 employees, EmployeeTable
parameter to sort, SalaryParam
output:
a sortedList of employees, EmployeeTableWithFilter
----
define variables :
an integer count, i=0
----
While i < 100, do :
if List[i].Salary == SalaryParam
    EmployeeTableWithFilter.Add(List[i])
    i++
    return
otherwise,
    i++
    return
-----------------

Non sono bravo in Algorithm, ma spero che tu possa comprare quello che sto cercando di spiegare. In sostanza, un Algoritmo è un metodo generalizzato ed efficace espresso come un elenco finito di istruzioni ben definite per il calcolo di una funzione. Quindi, ogni funzione o programma che scrivi è un algoritmo di per sé

    
risposta data 18.09.2011 - 15:47
fonte

Leggi altre domande sui tag