typedef struct { unsigned int mantissa2 : 32; unsigned int mantissa1 : 20; unsigned int exponentbias1023 : 11; unsigned int signbit : 1; } doublemask; typedef union { double as_double; doublemask as_mask; } doubleandmask; inline unsigned int log_2(unsigned long n) { doubleandmask fm; fm.as_double = (double) n; return (fm.as_mask.exponentbias1023 - 1023); }(Joissakin arkkitehtuureissa, esim. sparcissa structin kenttien järjestys pitää kääntää päinvastaiseksi.) Varmista, että koodi toimii (myös suurilla luvuilla). Kokeile toimintaa myös 64-bittisessä arkkitehtuurissa (esim. pneuma). Selvitä, miten ja miksi koodi toimii.
X
ja Y
pisin yhteinen alijono on pisin merkkijono, joka saadaan sekä
X
:stä että Y
:stä poistamalla joitakin
merkkejä. Sivulla
http://www.cc.gatech.edu/classes/cs3158_98_fall/lcs.html
ja kirjassa Cormen, Leiserson, Rivest: Introduction to Algorithms
sivulla 317 (laitoksen kurssikirjahyllyssä) on
pisimmän yhteisen alijonon laskeva pseudokoodi.
Selvitä algoritmin toiminnan idea ja simuloi algoritmia
merkkijonoilla X="madagaskar"
ja Y="santiago"
.
b
-taulukon avulla. Varmista,
että algoritmisi toimii oikein.
c[m,n]
). Mm.
b
-taulukkoa ei tarvita. Suunnittele keinoja, joilla tätä
yksinkertaistettua algoritmia voidaan optimoida.
Tulevissa harjoituksissa jatketaan tehtävien 3, 4 ja 5 teemaa.