<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7401362426453688280</id><updated>2012-01-06T16:14:34.073-02:00</updated><category term='algoritmo'/><category term='relembrando'/><category term='matemática'/><category term='syntax highlighting'/><category term='bubble sort'/><category term='implementação'/><category term='método'/><category term='postar código'/><category term='expressões'/><category term='blog'/><category term='código fonte'/><category term='análise'/><category term='ordenação'/><title type='text'>Blog do Xico</title><subtitle type='html'>"De tempos em tempos ele volta..."</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fvianna.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://fvianna.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Francisco Viégas Vianna</name><uri>http://www.blogger.com/profile/11512465384230143527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7401362426453688280.post-5168065837129144039</id><published>2009-10-04T19:27:00.017-03:00</published><updated>2009-10-05T09:02:01.626-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bubble sort'/><category scheme='http://www.blogger.com/atom/ns#' term='algoritmo'/><category scheme='http://www.blogger.com/atom/ns#' term='implementação'/><category scheme='http://www.blogger.com/atom/ns#' term='método'/><category scheme='http://www.blogger.com/atom/ns#' term='ordenação'/><category scheme='http://www.blogger.com/atom/ns#' term='análise'/><title type='text'>Ordenação – Métodos e análises: BubbleSort – Parte 2</title><content type='html'>No último post, comecei a falar sobre o BubbleSort, e apresentei uma análise do algoritmo e uma implementação. Mas até ali, fizemos algo muito simples. O que vamos fazer agora é melhorar um pouco aquela implementação.&lt;br /&gt;Como vocês bem se lembram, o nosso algoritmo executava sempre n² operações. O que vamos fazer é acrescentar algumas verificações que permitam que, na maioria dos casos, o algoritmo termine antes disso.&lt;br /&gt;&lt;br /&gt;Para isso, vamos lembrar do algoritmo (apenas a função que implementa o BubbleSort:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:cpp"&gt;&lt;br /&gt;void bubbleSort( int *vet, int n )&lt;br /&gt;{&lt;br /&gt;    int i, j, aux;&lt;br /&gt;&lt;br /&gt;    for( i=0; i &lt; n; i++ )&lt;br /&gt;    {&lt;br /&gt;        for( j = 0; j &lt; n-1; j++ )&lt;br /&gt;        {&lt;br /&gt;            if( vet[j] &gt; vet[j+1] )&lt;br /&gt;            {&lt;br /&gt;                aux = vet[j];&lt;br /&gt;                vet[j] = vet[j+1];&lt;br /&gt;                vet[j+1] = aux;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;E as duas primeiras iterações dele no nosso vetor de exemplo:&lt;br /&gt;&lt;br /&gt;[ &lt;span style="font-weight:bold;"&gt;5, 13&lt;/span&gt;, 2, 7, 11, 14, 6]&lt;br /&gt;[ 5, &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;13, 2&lt;/span&gt;&lt;/font&gt;, 7, 11, 14, 6]&lt;br /&gt;[ 5, 2, &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;13, 7&lt;/span&gt;&lt;/font&gt;, 11, 14, 6]&lt;br /&gt;[ 5, 2, 7, &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;13, 11&lt;/span&gt;&lt;/font&gt;, 14, 6]&lt;br /&gt;[ 5, 2, 7, 11, &lt;span style="font-weight:bold;"&gt;13, 14&lt;/span&gt;, 6] &lt;br /&gt;[ 5, 2, 7, 11, 13, &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;14, 6&lt;/span&gt;&lt;/font&gt;] &lt;br /&gt;   &lt;br /&gt;[ &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;5, 2&lt;/span&gt;&lt;/font&gt;, 7, 11, 13, 6, 14] &lt;br /&gt;[ 2, &lt;span style="font-weight:bold;"&gt;5, 7&lt;/span&gt;, 11, 13, 6, 14] &lt;br /&gt;[ 2, 5, &lt;span style="font-weight:bold;"&gt;7, 11&lt;/span&gt;, 13, 6, 14]&lt;br /&gt;[ 2, 5, 7, &lt;span style="font-weight:bold;"&gt;11, 13&lt;/span&gt;, 6, 14]     &lt;br /&gt;[ 2, 5, 7, 11, &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;13, 6&lt;/span&gt;&lt;/font&gt;, 14]  &lt;br /&gt;&lt;u&gt;[ 2, 5, 7, 11, 6, &lt;span style="font-weight:bold;"&gt;13, 14&lt;/span&gt;]&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Da primeira iteração a gente não consegue escapar, pois ainda não fizemos nenhuma varredura por todo o vetor, e ainda não temos noção do que podemos encontrar. Mas a partir daí, podemos perceber, tanto pelo código quanto pelos exemplos que o maior valor do vetor está subindo até o final.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Qual seria o sentido então de permitir que, por exemplo, na 2ª iteração, o &lt;span style="font-style:italic;"&gt;13&lt;/span&gt; que está subindo seja comparado com o &lt;span style="font-style:italic;"&gt;14&lt;/span&gt; que foi colocado no fim do vetor na iteração anterior? Ele jamais será maior. (Veja a iteração sublinhada)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Espertos que somos, vamos ensinar o nosso programa a perceber e ignorar esses passos redundantes. Tente fazer por conta própria. Depois olhe abaixo para verificar se você fez certo ou para entender como se faz.&lt;br /&gt;&lt;br /&gt;No programa, temos a variável i que controla o loop externo e “burramente” determina que o loop seja executado n vezes. O que faremos é: Em vez de ela simplesmente controlar o loop, vamos atribuir também a ela o papel de &lt;span style="font-weight:bold;"&gt;determinar até aonde no vetor&lt;/span&gt; o loop interno ainda precisa realizar as suas verificações.&lt;br /&gt;&lt;br /&gt;Para isso, em vez de inicializál-la em 0 e fazê-la crescer até n, vamos inicializá-la em n, e decrementá-la até que alcancemos o valor 0. E que tal agora se fizermos o loop interno, que varre o vetor até a posição n-1, varrer apenas até a posição i-1? Será que funciona? É fácil perceber que sim (talvez você queira voltar alguns parágrafos, onde eu explico o porque).&lt;br /&gt;&lt;br /&gt;Agora, nosso código ficará com a seguinte cara:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:cpp"&gt;&lt;br /&gt;void bubbleSort( int *vet, int n )&lt;br /&gt;{&lt;br /&gt;    int i, j, aux;&lt;br /&gt;&lt;br /&gt;    for( i = n-1; i &gt; 0; i-- )&lt;br /&gt;    {&lt;br /&gt;        for( j = 0; j &lt; i; j++ )&lt;br /&gt;        {&lt;br /&gt;            if( vet[j] &gt; vet[j+1] )&lt;br /&gt;            {&lt;br /&gt;                aux = vet[j];&lt;br /&gt;                vet[j] = vet[j+1];&lt;br /&gt;                vet[j+1] = aux;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Será que obtivemos alguma melhora com isso? Vamos voltar ao nosso pior caso (um vetor em ordem decrescente) e pensar a respeito.&lt;br /&gt;&lt;br /&gt;Na primeira iteração, teremos n-1 operações. Já na segunda, teremos no máximo n-2, já que o limite superior da parte do vetor a ser avaliada foi reduzido de 1. Generalizando esse raciocínio, teremos o seguinte número de operações:&lt;br /&gt;&lt;br /&gt; `(n-1) + (n-2) + \ldots` `+ 1`&lt;br /&gt;&lt;br /&gt;Pra quem se lembra, a soma dessa PA nos dará&lt;br /&gt;&lt;br /&gt;`S = [(n-1) * ((n-1) + 1)] / [2]`&lt;br /&gt;`S = [n * (n-1)]/[2]`&lt;br /&gt;&lt;br /&gt;O que quer dizer que reduzimos o numero máximo de iterações a menos da metade! Ou seja: &lt;span style="font-style:italic;"&gt;para um BubbleSort&lt;/span&gt;, essa melhoria é bastante significativa. (Não acredite 100% nisso ainda. Vamos falar mais sobre essa “melhoria” em alguns instantes).&lt;br /&gt;&lt;br /&gt;Ainda temos mais um acerto para fazer, e a idéia é a seguinte. Será que precisamos continuar o algoritmo se, em alguma iteração, não acontecer nenhuma troca? Espero que você consiga perceber que não. O que vamos fazer então é adicionar uma &lt;span style="font-style:italic;"&gt;flag&lt;/span&gt; ao programa, que começa como &lt;span style="font-weight:bold;"&gt;false&lt;/span&gt; a cada iteração do &lt;span style="font-style:italic;"&gt;loop externo&lt;/span&gt; e é setada para &lt;span style="font-weight:bold;"&gt;true&lt;/span&gt; assim que ocorre uma troca no &lt;span style="font-style:italic;"&gt;loop interno&lt;/span&gt;. Ao fim do &lt;span style="font-style:italic;"&gt;loop interno&lt;/span&gt;, caso a &lt;span style="font-style:italic;"&gt;flag&lt;/span&gt; ainda seja &lt;span style="font-weight:bold;"&gt;false&lt;/span&gt;, o algoritmo pode encerrar.&lt;br /&gt;&lt;br /&gt;Com isso, nosso código ficará assim:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:cpp"&gt;&lt;br /&gt;void bubbleSort( int *vet, int n )&lt;br /&gt;{&lt;br /&gt;    int i, j, aux;&lt;br /&gt;    int mexeu;&lt;br /&gt;&lt;br /&gt;    for( i = n-1; i &gt; 0; i-- )&lt;br /&gt;    {&lt;br /&gt;        for( j = 0, mexeu = 0; j &lt; i; j++ )&lt;br /&gt;        {&lt;br /&gt;            if( vet[j] &gt; vet[j+1] )&lt;br /&gt;            {&lt;br /&gt;                aux = vet[j];&lt;br /&gt;                vet[j] = vet[j+1];&lt;br /&gt;                vet[j+1] = aux;&lt;br /&gt;                mexeu = 1;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;   &lt;br /&gt;        if( mexeu == 0 ) break;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Repare que esta última modificação não melhora a performance, mas vai permitir que, na maior parte das vezes, que economizemos algumas operações.&lt;br /&gt; &lt;br /&gt;&lt;center&gt;&lt;b&gt;Agora sim, temos uma versão aceitável para o BubbleSort!&lt;/b&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Agora, retomemos a discussão sobre a melhoria que geramos com a primeira modificação: Na pratica, nós teremos sempre o número de operações reduzidas por um fator de aproximadamente ½. Apesar disso, quando falamos de complexidade de um algoritmo, &lt;span style="font-weight:bold;"&gt;esta melhoria é irrelevante&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Você deve estar se perguntando: &lt;span style="font-style:italic;"&gt;"Mas, irrelevante? Por quê?" (Eu também me perguntei...)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mesmo com a melhoria, ainda temos lá no resultado do numero de operações um termo `n^2`. Como estamos analisando um algoritmo que resolve um problema para vetores de qualquer tamanho, talvez você queira se perguntar como a função&lt;br /&gt;&lt;br /&gt;`f(n) = [n*(n-1)] / [2]`&lt;br /&gt;&lt;br /&gt;se comporta conforme n cresce arbitrariamente.&lt;br /&gt;&lt;br /&gt;O que acontece é que a diminuição gerada pelo fator `½` vai se tornando cada vez mais irrelevante, pois é uma constante. Se você quiser, pode pensar em uma analogia (que na verdade não é uma analogia) com o cálculo.&lt;br /&gt;&lt;br /&gt;`lim_(n-&gt;\infty)(n²) = ?`  &amp;nbsp;&amp;nbsp; ou  &amp;nbsp;&amp;nbsp; `lim_(n-&gt;\infty)((n² - n) / 2) = ?`&lt;br /&gt;&lt;br /&gt;Este é o principio que se aplica aqui. Em ambos os casos, o resultado é `\infty`.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;O que estou querendo dizer é&lt;/span&gt;: Quando se fala de complexidade de algoritmos, multiplicar, somar, dividir ou qualquer outra operação que envolva uma constante é irrelevante.&lt;br /&gt;&lt;br /&gt;Temos então que: `O( [n*(n-1)]/[2] ) = O( [(n^2 - n)] / [2] ) = O(n^2)`&lt;br /&gt;&lt;br /&gt;E na verdade, acabamos não ganhando nada &lt;i&gt;em termos teóricos&lt;/i&gt; com essas melhorias. (&lt;span style="font-style:italic;"&gt;Mas não se esqueça:&lt;/span&gt; De fato o número de operações diminui!).&lt;br /&gt;&lt;br /&gt;Bem, isso é o que eu sei sobre BubbleSort. Na seqüência da série, falaremos sobre o MergeSort, um algoritmo que tem uma cara bem diferente do que vimos até aqui. No entanto, acho que vou fazer uma pausa antes, e falar sobre alguns assuntos que precisamos conhecer antes de falar sobre o MergeSort.&lt;br /&gt;&lt;br /&gt;É isso aí, até mais!&lt;br /&gt;Xico.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7401362426453688280-5168065837129144039?l=fvianna.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fvianna.blogspot.com/feeds/5168065837129144039/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7401362426453688280&amp;postID=5168065837129144039' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/5168065837129144039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/5168065837129144039'/><link rel='alternate' type='text/html' href='http://fvianna.blogspot.com/2009/10/ordenacao-metodos-e-analises-bubblesort_04.html' title='Ordenação – Métodos e análises: BubbleSort – Parte 2'/><author><name>Francisco Viégas Vianna</name><uri>http://www.blogger.com/profile/11512465384230143527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7401362426453688280.post-8554101906971617796</id><published>2009-10-02T08:33:00.029-03:00</published><updated>2009-10-05T10:08:30.947-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bubble sort'/><category scheme='http://www.blogger.com/atom/ns#' term='algoritmo'/><category scheme='http://www.blogger.com/atom/ns#' term='implementação'/><category scheme='http://www.blogger.com/atom/ns#' term='método'/><category scheme='http://www.blogger.com/atom/ns#' term='ordenação'/><category scheme='http://www.blogger.com/atom/ns#' term='análise'/><title type='text'>Ordenação – Métodos e análises: BubbleSort – Parte 1</title><content type='html'>Nesta seqüência de 3 (ou mais) posts, minha intenção é falar um pouco sobre algoritmos de ordenação. Mais do que isso, queria focar um pouco na análise, mas também sem esquecer da implementação, para a qual usarei a linguagem C. Como eu disse no post de reapresentação, todo o conteúdo deste Blog, pelo menos por hora, é introdutório, logo voltado para pessoas que estão começando a se enveredar pelo mundo dos algoritmos.&lt;br /&gt;&lt;br /&gt;O problema é muito simples, e é algo que nós fazemos o tempo todo, naturalmente: Dada uma seqüência de elementos comparáveis (ou seja, para os quais se tenha a noção de ordem), ordená-los da forma mais eficiente possível. Isto é: Dada uma seqüência de elementos&lt;br /&gt;&lt;br /&gt;   `a_1,\quad a_2,\quad a_3,\quad \ldots\quad, a_n`&lt;br /&gt;&lt;br /&gt;Queremos um rearranjo desses elementos tal que&lt;br /&gt;&lt;br /&gt;   `a_1 \quad\le\quad a_2 \quad\le\quad a_3 \quad\le\quad \ldots \quad\le\quad a_n`&lt;br /&gt;&lt;br /&gt;Em todos os exemplos, vamos mexer com vetores de números inteiros, mas lembre-se que os conceitos que vamos trabalhar são mais gerais do que isso, podendo ser aplicados para ordenar qualquer coisa.&lt;br /&gt;&lt;br /&gt;O problema da Ordenação (ou &lt;span style="font-style:italic;"&gt;sorting&lt;/span&gt;, em inglês) é um problema sobre o qual se quebrou muito a cabeça na computação, mas que hoje (na verdade há um bom tempo) é um assunto pra lá de resolvido. Apesar disso, ainda são desenvolvidos novos algoritmos de ordenação com propósitos específicos, mas que não vem ao caso para nós.&lt;br /&gt;&lt;br /&gt;Vamos ao que interessa: Existem dezenas de diferentes métodos de ordenação, mas vou falar especificamente de 3, que pra mim sintetizam alguns dos conceitos mais importantes, para resolver este problema (tecnicamente) simples, e que posteriormente podem ser usados em muitas outras situações.&lt;br /&gt;&lt;br /&gt;Vamos começar (obviamente) do começo. O BubbleSort, ou “método da Bolha”, na tradução que comumente se vê por aí. Ele é um algoritmo baseado em trocas (&lt;span style="font-style:italic;"&gt;swapping&lt;/span&gt;) e é o assunto deste primeiro post, por ser o mais simples de todos. Esse algoritmo foi proposto em 1956, o que nos permite dizer que ele é um &lt;span style="font-weight:bold;"&gt;senhor&lt;/span&gt; algoritmo (piadinha infame...).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Qual é a idéia:&lt;/span&gt; “Varrer” (percorrer) o vetor várias vezes. A cada vez que varremos o vetor, vamos levando o maior elemento que encontrarmos pelo caminho para o final, até que nenhum deles precise mais mudar de posição. Na analogia da bolha, os números vão “subindo” (como uma bolha no fundo de um recipiente com água) até o fim do vetor, em ordem decrescente de tamanho.&lt;br /&gt;&lt;br /&gt;Um pseudo-código, sem nenhum tipo de otimização para resolver o problema, poderia ser:&lt;br /&gt;&lt;br /&gt;&lt;pre class:"brush:cpp"&gt;&lt;br /&gt;BubbleSort( vetor v, tamanho n) : Retorna Vetor ordenado.&lt;br /&gt;   Repita n vezes&lt;br /&gt;      Repita a partir do inicio do vetor, até o seu final&lt;br /&gt;         Se vetor[c] &gt; vetor[c+1] , troque-os de posição.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Vejamos como seria o passo-a-passo desse algoritmo para ordenar a seguinte lista de elementos:&lt;br /&gt;[5, 13, 2, 7, 11, 14, 6]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[ &lt;span style="font-weight:bold;"&gt;5, 13&lt;/span&gt;, 2, 7, 11, 14, 6]&lt;br /&gt;[ 5, &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;13, 2&lt;/span&gt;&lt;/font&gt;, 7, 11, 14, 6]&lt;br /&gt;[ 5, 2, &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;13, 7&lt;/span&gt;&lt;/font&gt;, 11, 14, 6]&lt;br /&gt;[ 5, 2, 7, &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;13, 11&lt;/span&gt;&lt;/font&gt;, 14, 6]&lt;br /&gt;[ 5, 2, 7, 11, &lt;span style="font-weight:bold;"&gt;13, 14&lt;/span&gt;, 6] &lt;br /&gt;[ 5, 2, 7, 11, 13, &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;14, 6&lt;/span&gt;&lt;/font&gt;] &lt;br /&gt;   &lt;br /&gt;[ &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;5, 2&lt;/span&gt;&lt;/font&gt;, 7, 11, 13, 6, 14] &lt;br /&gt;[ 2, &lt;span style="font-weight:bold;"&gt;5, 7&lt;/span&gt;, 11, 13, 6, 14] &lt;br /&gt;[ 2, 5, &lt;span style="font-weight:bold;"&gt;7, 11&lt;/span&gt;, 13, 6, 14]&lt;br /&gt;[ 2, 5, 7, &lt;span style="font-weight:bold;"&gt;11, 13&lt;/span&gt;, 6, 14]     &lt;br /&gt;[ 2, 5, 7, 11, &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;13, 6&lt;/span&gt;&lt;/font&gt;, 14]  &lt;br /&gt;[ 2, 5, 7, 11, 6, &lt;span style="font-weight:bold;"&gt;13, 14&lt;/span&gt;] &lt;br /&gt;&lt;br /&gt;[ &lt;span style="font-weight:bold;"&gt;2, 5&lt;/span&gt;, 7, 11, 6, 13, 14]&lt;br /&gt;[ 2, &lt;span style="font-weight:bold;"&gt;5, 7&lt;/span&gt;, 11, 6, 13, 14]&lt;br /&gt;[ 2, 5, &lt;span style="font-weight:bold;"&gt;7, 11&lt;/span&gt;, 6, 13, 14]&lt;br /&gt;[ 2, 5, 7, &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;11, 6&lt;/span&gt;&lt;/font&gt;, 13, 14]&lt;br /&gt;[ 2, 5, 7, 6, &lt;span style="font-weight:bold;"&gt;11, 13&lt;/span&gt;, 14]&lt;br /&gt;[ 2, 5, 7, 6, 11, &lt;span style="font-weight:bold;"&gt;13, 14&lt;/span&gt;]&lt;br /&gt;&lt;br /&gt;[ &lt;span style="font-weight:bold;"&gt;2, 5&lt;/span&gt;, 7, 6, 11, 13, 14]&lt;br /&gt;[ 2, &lt;span style="font-weight:bold;"&gt;5, 7&lt;/span&gt;, 6, 11, 13, 14]&lt;br /&gt;[ 2, 5, &lt;font color='red'&gt; &lt;span style="font-weight:bold;"&gt;7, 6&lt;/span&gt;&lt;/font&gt;, 11, 13, 14]&lt;br /&gt;[ 2, 5, 6, &lt;span style="font-weight:bold;"&gt;7, 11&lt;/span&gt;, 13, 14] -- Coincidentemente, aqui o vetor já está ordenado.&lt;br /&gt;[ 2, 5, 6, 7, &lt;span style="font-weight:bold;"&gt;11, 13&lt;/span&gt;, 14]&lt;br /&gt;[ 2, 5, 6, 7, 11, &lt;span style="font-weight:bold;"&gt;13, 14&lt;/span&gt;]  &lt;br /&gt;&lt;br /&gt;Obs: O &lt;font color='red'&gt;&lt;span style="font-weight:bold;"&gt;negrito vermelho&lt;/span&gt;&lt;/font&gt; sinaliza que, na próxima iteração as referidas posições terão sido trocadas, e apenas &lt;span style="font-weight:bold;"&gt;negrito&lt;/span&gt; uma comparação para a qual os elementos já estão em ordem. &lt;span style="font-weight:bold;"&gt;Note também que o algoritmo não parou assim que o vetor ficou ordenado, pois computador não tem como saber que essa condição foi alcançada (não com o algoritmo que fornecemos para ele). Ele continuará a fazer o que você o instruiu através do pseudo-código.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;E.... isso é um BubbleSort! Parece bonitinho e tal, mas já vamos analisar um pouco melhor como esse algoritmo se comporta. Enquanto isso, vamos pensar em algumas coisas importantes. Tente responder essas perguntas para si mesmo, ou escreva as respostas em papel:&lt;br /&gt;&lt;br /&gt;1 – E se o vetor fornecido para o algoritmo estivesse em ordem decrescente?&lt;br /&gt;2 – Quantas vezes passamos pela linha de código &lt;span style="font-style:italic;"&gt;“Se vetor[c] &gt; vetor[c+1] ...”&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;Pense nessas perguntas por uns dois minutos, ou até que você encontre a resposta (esse seria o ideal. Dê a si mesmo a chance de usar o cérebro em vez de ficar só lendo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Tic-Tac&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;Tic-Tac&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Então... Como você deve ter percebido, se os números forem fornecidos em ordem decrescente, cada uma das comparações feitas dentro do &lt;span style="font-style:italic;"&gt;loop interno&lt;/span&gt; irá gerar uma troca, e embora isso possa parecer inevitável, é &lt;span style="font-weight:bold;"&gt;extremamente&lt;/span&gt; &lt;span style="font-style:italic;"&gt;ineficiente&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Agora sim, respondendo às perguntas:&lt;br /&gt;&lt;br /&gt;1 – O programa vai entrar na condição &lt;span style="font-style:italic;"&gt;‘Se’&lt;/span&gt; todas as vezes que passar lá.&lt;br /&gt;2 – Temos um &lt;span style="font-style:italic;"&gt;“Repita n vezes”&lt;/span&gt;, e dentro dele um loop que também ocorre n vezes. Logo, passaremos por essa linha n . n = n² vezes.&lt;br /&gt;&lt;br /&gt;Obviamente, este é o pior caso possível para o nosso BubbleSort (no que diz respeito a &lt;span style="font-weight:bold;"&gt;executar&lt;/span&gt; o “Se”, já que inevitavelmente passaremos lá), pois é quando faremos todas as trocas possíveis. Agora, pare e pense um instante: n é o tamanho do vetor (quantos elementos há nele). Isso quer dizer que, se quisermos ordenar, digamos, 100 números com o BubbleSort, corremos o risco de ter que fazer até 10000 operações de troca!!!&lt;br /&gt; O que se diz nesses casos é que o algoritmo tem complexidade (ou seja, executa um numero de operações) &lt;span style="font-weight:bold;"&gt;que é da ordem de&lt;/span&gt; n², onde n é o tamanho da entrada, e que no nosso caso é o tamanho do vetor. Mais comumente em computação, expressamos essa constatação dizendo que:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;span style="font-style:italic;"&gt;A complexidade de tempo do BubbleSort é O(n²).&lt;/span&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Mais detalhes da &lt;span style="font-style:italic;"&gt;“notação O”&lt;/span&gt;, eu fico devendo para uma próxima, embora eu vá mencioná-la em outros momentos. Por hora, basta saber que ele representa uma &lt;span style="font-weight:bold;"&gt;estimativa da ordem de grandeza&lt;/span&gt; do tempo de execução de um algoritmo qualquer (mas também existe notação O para expressar a complexidade de outras coisas, como espaço em memória que o algoritmo precisa pra "rodar").&lt;br /&gt;&lt;br /&gt;Como vamos ver nos próximos posts, esse valor, mesmo levando-se em consideração o pior caso possível, pode ser melhorado (e muito!). Pra isso, precisamos “botar a caixola pra funcionar” e pensar em diferentes formas de atacar o problema.&lt;br /&gt;&lt;br /&gt;Para terminar, mostro uma implementação em C relativa ao pseudo-código que apresentei antes, sem tirar nem pôr. No entanto, fiz um programa completo que você pode salvar e executar sem problemas. Lembrando que ele pode ser melhorado, e que eu o farei no próximo post (é, ainda tem mais!).&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:cpp"&gt;&lt;br /&gt;/*&lt;br /&gt;    Autor: Francisco Viégas Vianna&lt;br /&gt;    Data:  04/10/2009&lt;br /&gt;    Descrição: Impementação do método de ordenação BubbleSort.&lt;br /&gt;&lt;br /&gt;    Por favor, mantenha esse comentário.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#include &lt; stdio.h &gt;&lt;br /&gt;&lt;br /&gt;#define MAXT 1000&lt;br /&gt;&lt;br /&gt;void bubbleSort( int *vet, int n )&lt;br /&gt;{&lt;br /&gt;    int i, j, aux;&lt;br /&gt;&lt;br /&gt;    for( i=0; i &lt; n; i++ )&lt;br /&gt;    {&lt;br /&gt;        for( j = 0; j &lt; n-1; j++ )&lt;br /&gt;        {&lt;br /&gt;            if( vet[j] &gt; vet[j+1] )&lt;br /&gt;            {&lt;br /&gt;                aux = vet[j];&lt;br /&gt;                vet[j] = vet[j+1];&lt;br /&gt;                vet[j+1] = aux;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    int vetor[MAXT];&lt;br /&gt;    int n, i;&lt;br /&gt;&lt;br /&gt;    printf( "Quantos elementos (MAX = %d)? ", MAXT );&lt;br /&gt;    scanf( "%d", &amp;n );&lt;br /&gt;&lt;br /&gt;    for( i=0; i &lt; n; i++ )&lt;br /&gt;    {&lt;br /&gt;        scanf("%d", &amp;( vetor[i]) );&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    bubbleSort( vetor, n );&lt;br /&gt;&lt;br /&gt;    printf( "\nOrdenando o vetor:\n" );&lt;br /&gt;    for( i=0; i &lt; n; i++ )&lt;br /&gt;    {&lt;br /&gt;        printf( "%d ", vetor[i] );&lt;br /&gt;    }&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;É isso aí. Até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7401362426453688280-8554101906971617796?l=fvianna.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fvianna.blogspot.com/feeds/8554101906971617796/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7401362426453688280&amp;postID=8554101906971617796' title='5 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/8554101906971617796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/8554101906971617796'/><link rel='alternate' type='text/html' href='http://fvianna.blogspot.com/2009/10/ordenacao-metodos-e-analises-bubblesort.html' title='Ordenação – Métodos e análises: BubbleSort – Parte 1'/><author><name>Francisco Viégas Vianna</name><uri>http://www.blogger.com/profile/11512465384230143527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7401362426453688280.post-5519606756423558086</id><published>2009-10-01T23:56:00.010-03:00</published><updated>2009-10-05T09:15:48.359-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='matemática'/><category scheme='http://www.blogger.com/atom/ns#' term='postar código'/><category scheme='http://www.blogger.com/atom/ns#' term='expressões'/><title type='text'>Testando expressões Matemáticas no Blogger</title><content type='html'>Tá, eu realmente estou me divertindo adicionando essas funcionalidades ao Blog.&lt;br /&gt;Mas pô, não é à toa, pode vir a ser útil!&lt;br /&gt;&lt;br /&gt;Enfim, a bola da vez é o &lt;a href="http://www1.chapman.edu/~jipsen/mathml/asciimath.html"&gt;ASCIIMathML&lt;/a&gt;, que pelo que eu pude entender (confesso que não dediquei muita da minha atenção a isso) usa a engine do &lt;a href="http://www.latex-project.org/"&gt;LaTeX&lt;/a&gt;, e depois gera HTML, tudo através de... Javascript! Bem legal, né?&lt;br /&gt;&lt;br /&gt;Então, vamos ver uns exemplos pra testar:&lt;br /&gt;&lt;br /&gt;`[[a,b],[c,d]]`&lt;br /&gt;&lt;br /&gt;`\sqrt{\frac{1}{1+x^2}}`&lt;br /&gt;&lt;br /&gt;`P_n(x)=a_0 + a_1 x +\ldots + a_n x^n, a_i\in R, i=1,2,\ldots, n`&lt;br /&gt;&lt;br /&gt;Lá no 1° link tem tudo explicadinho, inclusive mostrando a sintaxe para você criar as suas próprias expressões. Se você não conseguir fazer funcionar, posta aqui que eu ajudo. Mas esse é bem simples mesmo. E o resultado é bem satisfatório!&lt;br /&gt;&lt;br /&gt;Ah, já ia esquecendo: Uma das coisas mais legais é que, depois que a fórmula foi gerada e colocada em uma página HTML, se você parar o mouse em cima dela aparecesse uma caixinha daquelas de 'hint' com a expressão que deu origem a ela!!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Por hoje é só!&lt;br /&gt;Abraço a todos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7401362426453688280-5519606756423558086?l=fvianna.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fvianna.blogspot.com/feeds/5519606756423558086/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7401362426453688280&amp;postID=5519606756423558086' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/5519606756423558086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/5519606756423558086'/><link rel='alternate' type='text/html' href='http://fvianna.blogspot.com/2009/10/testando-expressoes-matematicas-no.html' title='Testando expressões Matemáticas no Blogger'/><author><name>Francisco Viégas Vianna</name><uri>http://www.blogger.com/profile/11512465384230143527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7401362426453688280.post-7641839957224655677</id><published>2009-10-01T22:47:00.010-03:00</published><updated>2009-10-04T23:40:40.412-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='código fonte'/><category scheme='http://www.blogger.com/atom/ns#' term='postar código'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax highlighting'/><title type='text'>Testando os scripts de Syntax Highlighting</title><content type='html'>Como muito do que eu quero postar aqui tem código-fonte, pus-me a fuçar algo que me ajudasse a formatá-los, pra melhorar o look do Blog:&lt;br /&gt;&lt;br /&gt;Encontrei o &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"&gt;SyntaxHighlighter&lt;/a&gt;, e com uma ajudinha do amigo &lt;a href="http://magoobr.blogspot.com"&gt;Buss&lt;/a&gt;, cheguei no lugar certo, esse aí do link.&lt;br /&gt;Com um pouquinho mais de paciência, achei &lt;a href="http://mlawire.blogspot.com/2009/07/blogger-syntax-highlighting.html"&gt;esse&lt;/a&gt; tutorial.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Agora, vamos testar:&lt;br /&gt;&lt;br /&gt;SQL:&lt;br /&gt;&lt;pre class="brush:sql"&gt;&lt;br /&gt;SELECT *&lt;br /&gt;FROM users&lt;br /&gt;WHERE user_id = 1212;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;C/C++:&lt;br /&gt;&lt;pre class="brush:cpp"&gt;&lt;br /&gt;#include &lt; stdio.h &gt;&lt;br /&gt;&lt;br /&gt;int main( void )&lt;br /&gt;{&lt;br /&gt;    printf( "Hello, world!" );&lt;br /&gt;&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Java:&lt;br /&gt;&lt;pre class="brush:java"&gt;&lt;br /&gt;public class Hello {&lt;br /&gt;     public static void main(String[] args) {&lt;br /&gt;         System.out.println("Olá Mundo!");&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Python:&lt;br /&gt;&lt;pre class="brush:python"&gt;&lt;br /&gt;print "Hello, World!"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Acho que eu habilitei algumas outras além dessas, dentre as &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter:Brushes"&gt;mais de 20 opções&lt;/a&gt;, mas agora não me lembro quais.&lt;br /&gt;BTW, créditos pro cara. Muito maneiro e fácil de usar, além de ser o tipo da coisa simples, útil e bem-feita (pelo menos ainda não peguei bugs).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7401362426453688280-7641839957224655677?l=fvianna.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fvianna.blogspot.com/feeds/7641839957224655677/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7401362426453688280&amp;postID=7641839957224655677' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/7641839957224655677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/7641839957224655677'/><link rel='alternate' type='text/html' href='http://fvianna.blogspot.com/2009/10/teste.html' title='Testando os scripts de Syntax Highlighting'/><author><name>Francisco Viégas Vianna</name><uri>http://www.blogger.com/profile/11512465384230143527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7401362426453688280.post-410390999522127329</id><published>2009-09-30T23:43:00.002-03:00</published><updated>2009-09-30T23:47:17.783-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='relembrando'/><title type='text'>Ele vai viver!!!!!!</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link style="font-family: verdana;" rel="File-List" href="file:///C:%5CDOCUME%7E1%5CFRANCI%7E1%5CCONFIG%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName"&gt;&lt;/o:smarttagtype&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if !mso]&gt;&lt;object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id="ieooui"&gt;&lt;/object&gt; &lt;style&gt; st1\:*{behavior:url(#ieooui) } &lt;/style&gt; &lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;Olá!&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;br /&gt;&lt;span style=";font-size:85%;" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;Bem, depois de muito tempo, finalmente resolvi colocar esse Blog pra frente. Ultimamente tenho sentido muita vontade de compartilhar um pouco do que eu venho aprendendo ao longo desses 3 anos e meio de faculdade, e fazer disso uma forma de aprender um pouco mais também. Apesar disso, não tenho muita experiência com escrita, e se eu fosse começar de coisas mais complexas, provavelmente ia acabar me enrolando.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;br /&gt;&lt;span style=";font-size:85%;" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;Então, o que vou fazer é o seguinte: Vou começar a falar de coisas bem simples, em geral fáceis de explicar (e que provavelmente tem em um milhão de outros lugares na internet). Apesar disso, pretendo ser o mais completo possível nas explicações, no limite do meu conhecimento, é claro.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;br /&gt;&lt;span style=";font-size:85%;" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;Gostaria de falar aqui sobre algoritmos, grafos, e algumas implementações de problemas reais também. O primeiro post será sobre Ordenação, e será colocado aqui &lt;st1:personname productid="em breve. Aguardem" st="on"&gt;em breve. Aguardem&lt;/st1:personname&gt;!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;Um abraço,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;Xico.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7401362426453688280-410390999522127329?l=fvianna.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fvianna.blogspot.com/feeds/410390999522127329/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7401362426453688280&amp;postID=410390999522127329' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/410390999522127329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/410390999522127329'/><link rel='alternate' type='text/html' href='http://fvianna.blogspot.com/2009/09/ele-vai-viver.html' title='Ele vai viver!!!!!!'/><author><name>Francisco Viégas Vianna</name><uri>http://www.blogger.com/profile/11512465384230143527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7401362426453688280.post-733929352750119371</id><published>2008-01-30T17:58:00.000-02:00</published><updated>2008-01-30T18:24:07.369-02:00</updated><title type='text'>Eu sou a Lenda - Crítica pessoal</title><content type='html'>Há algum tempo já, está em cartaz em praticamente todos os cinemas brasileiros e provavelmente em todo o mundo, o mais novo filme estrelado por Will Smith, "Eu sou a lenda". Somente semana passada tive a oportunidade de assistir o filme,  o qual  eu estava com vontade de assistir desde a primeira vez que ouvi falar dele.&lt;br /&gt;&lt;br /&gt;Não me decepcionei. Realmente é um filme e tanto, embora muitas pessoas com as quais eu andei conversando a respoeito tenham dito que se decepcionaram com ele. Imho*, já fazia algum tempo que não via um filme que conseguia agregar tantas "sensações" (na falta de uma expressão melhor). O filme, a princípio, pode ser considerado (e de fato é) futurista/de ficção científica. Mas ele vai além... muito além. Com  cenas dramáticas, engraçadas, tensas, assustadoras, ele capta a atenção do espectador do início ao fim.&lt;br /&gt;&lt;br /&gt;Isso sem falar da temática, que tudo tem a ver com essa revolução científica e tecnológica que está cada vez mais presente em nossas vidas (e digo isso porque minha faculdade vive isso a cada dia). Revolução essa que assusta muitos de nós (a mim, inclusive), com a velocidade - e muitas vez, a imprudência - com que acontecem. Mas isso é assunto para um outro dia.&lt;br /&gt;&lt;br /&gt;O fato é que, com um enredo a principio pouco promissor, o filme bate recordes de bilheteria, e certamente estará entre os mais assistidos do ano.  Isso porque nos identificamos com um personagem (ou dois - afinal, o que seria do filme sem a cadela Sam?) que mostra o medo de muitos de nós de um futuro incerto. É claro que não estou falando de seres humanos virarem zumbis sangüinários, mas vocês entenderam.&lt;br /&gt;&lt;br /&gt;Enfim, vale a pena conferir. Dinheiro bem gasto com entretenimento de qualidade cada vez mais excasso. Só escolha um cinema decente, também compensa!&lt;br /&gt;&lt;br /&gt;Um abraço.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* &lt;span style="font-style: italic;"&gt;In my humble opinion&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7401362426453688280-733929352750119371?l=fvianna.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fvianna.blogspot.com/feeds/733929352750119371/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7401362426453688280&amp;postID=733929352750119371' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/733929352750119371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/733929352750119371'/><link rel='alternate' type='text/html' href='http://fvianna.blogspot.com/2008/01/eu-sou-lenda-crtica-pessoal.html' title='Eu sou a Lenda - Crítica pessoal'/><author><name>Francisco Viégas Vianna</name><uri>http://www.blogger.com/profile/11512465384230143527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7401362426453688280.post-6599387177107174311</id><published>2008-01-07T16:17:00.000-02:00</published><updated>2008-01-08T14:47:09.824-02:00</updated><title type='text'>Estréia da WWE no Brasil - SBT</title><content type='html'>Bom pessoal,&lt;br /&gt;&lt;br /&gt;Como a maioria deve saber, anteontem, dia 5 de janeiro, às 16:00, tivemos a primeira exibição no Brasil de 2 das 3 subdivisões do WWE - Raw e Smackdown! - no SBT.&lt;br /&gt;&lt;br /&gt;Como telespectador assíduo dos 2 "campenoatos" (e também do ECW), estava muito animado com a vinda do WWE para o Brasil, até porque correm rumores sobre espetáculos ao vivo e a vinda de produtos da WWE para Brasil. Para todos nós, fãs da WWE, nada poderia ser melhor do que isso.... ver os lutadores de perto, vibrar com a entradas e confusões no ringue. E tudo começa criando-se um público para o WWE, papel que caberá ao SBT.&lt;br /&gt;&lt;br /&gt;Acontece que, infelizmente, nada foi como (pelo menos) eu previa (na verdade foi como eu previa, mas não como eu queria). Acredito que não só na minha opinião, mas na opinião de todos os fãs que já acompanham o programa a algum tempo e que criaram expectativas ao redor dessa estréia, o SBT mais uma vez enfiou os pés pelas mãos.&lt;br /&gt;&lt;br /&gt;Ao começar pelo nome do programa - "WWE - Luta livre na TV!" - Seguindo o péssimo hábito da emissora de adicionar uma parte extra ao nome original dos programas (ao bom estilo "Smallville - As averturas do superboy" e "The O.C. - Um estranho no paraíso"). Esse nome dá, de certa forma, uma impressão um pouco errada, pois sugere pancadaria "estilo Pride", onde a porrada come mesmo, quando na verdade WWE muito pouco (ou nada) tem a ver com isso.&lt;br /&gt;&lt;br /&gt;Às 16:00, começa o programa. E por um momento achei que as minhas esperanças se confirmariam, pois começei a assistir VT's de John Cena e Shawn Michaels com áudio original e legenda!!!! Mas ainda era muito cedo pra ficar feliz. Logo a seguir, me deparei com a narração - me desculpem, pois respeito muito ambos - de duas pessoas que já tem um 'background' ne luta livre brasileira, um dos quais a lenda do "Gigantes do Ringue", Michel Serdan. Foi realmente estranho para quem está acostumado, não ouvir as vozes de JR, Jerry "The King" Lawler, Michael, JBL entre outros. Eles também são parte do espetáculo.&lt;br /&gt;&lt;br /&gt;Outra coisa que me frustrou um bocado foi o fato de que o SBT não se focou, como eu achei que iria, em apresentar aos futuros fãs a história (quando falo de história me refiro ao enredo) que é contada a cada episódio. Sempre achei que o contexto criado pela WWE para as lutas (as rivalidades, brigas fora do ringue, xingamentos, afrontas) eram cruciais para tornar o espetáculo ainda melhor. Mas tudo que vi por parte do SBT foi a apresentação dos principais personagens (essa sim eu considero que foi boa!!) e a exibição aleatória de lutas que foram fantásticas (como John Cena e Shawn Michaels no Wrestlemania 23), mas que perdem muito sem toda a história que existe por trás.&lt;br /&gt;&lt;br /&gt;Por exemplo: O que seria da reconquista do título de ECW Champion por Bobby Lashley (com aquele spear fenomenal no McMahon) se ele não tivesse apanhado covardemente antes por 3 meses??? E que sentido teria a implicância do McMahon com ele sem a Billionaire - Hair vs. Hair match no Wrestlemania 23?? Realmente acho que o SBT deveria ter se importado mais com isso.&lt;br /&gt;&lt;br /&gt;Também nem vou entrar no mérito de que o SBT não se preocupou em conquistar os fãs que já assistem WWE através da internet (viva os Torrents!), pois essa realmente eu acho que nunca existiu.&lt;br /&gt;------&lt;br /&gt;&lt;br /&gt;Mas.... nem tudo foi tão ruim assim. Pelo que andei lendo na internet em blogs e outros sites, a recepção de quem assistiu foi boa, inclusive muitos comentários positivos até sobre a estrutura do programa. &lt;strong&gt;&lt;span style="color:#cc0000;"&gt;ISSO É MUITO BOM PARA A QUE OS ESPETÁCULOS DA WWE CONTINUEM A SER EXIBIDOS POR AQUI.&lt;/span&gt;&lt;/strong&gt; Temos agora que aguardar para ver se a audiência - que marcou 6 pontos no IBOPE e garantiu um amargo 3º lugar na tarde de sábado, perdendo para Globo e Record - vai subir e garantir pelo menos o 2º lugar.&lt;br /&gt;&lt;br /&gt;Eu realmente tenho fé que vai vingar. Sábado que vem a gente poderá ter uma noção melhor, pois segundo o Jornal Extra, (caderno "Sessão Extra" de alguns dias atrás, o SBT irá exibir os programas na mesma semana em que forem ao ar nos E.U.A. (pelo menos pagou pelo direito de fazê-lo). E aos poucos as pessoas se envolverão com as histórias, tenho certeza. Só espero que elas não desistam antes (e nem devem... vale a pena aguardar um pouco).&lt;br /&gt;&lt;br /&gt;Então, se você se importa como eu com a continuidade da exibição de WWE no Brasil, sábado, às 16:00, ligue suas televisões (todas elas MESMO) no SBT para ajudar na audiência (mesmo que você não vá assistir).&lt;br /&gt;&lt;br /&gt;Até breve,&lt;br /&gt;Xico.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7401362426453688280-6599387177107174311?l=fvianna.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fvianna.blogspot.com/feeds/6599387177107174311/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7401362426453688280&amp;postID=6599387177107174311' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/6599387177107174311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/6599387177107174311'/><link rel='alternate' type='text/html' href='http://fvianna.blogspot.com/2008/01/sobre-estria-da-wwe-no-brasil.html' title='Estréia da WWE no Brasil - SBT'/><author><name>Francisco Viégas Vianna</name><uri>http://www.blogger.com/profile/11512465384230143527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7401362426453688280.post-932385241174710698</id><published>2007-08-31T00:58:00.000-03:00</published><updated>2007-08-31T01:01:30.316-03:00</updated><title type='text'>Inauguração</title><content type='html'>Bom..... São 1h da manhã e eu to aki fazendo um trabalho super-chato.... vasculhando os serviços Google, achei um link pro Blogger e resolvi criar....&lt;br /&gt;&lt;br /&gt;Ainda não sai que tipo de coisa eu vou postar por aki, mas com certeza não vai ser um diário on-line... Vou tentar achar umas coisas interessantes, textos, tutoriais, sei lá....&lt;br /&gt;&lt;br /&gt;Acho que é isso.&lt;br /&gt;Boa noite&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7401362426453688280-932385241174710698?l=fvianna.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/932385241174710698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7401362426453688280/posts/default/932385241174710698'/><link rel='alternate' type='text/html' href='http://fvianna.blogspot.com/2007/08/inaugurao.html' title='Inauguração'/><author><name>Francisco Viégas Vianna</name><uri>http://www.blogger.com/profile/11512465384230143527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
