> 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/no/flere-emner/02-algorithms.md).

# Algoritmer

## Innledning

*(For å skrive programkodeoppføringer, se* [*denne hjelpesiden*](/latex/no/formatering/11-code-listing.md) *i stedet.)*

For å sette opp algoritmer eller pseudokode i LaTeX kan du bruke ett av følgende alternativer:

* Velg ÉN av (`algpseudocode` ELLER `algcompatible` ELLER `algorithmic`) pakkene for å sette algoritmeinnholdet, og `algorithm` pakken for å gi algoritmen bildetekst.
* Den `algorithm2e` pakken.

**Merk at du bare bør velge én av de ovennevnte pakkeguppene, og bare bruke kommandoene og syntaksen som tilbys av pakken du velger.** Disse pakkene kan ikke lastes inn samtidig; ellers får du mange feil.

## Pakkene algpseudocode og algorithm

Den `algpseudocode` pakken gir en `algorithmic` miljø og noen nyttige kommandoer. Du kan [åpne et fullstendig eksempel på Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) , og vi går inn på noen detaljer i denne delen.

Her er vår første algoritme, med miljøer og kommandoer fra `algpseudocode` pakken:

```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}
```

[Åpne dette korte algpseudocode-eksemplet i Overleaf](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)

Her er resultatet:

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

*Du bør ikke laste inn `algorithm2e`, `algcompatible`, `algorithmic` pakkene hvis du allerede har lastet inn `algpseudocode`.*

Merk at kommandonavnene som tilbys av `algpseudocode` vanligvis har stor forbokstav, f.eks. `\State`, `\While`, `\EndWhile`.

Hvis du vil legge til linjenummer til algoritmen, kan du legge det første linjenummeret til `algorithmic` miljøet slik: `\begin{algorithmic}[1]` og få dette resultatet:

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

Algoritmeeksemplet ovenfor har verken bildetekst eller nummer. Hvis du trenger en algoritme med bildetekst, må du også laste inn `algorithm` pakken, og legge til

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

rundt ditt `algorithmic` miljø. Du kan bruke `\label{...}` etter `\caption{...}`, slik at algoritmenummeret kan kryssrefereres med `\ref{...}`.

```latex
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithm}
\caption{An algorithm with caption}\label{alg:cap}
\begin{algorithmic}
\Require $n \geq 0$
\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{This is a comment}
\ElsIf{$N$ is odd}
    \State $y \gets y \times X$
    \State $N \gets N - 1$
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}

\end{document}
```

[Åpne dette korte eksemplet med algorithm+algpseudocode i Overleaf](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)

![Algpseudocode-1.png](/files/cee72707dbcb61f379b5c9c7c04a1de2be3069b0)

Den `algorithm` miljø er et [float](/latex/no/figurer-og-tabeller/02-positioning-images-and-tables.md) som `table` og `figure`, så du kan legge til plasseringsmodifikatorer for flytende objekter `[hbt!]` etter `\begin{algorithm}` hvis nødvendig. Dette betyr også at mens et langt `algorithmic` miljø alene kan brytes over sider, kan et `algorithm` miljø ikke det.

Den `algorithm` pakken gir også en `\listofalgorithms` kommando som fungerer som `\listoffigures`, men for algoritmer med bildetekst, slik:

![Algpseudocode-2.png](/files/a11328b6e2d152565c674493fd958d7556f7ab64)

