Astrazione negli algoritmi

0

Ho fatto alcune domande sugli algoritmi, e alcuni hanno risposto che sono concetti astratti, tuttavia non so quale astrazione significhi per algoritmi o come si applica.

Per gli oggetti, so se rimuoviamo i dettagli di un oggetto lo abbiamo reso astratto, ad esempio un Person è più astratto di Student

Ho pensato che forse intendevano rimuovere i dettagli di un algoritmo e solo specificarlo con il suo input e output, ad esempio A = Sort(A) è più astratto dell'implementazione di bubble sort.

Sono corretto?

    
posta Ahmad 18.02.2015 - 09:24
fonte

3 risposte

1

Non spaventarti con le parole: l'astrazione è il processo di rimozione di ogni aspetto del problema che non è utile per risolverlo.

-Perché puoi concentrarti solo su ciò che conta-

L'astrazione è così ampiamente utilizzata perché esiste un numero di "schemi" in programmazione che continua a ripetersi in ogni applicazione. Trova il modello corrispondente al tuo problema, trova la soluzione astratta, implementalo e il gioco è fatto.
Ancora meglio: la maggior parte (? Tutti?) Delle linguaggi di codifica fornisce alcuni schemi astratti incorporati, che sono più facili da usare. Alcune API forniscono anche schemi più avanzati.

L'astrazione sta rimuovendo, così puoi raggiungere diversi livelli di astrazione rimuovendo più o meno aspetti del tuo problema. Ma se rimuovi troppi elementi, non dirai nulla sul nulla (expl: A=sort(A) non risolverà molti problemi ..).
D'altra parte, se mantieni troppi dettagli potresti non vedere ciò che è rilevante per risolvere il problema.
Equilibrio.

Consideriamo il problema dell'ordinamento: non è rilevante quale tipo di oggetto si desidera utilizzare, né il tipo di spazio di archiviazione che si sta utilizzando per tali oggetti. (E non sia la piattaforma o il linguaggio di programmazione che stai usando).
Ordinamento tutto si riduce a:
- avere una collezione di oggetti in cui è possibile iterare.
- avere un modo per confrontare due elementi.
Quindi lo scopo del tipo è di avere ogni due articoli successivi correttamente ordinati.

Ora puoi pensare a bubble sort / quick sort / ... per ogni tipo di raccolta iterabile di oggetti comparabili.
Risolvi il problema una sola volta e usalo ogni volta che incontri questo problema, non importa se stai usando una lista, un array, uno stack .... per memorizzare date, o oggetti grafici, o ...: il l'algoritmo astratto sarà lo stesso.

Javascript, ad esempio, come Collection incorporato chiamato Array (è in effetti un array dinamico che può essere sparse), che ha un metodo sort . L'unica cosa che devi fare per ordinare l'array è di fornire la funzione di confronto al metodo di ordinamento -Grande! -.

piccolo esempio:

  // let's define a collection of information about travels.
  var travels = [ travel1, travel2, travel3, ...  ] ;
  // sort the travels on their start date
  // : just provide the right comparison function to the sort method.
  travels.sort(  function ( t1, t2 ) { return t1.startDate - t2.startDate } );
  ==> done !

Rq: l'astrazione viene utilizzata per l'algoritmo, ma anche per la progettazione generale del software: ecco di cosa si tratta con gli schemi di progettazione.
Solo un piccolo esempio: immagina di avere un oggetto molto costoso da creare che potresti anche non usare, cosa puoi fare?
(vedi che questa domanda è molto 'astratta' non ci sono dettagli inutili sul tipo di oggetto, la risorsa usata, ..., c'è solo lo scheletro del problema).

La risposta è - > > > usa il modello di inizializzazione pigro: non creare l'oggetto finché non viene effettivamente richiesto dall'applicazione.

class SomeClass {

    public get someHeavyObject { 
         // create object if it was not created already
         if (_someHeavyObject == null) _someHeavyObject = new SomeHeavyObject();
         // return the object
         return _someHeavyObject;
    }

    private _someHeavyObject = null;
}

(altro sui modelli di design qui link )

Un altro grande vantaggio dell'astrazione è che quando cerchi aiuto, che si tratti di forum o di un compagno, non tutti vorranno ascoltare / leggere la descrizione di 30 minuti di ciò che stai costruendo.
Se vai dritto al punto estraendo il problema, aumenti notevolmente le tue possibilità di essere compreso e di ottenere la tua risposta.

Vincerai molto tempo riutilizzando i giusti tipi / algoritmi / schemi di dati astratti, quindi non esitare a indagare.

    
risposta data 18.02.2015 - 13:58
fonte
3

No, non hai ragione riguardo a cosa intendesse quella persona; il tuo riferimento agli oggetti è un dettaglio piuttosto tecnico dei linguaggi OO (che riguarda le astrazioni il codice è modeling ), e parlare di un algoritmo solo in termini di input e output è un diverso livello di astrazione, un passo troppo alto (ma allo stesso tempo troppo basso perché sembra che ci si ripensi in termini di linguaggio di programmazione).

Gli algoritmi sono concetti astratti nel senso che la definizione di un algoritmo specifico (diciamo Bubblesort) è indipendente da come è implementata. Puoi implementare Bubblesort in qualsiasi linguaggio di programmazione che ti piace, Haskell, Java, C, assembler o anche direttamente nell'hardware. Puoi persino farlo manualmente. Ma sarà sempre Bubblesort, farà sempre le cose nello stesso modo e avrà sempre le caratteristiche (O (n ^ 2) nel caso peggiore di esecuzione, O (n) sui dati preselezionati) di Bubblesort.

    
risposta data 18.02.2015 - 09:52
fonte
0

In generale un'astrazione è una semplificazione o una rappresentazione semplificata di qualcosa, in modo da produrre un'astrazione di un algoritmo sarebbe stato la sua forma nel modo più semplice - per un tipo questo sarebbe stato lo stato senza i dettagli di come i confronti o le sostituzioni hanno funzionato, per esempio.

    
risposta data 18.02.2015 - 11:21
fonte

Leggi altre domande sui tag