> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/fi/lisaa-aiheita/02-algorithms.md).

# Algoritmit

## Johdanto

*(Ohjelmakoodilistauksia varten, katso sen sijaan* [*tätä ohjesivua*](/latex/fi/muotoilu/11-code-listing.md) *sen sijaan.)*

Algoritmien tai pseudokoodin ladontaan LaTeXissa voit käyttää jotakin seuraavista vaihtoehdoista:

* Valitse JOKIN (`algpseudocode` TAI `algcompatible` TAI `algorithmic`)-paketeista algoritmin rungon ladontaan, ja `algorithm` pakettia algoritmin kuvatekstiä varten.
* Se `algorithm2e` pakettiin.

**Huomaa, että sinun tulisi valita vain yksi yllä olevista pakettiryhmistä ja käyttää vain sen paketin tarjoamia komentoja ja syntaksia, jonka valitset.** Näitä paketteja ei voi ladata samanaikaisesti; muuten saat paljon virheilmoituksia.

## algpseudocode- ja algorithm-paketit

Se `algpseudocode` paketti tarjoaa `algorithmic` ympäristön ja joitakin hyödyllisiä komentoja. Voit [avata täyden esimerkin Overleafissa](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) , ja käsittelemme joitakin yksityiskohtia tässä osiossa.

Tässä ensimmäinen algoritmimme, jossa käytetään ympäristöjä ja komentoja paketista `algpseudocode` pakettia:

```latex
\documentclass{article}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithmic}
\State $i \gets 10$
\If{$i\geq 5$}
    \State $i \gets i-1$
\Else
    \If{$i\leq 3$}
        \State $i \gets i+2$
    \EndIf
\EndIf
\end{algorithmic}

\end{document}
```

