Pentsamendu konputazionala

Gorka Julio

2018, Abendua 17
Arloa: Sarean

Pentsamendu konputazionala edozein programazio hizkuntzaren oinarria da, horregatik da interesgarria zertan datzan jakitea. Eguneroko arazoak zein bizitza profesionalekoak konpontzen laguntzen duen paradigma bat da pentsamendu konputazionala. Hots, arazoei aurre egiteko modu bat da, bai IKTak lagun ditugunean, baita ez ditugunean ere.

Eratostenesen bahea

Pentsamendu konputazionala edozein programazio hizkuntzaren oinarria da, horregatik da interesgarria zertan datzan jakitea. Eguneroko arazoak zein bizitza profesionalekoak konpontzen laguntzen duen paradigma bat da pentsamendu konputazionala. Hots, arazoei aurre egiteko modu bat da, bai IKTak lagun ditugunean, baita ez ditugunean ere.

Definizio guztien artean hauxe da ezagunena: Cuny, Snyder, Wing-ena.

Pentsamendu konputazionala: arazoak eta arazo horien konponbideak formulatzeko jarraitutako prozesu mentala. Konponbide horiek informazio prozesuko agente batek aurrera eraman ahal izango balitu bezala irudikatzen dira.

Oinarrian, ideia eta datu horiek modu konkretu batean lotzean datza pentsamendu konputazionala; IKTak (Informazioaren eta Komunikazioaren Teknologiak) lagun izateko moduan formulatu, eta horrela arazo konkretuen konponbidera iristea da helburua. Baliteke IKTak ez izatea beharrezkoak, baina aurrera eramango den planteamendu formalak teknologia horiek erabili ahal izateko egon beharko du formulatuta.

Adibidez, erraza da inolako teknologiarik erabili gabe lehenengo 100 zenbaki lehenak kalkulatzea, baina argi dago nolabaiteko laguntza teknologikoarekin soluzioa askoz errazagoa izango litzatekeela.

Horretarako algoritmoak erabiltzen dira, helburu bat lortzea bilatzen duen urrats sekuentzial eta ordenatuen taldea. Sekuentziala, urrats bat bestearen atzetik exekutatu behar delako. Ordenatua, ordena zehatz bat mantendu behar delako. Prozesatu ondoren, algoritmoak helburu konkretura iristea lortzen du.

Algoritmoak hiru mailatan deskriba daitezke, programazioari dagokionez:

  1. Goi mailako deskribapena: Problema zehaztu. Eredu matematiko baten bidez algoritmoa deskribatzen da eta modu generikoan azaltzen da, hitzen eta bestelako baliabideen bidez. 

  2. Deskribapen formala: Sasikoderen bat erabiltzen da prozesua modu sekuentzialean irudikatzeko.

  3. Inplantazioa: Aurretik definitutako sasikodea programazio lengoaia batekin adierazten da.

Bizkotxoaren errezeta hartuko bagenu eredu bezala:

  1. Beharrezko osagai eta material guztiak, eta bizkotxo bat egiteko deskribapen orokorra.

  2. Jarraitu beharreko urratsen deskribapen zehatza: denborak, tenperatura, metodo konkretua.

  3. Sukaldeko robot batzuek dagoeneko badakarte algoritmo bat, zeinak, martxan jarrita, bizkotxoa egiteko prozesu guztia egiten duen.

Adibide erreal batekin hobeto ulertzen da. Algoritmikan erabilienetakoak dira bilaketa algoritmoak dira. Adibide erreal eta ezagunenetako bat merge sort izenekoa da, John Von Neumann-ek deskribatutako nahasketa bidezko ordenazioa. Zerrendaren luzeera 0 edo 1 bada, dagoeneko ordenatuta dago. Bestela, hau da algoritmoaren goi mailako deskribapena:

  1. Ordenatu gabe dagoen zerrenda bi zerrenda txikiagotan banatu, elementu erdiak bakoitzean jarrita, gutxi gorabehera.

  2. Zerrenda txiki bakoitza errekurtsiboki ordenatu, nahasketa bidezko ordena aplikatuz.

  3. Bi zerrenda txikiak ordenatutako zerrenda bakar batean nahastu.

Hauxe izango litzateke horren deskribapen formala, sasikodean:

function mergesort(m)
var list left, right, result
if length(m) ≤ 1
return m
else
var middle = length(m) / 2
for each x in m up to middle - 1
  add x to left
for each x in m at and after middle
  add x to right
left = mergesort(left)
right = mergesort(right)
if last(left) ≤ first(right)
append right to left
return left
result = merge(left, right)
return result

Bilaketa hori aipatu bezala egiten duen programa bat izango litzateke inplantazioa, edozein programazio lengoaian eta hau bere exekuzioa:

Merge sort

Ikusi dugu beraz, pentsamendu konputazionala ez dela soilik programatzen jakitea, baizik eta arazoak, zatitu eta algoritmoen bidez erantzun bat bilatzen jakitea ere bada; egunero egin behar dugun zerbait.