dilluns, gener 11, 2010

[Exercici] Unimodal

Inaguram amb aquesta entrada un nou apartat del blog, els exercicis de programació. Estau convidats a resoldre el problema (emprant pseudocodi o el vostre llenguatge preferit) i a compartir la vostra solució als comentaris.

Dificultat: Fàcil (1/5)

Enunciat: Es diu que una seqüència A = (a1,..., an) de longitud n >= 3 és unimodal si existeix un índex p, 1 <= p <=n, tal que a1 < a2 < ··· < ap i ap > ap+1 > ··· > an. A l'element ap se l'anomena pic. Escriu un algorisme de dividir i vèncer que donat un vector que conté una seqüència unimodal trobi el pic de la seqüència, amb cost O(log n).

Extret de: Col·lecció de problemes de Anàlisi i Disseny d'Algorismes

3 comentaris:

paurullan ha dit...

Pista? Fa dies que li dóno voltes i no se m'ocor. I no puc fer búsquedes a Google perque potser me surt la solució completa! >_<

servo ha dit...

Molt be, m'encanta que algú s'animi! :D

La solució és molt semblant a la cerca binària. En el cas de que el valor intermig (a_{m}) sigui menor que el següent(a_{m+1}, el pic ha de ser necessàriament al vector (a_{m+1},a{max}).

Pensa en adaptar la típica cerca binària recursiva per la seqüència unimodal, queda un codi molt curtet i mono!

Ànims, i a veure si t'animes a proposar qualque exercici al teu antic blog!

paurullan ha dit...

Però si els costos han de ser lg(n) no vol dir que per un vector de vuit elements sols puc fer tres consultes? No veig com puc determinar-ho sempre amb aquest cost.