{
  "translations": {
    "en": {
      ".exerciseTitle": "Running Time of Recursive Algorithms",
      ".instructLabel": "Instructions:",
      ".instructions": "Analyse the worst case running time of the following three program fragments. Use paper and pencil to form recurrences for the algorithms. Solve the recurrences, i.e., obtain asymptotic bounds for n in Big O notation. Finally, rank the program fragments by order of growth, from the lowest rate of growth to the highest rate of growth. Note that if the functions are used to measure running time, then low rates of growth correspond to faster running times for large N, so that f<sub>1</sub>(N) &lt; f<sub>2</sub>(N) &lt; ... &lt; f<sub>10</sub>(N)."
    },
    "fi": {
      ".exerciseTitle": "Rekursiivisen koodin aikakompleksisuus",
      ".instructLabel": "Ohjeet:",
      ".instructions": "Analysoi seuraavien ohjelmanpätkien pahimman tapauksen aikavaatimus. Käytä paperia ja kynää ja muodosta ensin algoritmien suoritusaikaa kuvaavat rekursioyhtälöt, joiden ratkaisuina saat vastaukset iso O -notaatiossa n:n suhteen. Laita lopuksi ohjelmanpätkät niiden kasvunopeuden mukaiseen järjestykseen hitaimmasta nopeimpaan.  Huomaa, että jos funktiot kuvaisivat algoritmien suoritusaikaa, niin hitaimman kasvunopeuden omaava funktio vastaa nopeinta suoritusaikaa siten, että suurilla N:n arvoilla f<sub>1</sub>(N) &lt; f<sub>2</sub>(N) &lt; ... &lt; f<sub>10</sub>(N)."
    }
  },
  "code": {
    "all": [
      "<span style='font-family: monospace'>int f(int x, int n)<br>&nbsp;switch(n):<br>&nbsp;&nbsp;case 0: return 1<br>&nbsp;&nbsp;case 1: return x<br>&nbsp;&nbsp;else:<br>&nbsp;&nbsp;&nbsp;if (odd(n)) then<br>&nbsp;&nbsp;&nbsp;&nbsp;return x*f(x*x, n/2)<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;return f(x*x, n/2)</span>",
      "<span style='font-family: monospace'>int f(int n)<br>&nbsp;if (n == 0)<br>&nbsp;&nbsp;return 1<br>&nbsp;else<br>&nbsp;&nbsp;return n*f(n-1)</span>",
      "<span style='font-family: monospace'>void f(int l, int r) // n = r - l<br>&nbsp;if (r > l) then<br>&nbsp;&nbsp;i = partition(l,r) // O(n) operation<br>&nbsp;&nbsp;f(l, i-1)<br>&nbsp;&nbsp;f(i+1, r)</span>",
      "<span style='font-family: monospace'>int f(int n)<br>&nbsp;if (n < 0) return 0<br>&nbsp;if (n == 0) return 1<br>&nbsp;if (n == 1) return 1<br>&nbsp;return f(n-1) + f(n-2)</span>"
    ]
  }
}