[Åpne et fullstendig eksempel på Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Pakkene algcompatible/algorithmic og algorithm

Den `algorithmic` pakken bruker syntaks som ligner på `algpseudocode`; **men** kommandonavnene er skrevet med store bokstaver, f.eks. `\STATE`, `\WHILE`, `\ENDWHILE`.

På den annen side, `algcompatible` vil kjenne igjen kommandonavn med store bokstaver og stor forbokstav, så `\STATE`, `\WHILE`, `\ENDWHILE`, `\State`, `\While`, `\EndWhile` gjenkjennes alle. Bortsett fra kommandonavnene, `algcompatible` og `algorithmic` kommandoene bruker samme argumentsyntaks som `algpseudocode`.

```latex
\documentclass{article}
\usepackage{algcompatible}
% ELLER \usepackage{algorithmic}
\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}
```

[Åpne dette korte eksemplet med algcompatible i Overleaf](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)

Noen eldre maler eller dokumentklasser kan ha lastet inn `algorithmic`, så du må følge syntaksen og kommandonavnene som er oppgitt. *Du bør ikke laste inn `algorithm2e`, `algpseudocode` pakkene hvis den `algorithmic` eller `algcompatible` pakken allerede er lastet inn.*

Den `algorithm` pakken kan brukes med `algorithmic`/`algcompatible` for å legge til nummererte bildetekster til algoritmene.

[Åpne et fullstendig eksempel på Overleaf](https://www.overleaf.com/project/new/template/20768?id=71235978\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Pakken algorithm2e

Den `algorithm2e` pakken har en ganske annen syntaktisk struktur enn `algpseudocode`, `algcompatible` og `algorithmic` pakkene, så du må være nøye med hvilken pakke du vil bruke, eller hvilken pakke malen din har lastet inn.

Den `algorithm2e` pakken gir en `algorithm` -miljøet:

```latex
\documentclass{article}
\usepackage{algorithm2e}
\begin{document}
\begin{algorithm}
$i\gets 10$\;
\eIf{$i\geq 5$}
{
    $i\gets i-1$\;
}{
    \If{$i\leq 3$}
    {
        $i\gets i+2$\;
    }
}
\end{algorithm}

\end{document}
```

[Åpne dette korte eksemplet med algorithm2e i Overleaf](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)

![Algorithm2e-0.png](/files/fbf57c15053c93bec63523acbbb6c79d6f5d34b4)

Hver linje i kildekoden din *må* må slutte med `\;` ellers vil algoritmen fortsette på samme tekstlinje i utdataene. Bare linjer med en makro som starter en blokk, skal ikke slutte med `\;`.

Når du bruker `algorithm2e` kan du bruke `\caption{...}\ref{...}` inne i dette `algorithm` miljøet direkte, uten å måtte laste inn noen andre pakker. Men hvis du vil legge til kommentarer i algoritmen, må du først deklarere kommandonavnet som skal brukes:

```latex
%% Dette deklarerer en kommando \Comment
%% Argumentet vil bli omsluttet av /* ... */
\SetKwComment{Comment}{/* }{ */}

\begin{algorithm}
\caption{An algorithm with caption}\label{alg:two}
\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]{This is a comment}
  }{\If{$N$ is odd}{
      $y \gets y \times X$\;
      $N \gets N - 1$\;
    }
  }
}
\end{algorithm}
```

[Åpne dette algoritme2e-eksemplet med bildetekst i Overleaf](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)

![Algorithm2e-1.png](/files/6e16f88aebb5716742b5467dbba65121e9816006)

Som standard brukes `plain` algoritmestilen. Men hvis du foretrekker linjer rundt algoritmen og bildeteksten, kan du legge til `ruled` pakkealternativet når du laster inn `algorithm2e`, eller skrive `\RestyleAlgo{ruled}` i dokumentet ditt. Algoritmene dine med bildetekst vil da bli satt slik:

![Algorithm2e-11.png](/files/91c3e74973a7f0b26c7b1ca523a47fce0f242350)

Den `algorithm2e` pakken gir mange tilpasningsmuligheter. For eksempel, hvis du vil fjerne de vertikale linjene som markerer blokkene while—end while, if—end if, kan du legge til `noline` pakkealternativet når du laster inn `algorithm2e`, eller skrive `\SetNoline`. En `\listofalgorithms` kommando er også tilgjengelig i `algorithm2e`.

[Åpne et fullstendig eksempel på Overleaf](https://www.overleaf.com/project/new/template/20787?id=71277562\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Videre lesning

* [`algpseudocode` pakkedokumentasjon](https://texdoc.org/pkg/algorithmicx) (se seksjon 3.1)
* [`algorithmic` og `algorith` pakkedokumentasjon](https://texdoc.org/pkg/algorithms)
* [`algorithm2e` pakkedokumentasjon](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/no/flere-emner/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.
