<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.hlt.inesc-id.pt/~david/wiki/pt/index.php?action=history&amp;feed=atom&amp;title=Complexidade_de_Algoritmos_%28exemplos%29</id>
	<title>Complexidade de Algoritmos (exemplos) - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.hlt.inesc-id.pt/~david/wiki/pt/index.php?action=history&amp;feed=atom&amp;title=Complexidade_de_Algoritmos_%28exemplos%29"/>
	<link rel="alternate" type="text/html" href="https://www.hlt.inesc-id.pt/~david/wiki/pt/index.php?title=Complexidade_de_Algoritmos_(exemplos)&amp;action=history"/>
	<updated>2026-05-04T13:34:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://www.hlt.inesc-id.pt/~david/wiki/pt/index.php?title=Complexidade_de_Algoritmos_(exemplos)&amp;diff=1641&amp;oldid=prev</id>
		<title>Root at 16:48, 27 May 2005</title>
		<link rel="alternate" type="text/html" href="https://www.hlt.inesc-id.pt/~david/wiki/pt/index.php?title=Complexidade_de_Algoritmos_(exemplos)&amp;diff=1641&amp;oldid=prev"/>
		<updated>2005-05-27T16:48:11Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Procura Sequencial ==&lt;br /&gt;
&lt;br /&gt;
'''Pior caso''': analisa todos os N elementos: tempo é O(N)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Melhor caso''': analisa apenas o 1Âº elemento: tempo é O(1)&lt;br /&gt;
&lt;br /&gt;
  int '''search'''(int a[], int v, int l, int r) {&lt;br /&gt;
    int i;&lt;br /&gt;
    for (i = l; i &amp;lt;= r; i++)&lt;br /&gt;
      if (v == a[i]) return i;&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Procura Binária ==&lt;br /&gt;
&lt;br /&gt;
'''Pior caso''': Pior caso: analisa um número de elementos igual a [log N]+1: tempo é O(log N)&lt;br /&gt;
&lt;br /&gt;
  int '''search'''(int a[], int v, int l, int r) { &lt;br /&gt;
    while (r &amp;gt;= l) {&lt;br /&gt;
      int m = (l+r)/2;&lt;br /&gt;
      if (v == a[m]) return m;&lt;br /&gt;
      if (v &amp;lt; a[m]) r = m-1; else l = m+1;&lt;br /&gt;
    }&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Preenchimento de Matriz ==&lt;br /&gt;
&lt;br /&gt;
'''Pior caso''': são preenchidas NÂ² entradas da matriz: tempo é O(NÂ²)&lt;br /&gt;
&lt;br /&gt;
  int '''mat_read'''(int mat[N][N]) {&lt;br /&gt;
    int i, j;&lt;br /&gt;
    for (i = 0; i &amp;lt; N; i++)&lt;br /&gt;
      for (j = 0; j &amp;lt; N; j++)&lt;br /&gt;
        scanf(&amp;quot;%d&amp;quot;, &amp;amp;mat[i][j]);&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Multiplicação de matrizes ==&lt;br /&gt;
&lt;br /&gt;
'''Pior caso''': trÃªs ciclos de N iterações encadeados: tempo é O(NÂ³)&lt;br /&gt;
&lt;br /&gt;
  int '''mat_mult'''(int matA[N][N], int matB[N][N], int matC[N][N]) {&lt;br /&gt;
    int i, j, k;&lt;br /&gt;
    for (i=0; i&amp;lt;N; i++)&lt;br /&gt;
      for (j=0; j&amp;lt;N; j++) {&lt;br /&gt;
        matC[i][j] = 0;&lt;br /&gt;
        for (k=0; k&amp;lt;N; k++)&lt;br /&gt;
          matC[i][j] += matA[i][k] * matB[k][j];&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Pesquisa Binária (outro exemplo) ==&lt;br /&gt;
&lt;br /&gt;
Este exemplo mostra como uma implementação cuidada pode melhorar o desempenho de um algoritmo.&lt;br /&gt;
&lt;br /&gt;
O algoritmo procura um par de parcelas que produzam a soma fornecida. Os dados de entrada para o algoritmo, assim como a função &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, são como se segue.&lt;br /&gt;
&lt;br /&gt;
  static int vect[] = { -1, 1, 2, 4, 6, 8, 10, 15, 20, 25 };&lt;br /&gt;
  static int size   = 10;&lt;br /&gt;
  int '''main'''(int argc, char **argv) {&lt;br /&gt;
    int p1, p2, y = '''lookup'''(vect, size, atoi(argv[1]), &amp;amp;p1, &amp;amp;p2);&lt;br /&gt;
    if (y &amp;gt; 0) printf(&amp;quot;%d %d\n&amp;quot;, p1, p2);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== Primeira versão: utilização de uma função pré-definida ===&lt;br /&gt;
&lt;br /&gt;
Tempo de execução: T(N) = O(N log N).&lt;br /&gt;
&lt;br /&gt;
  int '''lookup'''(int v[], int sz, int x, int *p1, int *p2) {&lt;br /&gt;
    int i;&lt;br /&gt;
    for (i=0; i &amp;lt; sz; i++) {&lt;br /&gt;
      int d = x - v[i], y;&lt;br /&gt;
      y = '''search'''(v, d, 0, sz-1);  /* procura binária */&lt;br /&gt;
      if (y &amp;gt; 0) { *p1 = i; *p2 = y; return 1; }&lt;br /&gt;
    }&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== Segunda versão: implementação dedicada ===&lt;br /&gt;
&lt;br /&gt;
Tempo de execução: T(N) = O(N).&lt;br /&gt;
&lt;br /&gt;
  int '''lookup'''(int v[], int sz, int x, int *p1, int *p2) {&lt;br /&gt;
    int i = 0, j = sz-1;&lt;br /&gt;
    while (i &amp;lt; j) {&lt;br /&gt;
      int sum = v[i] + v[j];&lt;br /&gt;
      if      (sum &amp;gt; x) j--;&lt;br /&gt;
      else if (sum &amp;lt; x) i++;&lt;br /&gt;
      else { *p1 = i; *p2 = j; return 1; }&lt;br /&gt;
    }&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
</feed>