[Avaa tämä lyhyt algpseudocode-esimerkki Overleafissa](https://www.overleaf.com/docs?engine=\&snip_name=algpseudocode+short+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgpseudocode%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balgorithmic%7D%0A%5CState+%24i+%5Cgets+10%24%0A%5CIf%7B%24i%5Cgeq+5%24%7D+%0A++++%5CState+%24i+%5Cgets+i-1%24%0A%5CElse%0A++++%5CIf%7B%24i%5Cleq+3%24%7D%0A++++++++%5CState+%24i+%5Cgets+i%2B2%24%0A++++%5CEndIf%0A%5CEndIf+%0A%5Cend%7Balgorithmic%7D%0A%0A%5Cend%7Bdocument%7D)

Tässä on tulostettu lopputulos:

![Algpseudocode-0.png](/files/3610a1b4120288b2b5c53f3e2c59179a48b98ab0)

*Sinun ei pitäisi ladata `algorithm2e`, `algcompatible`, `algorithmic` paketteja, jos olet jo ladannut `algpseudocode`.*

Huomaa, että komentonimet, jotka tarjoaa `algpseudocode` ovat tyypillisesti otsikkokirjaimin kirjoitettuja, esim. `\State`, `\While`, `\EndWhile`.

Jos haluat lisätä algoritmiin rivinumerot, voit lisätä ensimmäisen rivinumeron `algorithmic` ympäristöön näin: `\begin{algorithmic}[1]` ja saada tämän tulosteen:

![Algpseudocode-00.png](/files/a06d4b514df274d3d96a8624dadc1d182c7deb12)

Yllä oleva algoritmiesimerkki ei sisällä kuvatekstiä eikä numerointia. Jos tarvitset algoritmin, jossa on kuvateksti, sinun on myös ladattava `algorithm` paketti ja lisättävä

```latex
\begin{algorithm}
\caption{...}
...
\end{algorithm}
```

ympäristösi ympärille. Voit käyttää `algorithmic` , jotta algoritmin numeroon voidaan viitata ristiin `\label{...}` edelle `\caption{...}`\usepackage{algorithm} `\ref{...}`.

```latex
\documentclass{article}
\caption{An algorithm with caption}\label{alg:cap}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithm}
\Require $n \geq 0$
\begin{algorithmic}
\Ensure $y = x^n$
\State $y \gets 1$
\State $X \gets x$
\State $N \gets n$
\While{$N \neq 0$}
\If{$N$ is even}
\State $X \gets X \times X$
    \State $N \gets \frac{N}{2}$  \Comment{Tämä on kommentti}
    \ElsIf{$N$ is odd}
\State $y \gets y \times X$
    \State $N \gets N - 1$
    Avaa tämä algorithm+algpseudocode-lyhyesimerkki Overleafissa
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}

\end{document}
```

[Algpseudocode-1.png](https://www.overleaf.com/docs?engine=\&snip_name=Captioned+algorithm%2Balgpseudocode+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgorithm%7D%0A%5Cusepackage%7Balgpseudocode%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balgorithm%7D%0A%5Ccaption%7BAn+algorithm+with+caption%7D%5Clabel%7Balg%3Acap%7D%0A%5Cbegin%7Balgorithmic%7D%0A%5CRequire+%24n+%5Cgeq+0%24%0A%5CEnsure+%24y+%3D+x%5En%24%0A%5CState+%24y+%5Cgets+1%24%0A%5CState+%24X+%5Cgets+x%24%0A%5CState+%24N+%5Cgets+n%24%0A%5CWhile%7B%24N+%5Cneq+0%24%7D%0A%5CIf%7B%24N%24+is+even%7D%0A++++%5CState+%24X+%5Cgets+X+%5Ctimes+X%24%0A++++%5CState+%24N+%5Cgets+%5Cfrac%7BN%7D%7B2%7D%24++%5CComment%7BThis+is+a+comment%7D%0A%5CElsIf%7B%24N%24+is+odd%7D%0A++++%5CState+%24y+%5Cgets+y+%5Ctimes+X%24%0A++++%5CState+%24N+%5Cgets+N+-+1%24%0A%5CEndIf%0A%5CEndWhile%0A%5Cend%7Balgorithmic%7D%0A%5Cend%7Balgorithm%7D%0A%0A%5Cend%7Bdocument%7D)

![ympäristö on](/files/8d60cbd27ef24425038f5bff78abc03142b8b3d0)

Se `algorithm` kuten [float](/latex/fi/kuvat-ja-taulukot/02-positioning-images-and-tables.md) , joten voit tarvittaessa lisätä kelluvan elementin sijoitteluvalitsimia `table` ja `figure`tarvittaessa. Tämä tarkoittaa myös sitä, että vaikka pitkä `[hbt!]` jälkeen `\begin{algorithm}` ympäristö voi itsessään katketa sivujen yli, `algorithmic` ympäristö ei voi. `algorithm` paketti tarjoaa myös

Se `algorithm` \listofalgorithms `komennon, joka toimii kuten` mutta otsikoiduille algoritmeille, kuten tässä. `\listoffigures`Algpseudocode-2.png

![Avaa täysi esimerkki Overleafissa](/files/3c6384709453f2123a4a67a4398a0c4e067c917e)

[The algcompatible/algorithmic and algorithm packages](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## paketti käyttää syntaksia, joka muistuttaa

Se `algorithmic` sen komentonimet on kirjoitettu suuraakkosin, esim. `algpseudocode`; **mutta** \STATE `\WHILE`, `\ENDWHILE`, `Toisaalta`.

tunnistaa suuraakkosilla ja otsikkokirjaimin kirjoitetut komentonimet, joten `algcompatible` kaikki tunnistetaan. Komentonimien lisäksi `\WHILE`, `\ENDWHILE`, `Toisaalta`, `\State`, `\While`, `\EndWhile` komennot käyttävät samaa argumenttien syntaksia kuin `algcompatible` ja `algorithmic` \usepackage{algcompatible} `algpseudocode`.

```latex
\documentclass{article}
% TAI \usepackage{algorithmic}
\STATE $i\gets 10$
\begin{document}
\begin{algorithmic}
\IF {$i\geq 5$}
\STATE $i\gets i-1$
  \ELSE
\IF {$i\leq 3$}
  \STATE $i\gets i+2$
    \ENDIF
  Avaa tämä lyhyt algcompatible-esimerkki Overleafissa
Avaa tämä lyhyt algcompatible-esimerkki Overleafissa
\end{algorithmic}

\end{document}
```

[Joissakin vanhemmissa malleissa tai asiakirjaluokissa saatetaan olla ladattu](https://www.overleaf.com/docs?engine=\&snip_name=algcompatible\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgcompatible%7D%0A%25+OR+%5Cusepackage%7Balgorithmic%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balgorithmic%7D%0A%5CSTATE+%24i%5Cgets+10%24%0A%5CIF+%7B%24i%5Cgeq+5%24%7D+%0A++%5CSTATE+%24i%5Cgets+i-1%24%0A%5CELSE%0A++%5CIF+%7B%24i%5Cleq+3%24%7D%0A++++%5CSTATE+%24i%5Cgets+i%2B2%24%0A++%5CENDIF%0A%5CENDIF+%0A%5Cend%7Balgorithmic%7D%0A%0A%5Cend%7Bdocument%7D)

paketteja, joten sinun on noudatettava annettua syntaksia ja komentonimiä. `algorithmic`paketteja, jos *Sinun ei pitäisi ladata `algorithm2e`, `algpseudocode` paketti on jo ladattu. `algorithmic` tai `algcompatible` pakettia voidaan käyttää*

Se `algorithm` lisäämään numeroidut kuvatekstit algoritmeihin. `algorithmic`/`algcompatible` The algorithm2e package

[The algcompatible/algorithmic and algorithm packages](https://www.overleaf.com/project/new/template/20768?id=71235978\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## paketilla on varsin erilainen syntaksirakenne kuin

Se `algorithm2e` paketeilla, joten sinun on oltava tarkkana sen suhteen, mitä pakettia haluat käyttää tai minkä paketin mallisi on ladannut. `algpseudocode`, `algcompatible` ja `algorithmic` paketti tarjoaa

Se `algorithm2e` \usepackage{algorithm2e} `algorithm` ympäristöä:

```latex
\documentclass{article}
$i\gets 10$\;
\begin{document}
\begin{algorithm}
\eIf{$i\geq 5$}
$i\gets i-1$\;
{
    $i\gets i+2$\;
}{
    \If{$i\leq 3$}
    {
        Avaa tämä lyhyt algorithm2e-esimerkki Overleafissa
    }
}
\end{algorithm}

\end{document}
```

[Algorithm2e-0.png](https://www.overleaf.com/docs?engine=\&snip_name=algorithm2e+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgorithm2e%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balgorithm%7D%0A%24i%5Cgets+10%24%5C%3B%0A%5CeIf%7B%24i%5Cgeq+5%24%7D%0A%7B%0A++++%24i%5Cgets+i-1%24%5C%3B%0A%7D%7B%0A++++%5CIf%7B%24i%5Cleq+3%24%7D%0A++++%7B%0A++++++++%24i%5Cgets+i%2B2%24%5C%3B%0A++++%7D%0A%7D%0A%5Cend%7Balgorithm%7D%0A%0A%5Cend%7Bdocument%7D)

![Jokainen rivisi lähdekoodissa](/files/023f2be6a20209245aad0ef503191ad38d54cf17)

päättyy *täytyy* muuten algoritmisi jatkuu samalla tekstirivillä tulosteessa. Vain rivit, jotka sisältävät lohkon aloittavan makron, eivät saa päättyä `\;` Kun käytät `\;`.

voit käyttää `algorithm2e` \caption{...}\ref{...} `tässä` ympäristössä suoraan ilman, että sinun tarvitsee ladata muita paketteja. Jos kuitenkin haluat lisätä kommentteja algoritmiisi, sinun on ensin määriteltävä käytettävä komentonimi: `algorithm` %% Tämä määrittelee komennon \Comment

```latex
%% Argumentti ympäröidään muodolla /* ... */
\SetKwComment{Comment}{/* }{ */}
\caption{An algorithm with caption}\label{alg:two}

\begin{algorithm}
\KwData{$n \geq 0$}
\KwResult{$y = x^n$}
$y \gets 1$\;
$X \gets x$\;
$N \gets n$\;
\While{$N \neq 0$}{
\eIf{$N$ is even}{
  $X \gets X \times X$\;
    $N \gets \frac{N}{2}$ \Comment*[r]{Tämä on kommentti}
    }{\If{$N$ is odd}{
  $y \gets y \times X$\;
      $N \gets N - 1$\;
      Avaa tämä otsikoitu algorithm2e-esimerkki Overleafissa
    }
  }
}
\end{algorithm}
```

[Algorithm2e-1.png](https://www.overleaf.com/docs?engine=\&snip_name=Captioned+algorithm2e+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgorithm2e%7D%0A%5Cbegin%7Bdocument%7D%0A%25%25+This+declares+a+command+%5CComment%0A%25%25+The+argument+will+be+surrounded+by+%2F%2A+...+%2A%2F%0A%5CSetKwComment%7BComment%7D%7B%2F%2A+%7D%7B+%2A%2F%7D%0A%0A%5Cbegin%7Balgorithm%7D%0A%5Ccaption%7BAn+algorithm+with+caption%7D%5Clabel%7Balg%3Atwo%7D%0A%5CKwData%7B%24n+%5Cgeq+0%24%7D%0A%5CKwResult%7B%24y+%3D+x%5En%24%7D%0A%24y+%5Cgets+1%24%5C%3B%0A%24X+%5Cgets+x%24%5C%3B%0A%24N+%5Cgets+n%24%5C%3B%0A%5CWhile%7B%24N+%5Cneq+0%24%7D%7B%0A++%5CeIf%7B%24N%24+is+even%7D%7B%0A++++%24X+%5Cgets+X+%5Ctimes+X%24%5C%3B%0A++++%24N+%5Cgets+%5Cfrac%7BN%7D%7B2%7D%24+%5CComment%2A%5Br%5D%7BThis+is+a+comment%7D%0A++%7D%7B%5CIf%7B%24N%24+is+odd%7D%7B%0A++++++%24y+%5Cgets+y+%5Ctimes+X%24%5C%3B%0A++++++%24N+%5Cgets+N+-+1%24%5C%3B%0A++++%7D%0A++%7D%0A%7D%0A%5Cend%7Balgorithm%7D%0A%0A%5Cend%7Bdocument%7D)

![Oletusarvoisesti käytetään](/files/964caffde006c133952712457f480d3479ce12bc)

algoritmistyyliä. Mutta jos pidät viivoista algoritmin ja kuvatekstin ympärillä, voit lisätä `plain` ruled `pakettivaihtoehdon, kun lataat` , tai kirjoita `algorithm2e`\RestyleAlgo{ruled} `asiakirjaasi. Tällöin otsikoidut algoritmisi ladotaan näin:` Algorithm2e-11.png

![paketti tarjoaa monia mukautusvaihtoehtoja. Esimerkiksi, jos haluat poistaa pystyviivat, jotka merkitsevät while—end while- ja if—end if -lohkoja, voit lisätä](/files/7a82ae84512a7d7e845be38ac5ff58f3f2919f7c)

Se `algorithm2e` noline `\SetNoline` , tai kirjoita `algorithm2e`\RestyleAlgo{ruled} `. A`komento on saatavilla myös `komennon, joka toimii kuten` (katso osio 3.1) `algorithm2e`.

[The algcompatible/algorithmic and algorithm packages](https://www.overleaf.com/project/new/template/20787?id=71277562\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Lisälukemista

* [`algpseudocode` pakettidokumentaatio](https://texdoc.org/pkg/algorithmicx) algorithmi
* [`algorithmic` ja `algoritmi` pakettidokumentaatio](https://texdoc.org/pkg/algorithms)
* [`algorithm2e` pakettidokumentaatio](https://texdoc.org/pkg/algorithm2e)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/fi/lisaa-aiheita/02-algorithms.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
