<?xml version="1.0" encoding="ISO-8859-15"?>
<rss version="2.0"><channel>
<title>Prologissa algoritmeille tulee suuria kompleksisuuksia</title>
<link>http://sange.fi/~atehwa/cgi-bin/piki.cgi/</link>
<description>Recent changes in Prologissa algoritmeille tulee suuria kompleksisuuksia</description>
<item><title>Prologissa algoritmeille tulee suuria kompleksisuuksia</title>
<link>http://sange.fi/~atehwa/cgi-bin/piki.cgi/Prologissa%20algoritmeille%20tulee%20suuria%20kompleksisuuksia</link>
<guid>http://sange.fi/~atehwa/cgi-bin/piki.cgi/#1176890033</guid>
<description>&lt;p&gt;[...]

&lt;p&gt;Mutta on myös toinen, vähemmän ilmeinen syy Prolog-ohjelmien 
vahingossa suuriin kompleksisuuksiin. Suuria kompleksisuuksia saa 
ylipäänsä aikaiseksi moninkertaisilla rekursioilla. Esimerkiksi 
funktio, joka kutsuu itseään, on yleensä kompleksisuudeltaan O(n). 
Funktio, joka kutsuu O(n)-funktiota ja itseään, on yleensä 
kompleksisuudeltaan O(n^2). Nämä funktiot vielä pystyy kuvaamaan 
(sisäkkäisillä) silmukoilla, ja niinpä polynomiset kompleksisuudet 
&lt;ins&gt;ovat tuttuja myös ei-funktionaalisilla kielillä 
ohjelmoiville.&lt;/ins&gt; 

&lt;p&gt;&lt;ins&gt;Funktio, joka kutsuu itseään kahdesti, on tyypillisesti 
kompleksisuudeltaan O(2^n) eli eksponentiaalinen. Mutta nämä ovat vain 
primitiivirekursiivisia funktioita. Funktio, joka tekee toisen tai 
korkeamman asteen rekursioita, on tyypillisesti kompleksisuudeltaan yli 
kaikkien tavallisesti matematiikassa käytettyjen funktioiden. (Tämä 
johtuu siitä, että kaikilla matematiikassa tavallisilla funktioilla on 
primitiivirekursiivinen määritelmä.) Ackermannin funktio on esimerkki 
toisen asteen rekursiosta; se kykenee saamaan ällistyttäviä arvoja 
yksinkertaisesti siitä syystä, että se sisältää kahden rekursiivisen 
kutsun komposition (ts. yhden palautusarvo annetaan toiselle 
argumentiksi).&lt;/ins&gt; 

&lt;p&gt;&lt;ins&gt;Funktionaalisissa ohjelmointikielissä korkeamman asteen 
rekursiot on helppoa nähdä syntaktisesti: mikäli rekursiivisen kutsun 
"sisällä" (ts. argumenttilistassa) on toinen rekursiivinen kutsu, kyse 
on korkeamman asteen rekursiosta. Logiikkaohjelmointikielissä kuitenkin 
kompositiot esitetään "littanassa" muodossa, jolloin korkeamman asteen 
rekursioita voi syntyä vahingossa. Luulisin, että niitä voi jopa 
esiintyä vain tietyille suoritussuunnille, mutta tästä en ole 
varma.&lt;/ins&gt; 

&lt;p&gt;[...]

</description>
<pubDate>Wed, 18 Apr 2007 09:53:53 +0000</pubDate>
</item>

</channel></rss>
