Algorisme divideix i venceràs: diferència entre les revisions
Contingut suprimit Contingut afegit
Cap resum de modificació |
Corregir alguna falta i afegir links |
||
Línia 1:
En la cultura popular, '''divideix i venceràs''' fa referència a un [[refrany]] que implica resoldre un problema difícil, dividint-lo en parts més simples tantes vegades com sigui necessari, fins que la resolució de les parts es torna òbvia i senzilla. La solució del problema principal es construeix amb les solucions de les parts en que s'ha dividit el problema.
En el camp de les [[ciències de la computació]], el terme '''divideix i venceràs''' ('''DIV''') fa referència a un dels paradigmes més importants de disseny [[Algorisme|algorítmic.]] El mètode es basa en la resolució [[Recursivitat|recursiva]] d'un problema dividint-lo en dos o més
Aquesta tècnica és la base dels algorismes eficients per gairebé qualsevol tipus de problema com, per exemple, [[Algorisme d'ordenació|algorismes d'ordenació]] ([[quicksort]], mergesort, entre molts altres), [[Algorisme de multiplicació|multiplicació nombres grans]] (Karatsuba), [[Analitzador sintàctic|anàlisis sintàctiques]] (anàlisi sintàctica top-down), la [[Transformada de Fourier|transformada discreta de Fourier]] etc...
Línia 12:
== Precedents històrics ==
La cerca binària, un tipic algorisme de divideix i venceràs en el qual el problema original és parteix successivament en
Un exemple antic d'algorisme de “divideix i venceràs” amb múltiples subproblemes és la descripció realitzada per [[Carl Friedrich Gauß|Gauss]] el 1805 d'un algorisme que ara s'anomena algorisme de la ràpida transformació de FourierCooley-Tukey (FFT), encara que Gauss no va analitzar el seu [[Complexitat computacional|conjunt d'operacions]] quantitativament i els FFT no es van difondre fins que es van redescobrir gairebé un segle després.
Línia 23:
La resolució d'un problema mitjançant aquesta tècnica consta fonamentalment dels següents passos:
# En primer lloc ha de plantejar-se el problema de forma que aquest es pugui descompondre en k
# En segon lloc han de resoldre's independentment tots els
# Finalment, s'han de combinar les solucions obtingudes al pas anterior per construir la solució del problema original.
Línia 55:
=== Recursió ===
Els algorismes de “divideix i venceràs” s'implementen de forma natural, com a processos [[Recursivitat|recursius.]] En aquest cas, els
=== Pila explícita ===
Els algorismes de divideix i venceràs també poden ser implementats mitjançant un programa no recursiu que emmagatzemi els
=== Grandària de la pila ===
Línia 66:
=== Triar els casos base ===
En qualsevol algorisme recursiu, hi ha una llibertat considerable per triar els casos base, que són els
Triar els casos base més petits i simples possibles és més elegant i normalment permet obtenir programes més simples, perquè hi ha menys casos a considerar i són més fàcils de resoldre. Per exemple, un algorisme FFT podria parar la recursió quan l'entrada és una mostra simple, i l'algorisme quicksort d'ordenació podria parar quan l'entrada és una llista buida. En tots dos casos, només cal considerar un cas base, i no requereix processament.
Línia 157:
== Desavantatges ==
El principal desavantatge d'aquest mètode és la seva lentitud en la repetició del procés recursiu: les despeses indirectes de les crides recursives per a la resolució dels
Un altre desavantatge o inconvenient important, és la dificultat o fins i tot inconveniència d'aplicar el mètode a situacions en les quals la solució al problema general no es deriva de la suma directa i simple dels subproblemes (parts). Això es presenta per exemple quan són rellevants les interaccions o efectes mutus entre els subproblemes, la qual cosa genera nous subproblemes, en considerar cadascuna d'aquestes interaccions, incrementant exponencialment el nombre de subproblemes a considerar, en incrementar-se la complexitat de la situació general i dels seus components.
Línia 167:
* Multiplicació d'enters grans: algorisme eficient per multiplicar nombres de grandària considerable, que sobrepassen els límits de representació, i no abordable amb els algorismes clàssics a causa de l'excessiu cost.
* Subvector de suma màxima: Algorisme eficient per trobar subcadenes dins d'un vector evitant haver de recórrer tot el vector des de cada posició.
== Vegeu també ==
* [[Algorisme voraç]]
* [[Algorisme de Las Vegas]]
* [[Programació dinàmica]]
[[Categoria:Algorismes]]
[[Categoria:Pàgines amb traduccions sense revisar]]
|