<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>algoritmos &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://wordpress.com/tag/algoritmos/</link>
	<description>Feed of posts on WordPress.com tagged "algoritmos"</description>
	<pubDate>Sat, 26 Jul 2008 08:47:57 +0000</pubDate>

	<generator>http://wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Algoritmos de Ordenação - Bubble Sort]]></title>
<link>http://glaucovinicius.wordpress.com/?p=51</link>
<pubDate>Sat, 26 Jul 2008 04:35:37 +0000</pubDate>
<dc:creator>Glauco Vinicius</dc:creator>
<guid>http://glaucovinicius.wordpress.com/?p=51</guid>
<description><![CDATA[Olá pessoal!
Esse é o primeiro post no qual começarei a falar a respeito dos principais algoritmo]]></description>
<content:encoded><![CDATA[<p>Olá pessoal!</p>
<p>Esse é o primeiro post no qual começarei a falar a respeito dos principais algoritmos de ordenação conhecidos. Hoje especificamente, falarei a respeito do bubble sort.</p>
<p>O bubble sort é um dos mais simples algoritmos de ordenação e trabalha de uma maneira super simples: Percorre repetidas vezes o vetor que se deseja ordenar, comparando duas posições desse vetor e realizando um "swap" entre elas caso o valor da primeira posição seja maior que o valor da segunda posição. Enquanto houver algum swap o algoritmo é executado.</p>
<p><!--more--></p>
<p>Dos algoritmos de ordenação é o pior, pois tem complexidade O(n²)</p>
<p>Exemplo:</p>
<p>Imaginemos que você possui um vetor com os seguintes números inteiros [5, 1, 4, 2, 8], e deseja ordená-lo de modo crescente utilizando o algoritmo bubble sort. A cada vez que o vetor é percorrido pelo algoritmo, os elementos em negrito são comparados:</p>
<p>Primeira Vez:</p>
<p>// O algoritmo compara os dois primeiros elementos e realiza o swap entre eles.<br />
( <strong>5</strong> <strong>1</strong> 4 2 8 ) \para ( <strong>1 5</strong> 4 2 8 )<br />
( 1 <strong>5 4</strong> 2 8 ) \para ( 1 <strong>4 5</strong> 2 8 )<br />
( 1 4 <strong>5 2</strong> 8 ) \para ( 1 4 <strong>2 5</strong> 8 )<br />
( 1 4 2 <strong>5 8</strong> ) \para ( 1 4 2 <strong>5 8</strong> )</p>
<p>Segunda vez:<br />
( <strong>1 4</strong> 2 5 8 ) \para ( <strong>1 4</strong> 2 5 8 )<br />
( 1 <strong>4 2</strong> 5 8 ) \para ( 1 <strong>2 4</strong> 5 8 )<br />
( 1 2 <strong>4 5</strong> 8 ) \para ( 1 2 <strong>4 5</strong> 8 )<br />
( 1 2 4 <strong>5 8</strong> ) \para ( 1 2 4 <strong>5 8</strong> )<br />
// Nesse momento o vetor está completamente ordenado, entretando o algoritmo não sabe disso. Ele necessita percorrer mais uma vez o vetor sem realizar um swap para compreender isso.</p>
<p>Terceira vez:<br />
( <strong>1 2</strong> 4 5 8 ) \para ( <strong>1 2</strong> 4 5 8 )<br />
( 1 <strong>2 4</strong> 5 8 ) \para ( 1 <strong>2 4</strong> 5 8 )<br />
( 1 2 <strong>4 5</strong> 8 ) \para ( 1 2 <strong>4 5</strong> 8 )<br />
( 1 2 4 <strong>5 8</strong> ) \para ( 1 2 4 <strong>5 8</strong> )<br />
// Finalmente o vetor está ordenado e o algoritmo pode encerrar sua execução.</p>
<p>Um exemplo da implementação desse algoritmo em C# pode ser verificado a seguir:</p>
<p><code></p>
<pre>
using System;
namespace ConsoleApp
{
    class Program
    {
        static void Main()
        {
            int[] vetor = { 65, 45, 12, 77, 50, 60, 21, 65, 11, 87 };

            foreach (int item in bubble_sort(vetor))
                Console.WriteLine("{0},", item);

            Console.ReadKey(true);
        }
        public static int[] bubble_sort(int[] vetor)
        {
            bool swap;
            do
            {
                swap = false;
                for (int i = 0; i  vetor[i + 1])
                {
                    if (vetor[i] &#62; vetor[i + 1])
                    {
                        int temp = vetor[i + 1];
                        vetor[i + 1] = vetor[i];
                        vetor[i] = temp;
                        swap = true;
                    }
                }
            }
            while (swap);
            return vetor;
        }
    }
}
</pre>
<p></code></p>
<p>Bom pessoal, é isso! Espero que tenham gostado!</p>
<p>Quaisquer dúvidas entrem em contato comigo!</p>
<p>At<br />
Glauco Vinicius</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Complexidade de Algoritmos - Classes de Algoritmos]]></title>
<link>http://glaucovinicius.wordpress.com/?p=45</link>
<pubDate>Wed, 23 Jul 2008 04:53:58 +0000</pubDate>
<dc:creator>Glauco Vinicius</dc:creator>
<guid>http://glaucovinicius.wordpress.com/?p=45</guid>
<description><![CDATA[Nesse momento você deve estar se perguntando:&#8220;Como saber qual a complexidade de determinado a]]></description>
<content:encoded><![CDATA[<p>Nesse momento você deve estar se perguntando:<em>"Como saber qual a complexidade de determinado algoritmo implementado?"</em></p>
<p>Para resolver esse problema, os algoritmos foram divididos em grupos denominados <em>"Classes de Problemas"</em>, de acordo com o parâmetro que afeta mais significativamente o algoritmo.</p>
<p><strong>Classes de Algoritmos</strong></p>
<ul>
<li>Complexidade Constante</li>
<li>Complexidade Linear</li>
<li>Complexidade Logarítmica</li>
<li>N log N</li>
<li>Complexidade Quadrática</li>
<li>Complexidade Cúbica</li>
<li>Complexidade Exponencial</li>
</ul>
<p><!--more--><br />
<strong>Complexidade Constante</strong></p>
<ul>
<li>Algoritmos de complexidade O(1)</li>
<li>Independe do volume de entradas <em>N</em></li>
<li>Suas instruções são executadas em um número fixo de vezes</li>
</ul>
<p>Exemplo:<br />
<code></p>
<pre>
using System.Collections.Generic;
namespace ConsoleApp
{
    class Classe
    {
        public bool verifica_lista_vazia&#60;T&#62;(List&#60;T&#62; lista)
        {
            bool lista_vazia = lista.Count == 0; // Complexidade O(1)
            return lista_vazia;
        }
    }
}
</pre>
<p></code><br />
<strong>Complexidade Constante</strong></p>
<ul>
<li>Algoritmos de complexidade O(N)</li>
<li>Uma operação é realizada para cada elemento de uma entrada <em>N</em></li>
</ul>
<p>Exemplo:<br />
<code></p>
<pre>
using System.Collections.Generic;
using System.Collections;
namespace ConsoleApp
{
    class Classe
    {
        public void percorre_lista&#60;T&#62;(List&#60;T&#62; lista)
        {
            IEnumerator enumerator = lista.GetEnumerator(); // Complexidade O(1)
            int count = 0; // Complexidade O(1);
            while (enumerator.MoveNext()) // Complexidade O(N)
            {
                count++;
            }
        }
    }
}
</pre>
<p></code><br />
<strong>Complexidade Logaritmica</strong></p>
<ul>
<li>Algoritmos de complexidade O(logN)</li>
<li>Ocorre tipicamente em algoritmos que dividem o problema em partes menores</li>
</ul>
<p>Exemplos: Busca binária</p>
<p><strong>N log N</strong></p>
<ul>
<li>Algoritmos de complexidade O(NLogN)</li>
<li>Ocorre tipicamente em algoritmos que dividem o problema em partes menores, porém juntando posteriormente a solução dos problemas menores</li>
</ul>
<p>Exemplos: Algoritmos de ordenação externa</p>
<p><strong>Complexidade Quadrática</strong></p>
<ul>
<li>Algoritmos de complexidade O(N²)</li>
<li>Os itens são processados aos pares, em geral com um laço de iteração dentro de outro laço</li>
</ul>
<p>Exemplo:<br />
<code></p>
<pre>
using System.Collections.Generic;
using System.Collections;
using System;
namespace ConsoleApp
{
    class Classe
    {
        public void do_nothing(string[] collection_01, string[] collection_02)
        {
            foreach (string item_01 in collection_01) // Complexidade O(N²)
            {
                foreach (string item_02 in collection_02)
                {
                    Console.WriteLine("{0}-{1}", item_01, item_02);
                }
            }
        }
    }
}
</pre>
<p></code></p>
<p><strong>Complexidade Cúbica</strong></p>
<ul>
<li>Algoritmos de complexidade O(N³)</li>
<li>Itens são processados três a três, em geral um laço de iteração dentro de outros dois</li>
<li></li>
</ul>
<p>Exemplo:</p>
<p><code></p>
<pre>
using System.Collections.Generic;
using System.Collections;
using System;
namespace ConsoleApp
{
    class Classe
    {
        public void do_nothing(string[] collection_01, string[] collection_02, string[] collection_03)
        {
            foreach (string item_01 in collection_01) // Complexidade O(N³)
            {
                foreach (string item_02 in collection_02)
                {
                    foreach (var item_03 in collection_03)
                    {
                        Console.WriteLine("{0}-{1}-{2}", item_01, item_02, item_03);
                    }
                }
            }
        }
    }
}
</pre>
<p></code></p>
<p><strong></strong></p>
<ul>
<li>Algoritmos de complexidade O(2^N)</li>
<li>Utilização de <em>Brute Force</em> para resolvê-los</li>
<li>Geralmente não são úteis do ponto de vista prática</li>
</ul>
<p>At<br />
Glauco Vinicius</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Complexidade de Algoritmos - Escalas de Complexidade]]></title>
<link>http://glaucovinicius.wordpress.com/?p=42</link>
<pubDate>Wed, 23 Jul 2008 04:02:50 +0000</pubDate>
<dc:creator>Glauco Vinicius</dc:creator>
<guid>http://glaucovinicius.wordpress.com/?p=42</guid>
<description><![CDATA[Continuando o assunto complexidade de algoritmos, falaremos agora a respeito das escalas de complexi]]></description>
<content:encoded><![CDATA[<p>Continuando o assunto complexidade de algoritmos, falaremos agora a respeito das escalas de complexidade de um algoritmo.</p>
<p>Existem três escalas de complexidade:</p>
<ul>
<li>Pior Caso</li>
<li>Caso Médio</li>
<li>Melhor Caso</li>
</ul>
<p><!--more--></p>
<p><strong>Pior Caso</strong></p>
<ul>
<li>Abordagem que utilizaremos nos próximos posts</li>
<li>Representado pela letra grega O (ômicron maiúscula)</li>
<li>Método simples de se obter a complexidade. Baseia-se no maior tempo de execução</li>
</ul>
<p>Exemplo:<br />
Vamos imaginar que você possui uma lista de telefones com N entradas e deseja encontrar um número específico nessa lista. Assume-se então que a complexidade no pior caso será de O(N), pois leva-se em consideração que o número estará no último lugar da lista.</p>
<p><strong>Caso Médio</strong></p>
<ul>
<li>Representado pela letra grega θ (theta)</li>
<li>É o mais difícil de se determinar</li>
<li>Deve-se obter a média dos tempos de execução de todas as entradas de tamanho <em>N</em>, ou baseado em probabilidade de determinada condição ocorrer
</li>
</ul>
<p><strong>Melhor Caso</strong></p>
<ul>
<li>Representado pela letra grega Ω(ômega)</li>
<li>Baseia-se no menor tempo de execução de uma entrada <em>N</em></li>
<li>É pouco utilizado</li>
</ul>
<p>Exemplo:<br />
Vamos imaginar que você possui uma lista de telefones com N entradas e deseja encontrar um número específico nessa lista. Assume-se então que a complexidade no melhor caso será de Ω(1), pois leva-se em consideração que o número estará no primeiro lugar da lista.</p>
<p>No próximo post veremos como determinar a complexidade de um algoritmo já implementado utilizando a abordagem do pior caso.</p>
<p>At<br />
Glauco Vinicius</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Complexidade de Algoritmos - Definição]]></title>
<link>http://glaucovinicius.wordpress.com/?p=37</link>
<pubDate>Wed, 23 Jul 2008 03:37:37 +0000</pubDate>
<dc:creator>Glauco Vinicius</dc:creator>
<guid>http://glaucovinicius.wordpress.com/?p=37</guid>
<description><![CDATA[A complexidade de um algoritmo nada mais é do que a &#8220;quantidade de trabalho&#8221; necessári]]></description>
<content:encoded><![CDATA[<p>A complexidade de um algoritmo nada mais é do que a "quantidade de trabalho" necessário para que ele seja executado. Essa quantidade de trabalho varia de acordo com o algoritmo e a quantidade de dados de entrada.</p>
<p>Grande parte das pessoas que já fizeram AEDS viram que:</p>
<ul>
<li>Um algoritmo resolve um determinado problema e tem uma entrada de dados <em>N</em></li>
<li>O tamanho da entrada <em>N</em> influencia diretamente no tempo de execução do algoritmo</li>
</ul>
<p><!--more--></p>
<p>A complexidade de um algoritmo pode ser dividida em duas partes:</p>
<ul>
<li><strong>Complexidade espacial:</strong> quantidade de recursos necessários para resolver determinado problema</li>
<li><strong>Complexidade temporal:</strong> quantidade de tempo ou número de instruções necessarias para resolver determinado problema</li>
</ul>
<p>O objetivo nesse primeiro momento é estudar a complexidade temporal. Vale lembrar mais uma vez que em ambos os casos a complexidade é medida levando em consideração o volume da entrada de dados (N)</p>
<p>Nos próximos post falarei mais a respeito da complexidade temporal.</p>
<p>At<br />
Glauco Vinicius</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Pesquisa binária]]></title>
<link>http://glaucovinicius.wordpress.com/?p=30</link>
<pubDate>Tue, 22 Jul 2008 23:03:04 +0000</pubDate>
<dc:creator>Glauco Vinicius</dc:creator>
<guid>http://glaucovinicius.wordpress.com/?p=30</guid>
<description><![CDATA[Olá pessoal!
A partir de hoje começarei a postar alguns algoritmos que tenho aprendido sob a orien]]></description>
<content:encoded><![CDATA[<p>Olá pessoal!</p>
<p>A partir de hoje começarei a postar alguns algoritmos que tenho aprendido sob a orientação de Júlio Melo, um amigo que trabalha comigo na Squadra Tecnologia.</p>
<p>A idéia é criar um repositório pessoal de fácil consulta e promover um maior conhecimento por parte dos leitores de alguns algoritmos não tão difundidos mas que podem ajudar em muito no dia-a-dia.</p>
<p>Iniciei a semana aprendendo o algoritmo de <strong>pesquisa binária</strong>. Esse é um algoritmo para realizar busca em vetores. É um pré-requisito para a utilização desse algoritmo que o vetor esteja ordenado.</p>
<p><!--more--></p>
<p>Basicamente o algoritmo realiza sucessivas divisões do espaço de busca (uma técnica conhecida como divisão e conquista), nas quais compara o elemento buscado, também conhecido como chave, com o elemento do meio do vetor. Se o elemento do meio do vetor for o valor buscado, a busca termina com sucesso, caso contrário, se o elemento do meio vier antes da chave, então a busca continua na metade superior do vetor, se o elemento do meio vier depois da chave, a busca continua na metade inferior do vetor.</p>
<p>Esse é um algoritmo de complexidade <strong>O(logN)</strong>, onde n é o tamanho do vetor de busca. </p>
<p>Abaixo a implementação desse algoritmo utilizando C#. Realizei duas implementações rápidas, uma utilizando recursão e outra sem recursão. Vale lembrar que falta ainda adicionar um tratamento para o caso do valor pesquisado não existir no vetor.</p>
<p><code></p>
<pre>
using System;
namespace ConsoleApp
{
    class Program
    {
        static void Main()
        {
            int[] vetor = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
            int chave = 80;
            Console.WriteLine(busca_binaria_sem_recursao(vetor, 0, vetor.Length, chave));
            Console.ReadKey(true);
        }
        public static int busca_binaria_com_recursao (int[] vetor, int inicio, int termino, int chave)
        {
            int meio = (inicio + termino) / 2;
            if (chave == vetor[meio])
                return meio;
            else
            {
                if (chave &#60; vetor[meio])
                    return busca_binaria_com_recursao(vetor, inicio, meio - 1, chave);
                else
                    return busca_binaria_com_recursao(vetor, meio + 1, termino, chave);
            }
        }
        public static int busca_binaria_sem_recursao(int[] vetor, int inicio, int termino, int chave)
        {
            int meio = (inicio + termino) / 2;
            while (vetor[meio] != chave)
            {
                if (chave &#60; vetor[meio])
                {
                    termino = meio - 1;
                    meio = (inicio + termino) / 2;
                }
                else
                {
                    inicio = meio + 1;
                    meio = (inicio + termino) / 2;
                }
            }
            return meio;
        }
    }
}
</pre>
<p></code></p>
<p>[]'s<br />
Glauco Vinicius</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[un post mas]]></title>
<link>http://abc101.wordpress.com/?p=27</link>
<pubDate>Fri, 11 Jul 2008 14:36:54 +0000</pubDate>
<dc:creator>-abc</dc:creator>
<guid>http://abc101.wordpress.com/?p=27</guid>
<description><![CDATA[analisis de algoritmos
]]></description>
<content:encoded><![CDATA[<p>analisis de algoritmos</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Passei!!!]]></title>
<link>http://coisasdoeu.wordpress.com/?p=27</link>
<pubDate>Tue, 08 Jul 2008 21:19:49 +0000</pubDate>
<dc:creator>Eu</dc:creator>
<guid>http://coisasdoeu.wordpress.com/?p=27</guid>
<description><![CDATA[Após 5 semanas de imenso trabalho, lá consegui passar a algoritmos com a maravilhosa nota de 11. E]]></description>
<content:encoded><![CDATA[<p>Após 5 semanas de imenso trabalho, lá consegui passar a algoritmos com a maravilhosa nota de 11. Estava a espera de uma nota melhor, mas também não fico totalmente decepcionado. :)</p>
<p><a href="http://coisasdoeu.files.wordpress.com/2008/07/d_smile.gif"><img class="aligncenter size-full wp-image-28" src="http://coisasdoeu.wordpress.com/files/2008/07/d_smile.gif" alt="" width="200" height="200" /></a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Bubblesort (Algoritmo de la burbuja)]]></title>
<link>http://alefalletti.wordpress.com/2008/07/02/bubblesort-algoritmo-de-la-burbuja/</link>
<pubDate>Wed, 02 Jul 2008 23:26:31 +0000</pubDate>
<dc:creator>María Alejandra Falletti</dc:creator>
<guid>http://alefalletti.wordpress.com/2008/07/02/bubblesort-algoritmo-de-la-burbuja/</guid>
<description><![CDATA[Bubblesort (Algoritmo de la burbuja)
Blogged with the Flock Browser
]]></description>
<content:encoded><![CDATA[<p><a href="http://video.google.com/videoplay?docid=-3126668015509187666&#38;q=algoritmo&#38;ei=kQ1sSMaXLIP8rQKppJWoDw&#38;hl=es">Bubblesort (Algoritmo de la burbuja)</a></p>
<div class="flockcredit" style="text-align:right;color:#CCC;font-size:x-small;">Blogged with the <a title="Flock Browser" href="http://www.flock.com/blogged-with-flock" target="_new">Flock Browser</a></div>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Google aprende a rastrear flash]]></title>
<link>http://sebastianmagallanes.wordpress.com/?p=749</link>
<pubDate>Tue, 01 Jul 2008 18:34:45 +0000</pubDate>
<dc:creator>sebitico</dc:creator>
<guid>http://sebastianmagallanes.wordpress.com/?p=749</guid>
<description><![CDATA[ Google ha desarrollado un nuevo algoritmo de indexación para el contenido de los textos en archiv]]></description>
<content:encoded><![CDATA[<p> Google ha desarrollado un nuevo algoritmo de indexación para el contenido de los textos en archivos Flash de todo tipo, desde Flash menús, botones y banners, a self-contained Flash sitios web. <span>Recientemente, hemos mejorado el rendimiento de este algoritmo de indexación de Flash mediante la integración de <a href="http://64.233.179.104/translate_c?hl=es&#38;sl=en&#38;tl=es&#38;u=http://www.adobe.com/aboutadobe/pressroom/pressreleases/200806/070108AdobeRichMediaSearch.html">Adobe Flash Player tecnología.</a></span></p>
<p><a href="http://googleblog.blogspot.com/2008/06/google-learns-to-crawl-flash.html" target="_blank">FUENTE</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Estructuras de datos en C y manejo de memoria I]]></title>
<link>http://bragasofts.wordpress.com/?p=7</link>
<pubDate>Mon, 30 Jun 2008 01:50:14 +0000</pubDate>
<dc:creator>bragasofts</dc:creator>
<guid>http://bragasofts.wordpress.com/?p=7</guid>
<description><![CDATA[Nota: Este texto supone que se sabe que es una estructura de datos recursivas (nodos de listas, cola]]></description>
<content:encoded><![CDATA[<p>Nota: Este texto supone que se sabe que es una estructura de datos recursivas (nodos de listas, colas, pilas, árboles, etc.) y como se la programa en C e intenta darle una vuelta de rosca a ese conocimiento.</p>
<p>El lenguaje C es uno de los lenguajes de más bajo nivel (relativo) que existe. En este lenguaje la memoria se estructura de manera plana, que es en definitiva lo que es la memoria, un espacio plano de almacenamiento temporal.</p>
<p>Así entonces un nodo de estructura dinámica  como el siguiente:</p>
<p>struct empleado{<br />
int idEmpleado;<br />
char* nombre;<br />
char  codigoPostal[6];<br />
int idDepto;<br />
struct empleado* sgte;<br />
}</p>
<p>No es una estructura dimensional, sino un manojo de bytes ordenados:</p>
<p>(<br />
Suponiendo arquitectura intel x86 32bits<br />
int = &#62;4 bytes<br />
Dirección de memoria =&#62; 4bytes<br />
char x 6 =&#62; 6 bytes<br />
)</p>
<p>id      nombre  Codigo        depto    siguiente<br />
[][][][] [][][][]     [][][][][][] [][][][]  [][][][]</p>
<p>Los cuales son interpretados cada uno como entero, puntero a caracter, entero, entero, entero.<br />
En otras palabras, puede ser claramente un vector de bytes, donde a cada subconjunto de bytes se los interpreta como un tipo de datos nativo según la información de la definición de la estructura.</p>
<p>Bien, ahora supongamos que tenemos esta otra estructura bastante distinta:</p>
<p>struct empresa{<br />
char* idEmpresa;<br />
char* razonSocial;<br />
long int cuit;<br />
char* direccion;<br />
char codigoPostal[6];<br />
struct empresa* sgte;<br />
};</p>
<p>Cuando hacemos funciones de acceso a cola (por ejemplo) siempre tenemos la maldita sensación de estar haciendo las mismas cosas miles de veces, puesto que si bien no es lo mismo un empleado y una empresa,<br />
¡¡Las colas son todas iguales!!<br />
¡¡El mecanismo si es el mismo, agrego al final, saco del principio!!</p>
<p>¿Cómo hacer para separar el “¿Qué?” del “¿Cómo?”?</p>
<p>Con el conocimiento que tenemos ahora de la memoria y la estructuración en memoria de las estructuras, existe al menos una forma de hacerlo.</p>
<p>¿Qué tienen en común todos los nodos de una estructura de datos dinámica / recursiva?<br />
Rta.: El puntero al siguiente nodo.</p>
<p>¿Qué tienen en común todos los punteros en una misma arquitectura hardware / sistema operativo?<br />
Rta.: El puntero es un tipo de datos, no importa lo que apunte, siempre pesa lo mismo.</p>
<p>Si planteamos la siguiente estructura:</p>
<p>Struct Nodo {<br />
Struct Nodo* sgte;<br />
};</p>
<p>Tenemos una estructura que el primer valor es un puntero un siguiente nodo, no tenemos variable “contenedor”, y no la necesitamos, puesto que ahora no nos importa el contenido de información, sino el puntero siguiente.</p>
<p>Un programa hecho en C, interpreta los datos según el tipo del mismo en el instante de ejecución dado.</p>
<p>Si yo modificase las estructuras anteriores y pusiese el elemento siguiente primero en la lista, quedaría esto:</p>
<p>struct empleado{<br />
struct empleado* sgte;<br />
int idEmpleado;<br />
char* nombre;<br />
char codigoPostal[6];<br />
int idDepto;<br />
}</p>
<p>struct empresa{<br />
struct empresa* sgte;<br />
char* idEmpresa;<br />
char* razonSocial;<br />
long int cuit;<br />
char* direccion;<br />
char codigoPostal[6];<br />
};</p>
<p>Ahora, la última pregunta a hacernos es:<br />
¿Qué tienen en común nuestras tres estructuras?<br />
Rta.: Las tres empiezan con un puntero conceptualmente igual, el puntero al siguiente elemento.</p>
<p>Como se dan todas estas relaciones, entonces, gracias a la existencia del “casteo”,  que hace que el programa interprete un dato como otro, sin afectarlo en el proceso, entonces, podemos definir todas las funciones para manejo de Colas para la estructura mas chica.</p>
<p>#define null NULL<br />
#include<br />
#include</p>
<p>typedef struct Nodo {<br />
struct Nodo* sgte;<br />
}Nodo;</p>
<p>typedef struct Cola {<br />
Nodo* head;<br />
Nodo* tail;<br />
}Cola;</p>
<p>typedef struct Empleado{<br />
struct Empleado* sgte;<br />
int idEmpleado;<br />
char* nombre;<br />
char codigoPostal[6];<br />
int idDepto;<br />
} Empleado;</p>
<p>void inicializarCola (Cola* unaCola) {<br />
unaCola-&#62;head = null;<br />
unaCola-&#62;tail = null;<br />
}</p>
<p>void agregarNodo (Cola* unaCola, Nodo* unNodo){<br />
unNodo-&#62;sgte = null;</p>
<p>if ( unaCola-&#62;tail != null) {<br />
unaCola-&#62;tail-&#62;sgte = unNodo;<br />
}<br />
unaCola-&#62;tail = unNodo;</p>
<p>if (unaCola-&#62;head == null) {<br />
unaCola-&#62;head = unNodo;<br />
}</p>
<p>}</p>
<p>Nodo* obtenerNodo (Cola* unaCola) {<br />
Nodo* retorno;<br />
retorno = unaCola-&#62;head;<br />
if ( unaCola-&#62;head != null ) {<br />
unaCola-&#62;head = unaCola-&#62;head-&#62;sgte;<br />
}<br />
return retorno;<br />
}</p>
<p>int main (void) {</p>
<p>Cola unaCola;<br />
Empleado* unEmpleado;<br />
int i;<br />
inicializarCola(&#38;unaCola);</p>
<p>for (i = 0; i codigoPostal), '', 6);<br />
unEmpleado-&#62;idDepto = i;<br />
unEmpleado-&#62;idEmpleado = i * 2;<br />
unEmpleado-&#62;nombre = null;<br />
agregarNodo(&#38;unaCola, (Nodo*)unEmpleado);</p>
<p>}</p>
<p>while ((unEmpleado = (Empleado*) obtenerNodo(&#38;unaCola)) != null) {<br />
printf (" Id Empleado: %d \tId Depto: %d \n", unEmpleado-&#62;idEmpleado, unEmpleado-&#62;idDepto);<br />
}</p>
<p>return 0;<br />
}</p>
<p>/*<br />
Nota: Ejemplo probado con GCC y MinGW. No incluye el manejo de cadenas y la creación de empleados por una función dedicada por cuestiones de tiempo.<br />
*/</p>
<p>Y con esto, tenemos el algoritmo de inserción y obtención de colas para cualquier nodo que tenga como primer dato de estructura el puntero al siguiente valor.</p>
<p>Como se puede ver a simple vista, esto de poder usar la misma función para distintos tipos de datos en los parámetros tiene cierto potencial.<br />
Esta posibilidad de, por medio de casteo a estructuras menores de igual forma es una forma de emular el llamado Polimorfismo paramétrico (que no es el polimorfismo de objetos, sino, el de funcional)</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Improving Tag-Clouds as Visual Information Retrieval Interfaces]]></title>
<link>http://sheilamendez.wordpress.com/?p=9</link>
<pubDate>Sun, 29 Jun 2008 12:38:12 +0000</pubDate>
<dc:creator>sheilamendez</dc:creator>
<guid>http://sheilamendez.wordpress.com/?p=9</guid>
<description><![CDATA[Este artículo describe una forma de agrupar palabras semánticamente en una nube de tags. Propone l]]></description>
<content:encoded><![CDATA[<p>Este artículo describe una forma de agrupar palabras semánticamente en una nube de tags. Propone la siguiente fórmula para calcular la similitud entre dos tags:</p>
<blockquote><p>Dadas dos etiquetas t1 y t2 cualesquiera la similitud semántica entre ambas será:</p>
<p style="text-align:center;">S ( t1,t2 ) = &#124; t1 ∩ t2 &#124; / &#124; t1 ∪ t2 &#124;</p>
</blockquote>
<p>Para este ejercicio, se han calculado el número de apariciones de t1 y t2 en Google. El resultado se puede probar en la siguiente URL:</p>
<p style="text-align:center;"><a title="TagCloud" href="http://156.35.98.82:8080/tagCloud/" target="_blank">http://156.35.98.82:8080/tagCloud/</a></p>
<p style="text-align:left;">En la aplicación, se pueden escribir una serie de tags (pueden contener espacios, por ejemplo "Fernando Alonso") separados por comas. El algoritmo realiza una serie de iteraciones sobre los términos. En cada una de ellas aplica la fórmula anteriormente descrita y saca la pareja de términos con una similitud semántica más cercana a la unidad. De esta forma, cuanto más parecido sea el número de documentos en los que aparezca la pareja de palabras y el número donde aparezca cada una por separado, más relacionadas semánticamente estarán. Cabe destacar que para calcular la unión (denominador), se ha restado el valor de la intersección, para no sumar así valores repetidos y dar un resultado más fiable.</p>
<p style="text-align:left;">Las conclusiones que se pueden extraer de su aplicación es que el algoritmo funciona en la mayor parte de los casos, pero se podría refinar mucho más. Por ejemplo, es muy importante el orden en el que se agrupan las parejas de palabras ya que la precisión de los resultados varía si agrupamos por la derecha o por la izquierda. Un refinamiento posible sería comprobar la similitud S entre el término que vamos a agrupar con los términos que forman los extremos del grupo, para situarlo en el extremo que más se asemeje a él.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Fuerza de Algoritmos Criptograficos]]></title>
<link>http://julianrdz.wordpress.com/?p=259</link>
<pubDate>Sun, 29 Jun 2008 00:08:37 +0000</pubDate>
<dc:creator>Julián Rodríguez</dc:creator>
<guid>http://julianrdz.wordpress.com/?p=259</guid>
<description><![CDATA[La fuerza de algoritmos criptográficos
Siempre deben diseñarse buenas sistemas de la criptografía]]></description>
<content:encoded><![CDATA[<h4>La fuerza de algoritmos criptográficos</h4>
<p>Siempre deben diseñarse buenas sistemas de la criptografía para que ellas sean muy difícil de romper. Es posible construir sistemas que no pueden romperse en práctica (aunque esto normalmente no puede demostrarse). Esto no aumenta esfuerzo de aplicación de sistema significativamente; sin embargo, algún cuidado y la especialización se requiere. No hay ninguna excusa para un diseñador del sistema dejar el sistema rompible. Debe hacerse cualquier mecanismo que puede usarse para engañar seguridad explícita, debe documentarse, y debe traerse en la atención de los usuarios final.</p>
<p>En teoría, cualquier método de la criptografía con una llave puede ser roto probando todas las posibles llaves en sucesión. Si la única opción es de probar todas las llaves, el tiempo de computación requerido aumenta exponencialmente con la longitud de la llave. Una llave de 32 bits toma 2<sup>32</sup> (aproximadamente 10<sup>9</sup>) pasos. Esto es algo que cualquiera puede hacer usando su computadora de casa. Un sistema con las llaves de 40 bits toma 2<sup>40</sup> pasos - este tipo de cómputo requiere algo como una semana (dependiendo de la eficacia del algoritmo) en una moderna computadora de la casa. Un sistema con las llaves de 56 bits (como DES) toma un esfuerzo sustancial (con un número grande de computadoras de la casa que usan esfuerzo distribuido, se ha mostrado para tomar simplemente unos meses), pero es fácilmente rompible con hardware especial. El costo del hardware especial es sustancial pero fácilmente al alcance de los delincuentes organizados, compañías mayores, y gobiernos. Las llaves con 64 bits son ahora probablemente rompibles por gobiernos mayores, y al alcance de los delincuentes organizados, compañías mayores, y menores gobiernos en pocos años. Las llaves con 80 bits parecen buenas durante unos años, y llaves con 128 bits permanecerán irrompibles probablemente por el futuro previsible. A veces se usan llaves aun más grandes.</p>
<p>Sin embargo, la longitud importante no es el único problema pertinente. Pueden romperse muchos cifres sin probar todas las posibles llaves. En general, es muy difícil de diseñar cifres que no podrían romperse usando otros métodos más eficazmente. Diseñando sus propios cifres puede ser divertido, pero no se recomienda para las aplicaciones reales a menos que usted es un verdadero experto y sabe lo que usted está haciendo exactamente.</p>
<p>Uno generalmente debe ser muy cauto de algoritmos inéditos o confidenciales. A menudo el diseñador no está entonces seguro de la seguridad del algoritmo, o su seguridad depende del secreto del algoritmo. Generalmente, ningún algoritmo que depende del secreto del algoritmo está seguro. Particularmente en software, cualquiera puede contratar a alguien para desmontar el algoritmo. La experiencia ha mostrado que la inmensa mayoría de los algoritmos confidenciales que se han vuelto después al conocimiento público ha sido lastimosamente débil en realidad. Vea los esquemas del encriptación incorporados usados por WordPerfect, Lotus 1-2-3, MS Excel, Symphony, Quattro Pro, Paradox, MS Word, y PKZIP.</p>
<p>Las longitudes de llaves usadas en criptografía de llave-público normalmente son más grandes que en cifres simétricos. Esto es causado por la extra estructura que está disponible. Allí el problema no está de suponer la llave correcta, pero derivando la llave confidencial emparejanda de la llave pública. En el caso de RSA, esto podría ser hecho factorizando un entero grande que tiene dos primeros factores grandes. En el caso de algún otro criptosistemaas es equivalente a computar el modulo del logaritmo discreto un entero grande (qué se cree que es aproximadamente comparable a la factorización cuando el moduli es un grande número primero). Hay las importantes criptosistemaas públicos basados en todavía otros problemas.</p>
<p>Para dar alguna idea de la complejidad para el criptosistemaa de RSA, un módulo de 256 bits se factoriza fácilmente en la casa, y las llaves de 512 bits pueden ser rotas por grupos de investigación de universidad dentro de unos meses. Las llaves con 768 bits son probablemente no afiance en el término largo. Las llaves con 1024 bits y más deben estar ahora seguras para a menos que se hacen mayores adelantos de la criptoanálisis contra RSA; las llaves de 2048 bits son consideradas por muchos para estar seguros durante décadas.</p>
<p>Debe darse énfasis a que la fuerza de un sistema de la criptografía es normalmente igual a su eslabón más débil. Ningún aspecto del plan del sistema debe pasarse por alto, de los algoritmos selectos a la distribución importante y políticas del uso. <a name="cryptanalysis"></a></p>
<h4>Criptoanálisis y ataques de criptosistemas</h4>
<p>Criptoanálisis es el arte de descifrar comunicaciones del sin saber las llaves apropiadas. Hay muchas técnicas del criptoanálisis. Algunas de las más importantes para un creador del sistema se describen debajo.</p>
<ul>
<li><strong>Sólo-ciphertext ataque</strong>: Ésta es la situación donde el asaltador no sabe nada sobre los volúmenes del mensaje, y sólo debe trabajar del ciphertext. En práctica es bastante a menudo posible hacer suposiciones sobre el plaintext, tantos tipos de mensajes han arreglado formato de los títulos. Incluso las cartas ordinarias y documentos empiezan de una manera muy predecible. Por ejemplo, muchos ataques clásicos usan análisis de frecuencia del ciphertext, sin embargo, esto no trabaja bien contra los cifres modernos. Los criptosistemaas modernos no son débiles contra sólo-ciphertext ataques, aunque a veces ellos son considerados con la asunción agregada que el mensaje contiene algún prejuicio estadístico.</li>
<li><strong>Conocido-plaintext ataque</strong>: el asaltador sabe o puede suponer el plaintext para algunas partes del ciphertext. La tarea es de decriptar el resto del ciphertext usando esta información. Esto puede ser cumplido determinando la llave usada al encriptar los datos, o vía algún atajo. Uno bien conocido ataque moderno de conocido-plaintext esta el criptoanálisis lineal contra los cifres del bloque.</li>
<li><strong>Escogido-plaintext ataque</strong>: el asaltador puede tener cualquier texto que le gusta el encriptado con la llave desconocida. La tarea es determinar la llave usada para el encription. Un bueno ejemplo de este ataque es el criptoanálisis del diferencial que puede aplicarse contra los cifres del bloque (y en algunos casos también contra las funciones de hash).Algunos criptosistemaas, particularmente RSA, son vulnerables a los ataques escogido-plaintext. Cuando se usan tales algoritmos, el cuidado debe tenerse para diseñar la aplicación (o protocolo) para que un asaltador nunca pueda haber encriptar el escogido-plaintext.</li>
</ul>
<p><a href="http://www.minelinks.com/supercode/index_2_es.html" target="_blank">Fuente</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Firmas Digitales]]></title>
<link>http://julianrdz.wordpress.com/?p=256</link>
<pubDate>Sun, 29 Jun 2008 00:04:52 +0000</pubDate>
<dc:creator>Julián Rodríguez</dc:creator>
<guid>http://julianrdz.wordpress.com/?p=256</guid>
<description><![CDATA[Algunos cifres públicos pueden usar algoritmos para generar firmas digitales. Una firma digital es ]]></description>
<content:encoded><![CDATA[<p>Algunos cifres públicos pueden usar algoritmos para generar firmas digitales. Una firma digital es una cantidad pequeña de datos que se crearon usando alguna llave confidencial, y hay una llave pública que puede usarse para verificar que la firma que usó la llave privada correspondiente realmente se generó. El algoritmo generaba la firma debe ser tal que sin saber la llave confidencial no es posible crear una firma que verificaría como válida.</p>
<p>Se usan firmas digitales para verificar que un mensaje realmente viene del remitente exigido (asumiendo a sólo el remitente sabe la llave confidencial que corresponde al su llave pública). Ellos también pueden ser usados por tiempo-estampar los documentos: persona de confianza firma el documento y tiempo-estampar con su llave confidencial, así testificando que el documento existió en el momento declarado.</p>
<p>También pueden usarse firmas digitales para testificar (o certifica) que una llave pública pertenece a una persona particular. Esto es hecho firmando la combinación de la llave y la información sobre su dueño por una llave confidencial. La firma digital por una tercera persona (dueño de la llave confidencial), se llaman a menudo la llave pública y información sobre el dueño de la llave pública los certificados.</p>
<p>La razón por confiar en la llave de tercera persona puede ser que de nuevo fue firmada por una llave confidencial. Eventualmente alguna llave debe ser una raíz de la jerarquía de confianza (es decir, en él no se confía porque fue firmada por alguien, pero porque usted cree a prior que en esta llave puede confiarse). En una infraestructura de llave centralizada hay menos raíces en la red de confianza (ej. en agencias gubernamentales se llaman tales raíces las autoridades de la certificación). En una infraestructura distribuida allí no se necesita universalmente aceptados raíces, y cada persona puede tener diferentes raíces de confianza (tal la propia llave de la persona y cualquier llave firmada por él). Éste es el tejido de concepto de confianza usado en PGP.</p>
<p>Una firma digital de un documento arbitrario es creada típicamente computando un compendio del mensaje del documento, y encadenándolo con información sobre el firmante, una tiempo-estampa, etc. El hilo resultante es entonces encriptado usando la llave privada del firmante que usa un algoritmo conveniente. El resultante encriptado bloque de bits es la firma. Es a menudo distribuido junto con la información sobre la llave pública que fue usada para firmarlo. Para verificar una firma, el destinatario determina primero si confía que la llave pertenece a la persona que él se supone que pertenece a (usando la red de confianza o el previo conocimiento), y entonces el decripta la firma usando la llave pública de la persona. Si la firma decripta propiamente y la información empareja el mensaje (compendio del mensaje apropiado etc.), la firma se acepta como válido.</p>
<p>Varios métodos por hacer y verificar firmas digitales están libremente disponible. El algoritmo ampliamente conocido es RSA.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Solucionario [ALGORITMOS]]]></title>
<link>http://blogacademicoccat.wordpress.com/?p=39</link>
<pubDate>Sat, 28 Jun 2008 07:37:33 +0000</pubDate>
<dc:creator>ronaldpc</dc:creator>
<guid>http://blogacademicoccat.wordpress.com/?p=39</guid>
<description><![CDATA[Aqui estan algunas soluciones de los problemas de la asesoria del dia viernes, la hoja de problemas ]]></description>
<content:encoded><![CDATA[<p>Aqui estan algunas soluciones de los problemas de la asesoria del dia viernes, la hoja de problemas esta en la fotocopiadora del CCAT</p>
<p>Solo hagan click en el link:</p>
<ul>
<li><a href="http://blogacademicoccat.files.wordpress.com/2008/06/solucionario-asesoria.doc" target="_blank">solucionario-asesoria [word]</a></li>
<li><span style="font-size:12pt;"><a href="http://www.usaupload.net/d/a6o7cfen7tu" target="_blank"><span lang="EN-US">solucionario - asesoria [rar en usaupload]</span></a></span></li>
</ul>
<p> </p>
<p><span>/***************************************************************************/</span></p>
<p><span>Se suponia que la clave era SOLO para los que se quedaron en la asesoria, pero entiendo que algunos no pudieron quedarse por otras razones (DIFERENTES a juegos o fiestas).</span></p>
<p><span>Hasta hoy, los que se quedaron a la sesoria ya habran rebizado el solucionario [y corregido algun pequeño error encontrado (supongo)]; asi que dejare la clave para los que "NO SE PUDIERON QUEDAR" :</span></p>
<p><span>Clave: fiis</span></p>
<p><span>PD: pense que cualquiera que descargara el archivo por lo menos intentaria una vez poniendo como clave a la facultad no?</span></p>
<p><span>/***************************************************************************/</span></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Saludos!!]]></title>
<link>http://diariomatematico.wordpress.com/?p=3</link>
<pubDate>Sat, 28 Jun 2008 00:55:27 +0000</pubDate>
<dc:creator>diariomatematico</dc:creator>
<guid>http://diariomatematico.wordpress.com/?p=3</guid>
<description><![CDATA[Hola, pues este es mi primer post mediante el cual espero crear muchisimos mas, dejen les cuento est]]></description>
<content:encoded><![CDATA[<p>Hola, pues este es mi primer post mediante el cual espero crear muchisimos mas, dejen les cuento estoy por empezar a estudiar mi carrera de matematico y me gusto la idea de compartir todo lo que aprenda con el publico, me gusta mucho tambien la programacion y no esperare en publicar cosas interesantes sobre esto, algoritmos,  tambien publicare algunos software que nos ayuden en el trabajo de computacion y matematico, usos etc.</p>
<p>Saludos!!</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Cuartas prácticas [Algoritmos]]]></title>
<link>http://blogacademicoccat.wordpress.com/?p=16</link>
<pubDate>Tue, 24 Jun 2008 05:01:42 +0000</pubDate>
<dc:creator>ronaldpc</dc:creator>
<guid>http://blogacademicoccat.wordpress.com/?p=16</guid>
<description><![CDATA[Links para descargar cuartas practicas del curso (desde el 2000-III hasta el 2007-II) :
descargar aq]]></description>
<content:encoded><![CDATA[<p>Links para descargar cuartas practicas del curso (desde el 2000-III hasta el 2007-II) :</p>
<p><a href="http://rapidshare.com/files/124613087/cuartasdealgoritmos.pdf.html" target="_blank">descargar aqui [rapidshare]</a></p>
<p><a href="http://www.usaupload.net/d/kh1x2u5dcrq" target="_blank">descargar aqui [usaupload]</a></p>
<p> </p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Lenguajes Algoritmicos]]></title>
<link>http://akgm92.wordpress.com/?p=7</link>
<pubDate>Wed, 18 Jun 2008 03:21:08 +0000</pubDate>
<dc:creator>akgm92</dc:creator>
<guid>http://akgm92.wordpress.com/?p=7</guid>
<description><![CDATA[Hasta este momento todo lo que hemos visto es prácticamente  teoría, llegó la hora de plasmar nue]]></description>
<content:encoded><![CDATA[<p>Hasta este momento todo lo que hemos visto es prácticamente  teoría, llegó la hora de plasmar nuestros algoritmos de alguna forma que sean claros para cualquier personaque necesite leerlos. Muchas veces los infotmáticos se saltan este paso y llegan directamente a la implementacion en algún lenguaje de programación; para ello se necesita tener mucha practica y memoria fotografica, ya que muchas veces se omiten pasos que a la hora de implementarlos en algún lenguaje producen que el programa no llege a la solucion que habiamos planteado como óptima.</p>
<p>De esta manera se han creado lenguajes que puedan representar nuestros algoritmos y que de esa manera se construya una solucion correcta sin omitir algunos pasos. Imaginense que si se desea crear un algoritmo para que un robot solde una pieza en una ensambladora de automóviles y la persona encargada de implementar el algoritmo olvida, por muy obvio que sea, comprobar si las piezas están en su lugar, obviamente podria terminar en tragedia.</p>
<p><!--more--></p>
<p>Asi que la gente que se encarga de los estándares en cuanto a lo que se refiere a las tecnologías de la informacion vio la necesidad de representar algoritmos sin tener que referirse a un lenguaje de programación en específico.</p>
<p><em>Graficos</em></p>
<p>Este tipo de lenguaje tiende a representar a los algoritmos de una forma grafica. De esta manera se hace mas facil la representación de cada uno de los procesos que debe llevar a cabo una computadora para resolver problema.</p>
<p><em>Diagramas de Flujo</em></p>
<p>Sin lugar a duda el lenguaje algorítmico gráfico más común son los Diagramas de Flujo. Éstos pueden definirse como esquemas usados para representar gráficamente un proceso. Pero no sólo se utilizan para representar procesos informaticos, tambien en otras áreas como la economia, la administracion, procesos industriales, etc.</p>
<p>A continuacion explicaremos los símbolos más comunes que se utilizan en la informática para representar diagramas de flujo.</p>
<p><img src="http://www.carlospes.com/curso_de_algoritmos/imagenes/fig_03_03_simbolos_ordinogramas.gif" alt="" width="466" height="417" /></p>
<p>Existen otros simbolos más especificos para otro tipo de procesos, pero en su mayoria ya no se usan porque representaban procesos en dispositivos que hoy en día son obsoletos, como grabar en cinta magnética o leer una tarjeta perforada.</p>
<p><em>No graficos</em></p>
<p>Los lenguajes algoritmicos no graficos generalmente son utilizados para representar procesos informaticos ya mas especificos. Dicho de otra forma, para representar la codificacion de un programa sin la necesidad de conocer un lenguaje de programacion especifico.</p>
<p><em>Pseudocodigo</em></p>
<p>Sin lugar a duda, el pseudocodigo es el lenguaje algoritmico no grafico mas utilizado hasta la fecha. Cualquier persona que se diga que tiene experiencia como programador, alguna vez se ha visto en la necesidad de representar sus programas en pseudocodigo.</p>
<p>El pseudocodigo significa que vas a convertir tu algoritmo en un lenguaje escrito que se entienda sin utilizar la sintaxis y la gramatica de un lenguaje de programacion en especifico. Existen diferencias entre las normas de como debe realizarse correctamente un pseudocodigo debido a que, como no es necesariamente un lenguaje de programacion, debe adaprtarse a las necesidades del algoritmo en si; por eso varios autores definen su propia sintaxis y gramatica de forma diferente.</p>
<p><em>Datos</em></p>
<p>En un pseudocodigo los datos se dan por creados desde el momento en el que son utilizados, asi que no es necesario avisar que variables vamos a ocupar a lo largo de nuestro algoritmo, ni que tipo de datos es el que se va a almacenar dentro de él; pero, una ves que se a utilizado una variable para almacenar cierto tipo de dato debe seguir siendo usada para este tipo. Por ejemplo, si al inicio de nuestro pseudocodigo declaramos que vamos a usar una variable que llamaremos "A" y le asignamos un valor numérico entero como 8, la variable "A" en el resto del algoritmo deberá solamente poder alamacenar datos numéricos enteros.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Asesoria de Algoritmos [4ta Practica]]]></title>
<link>http://blogacademicoccat.wordpress.com/?p=9</link>
<pubDate>Tue, 17 Jun 2008 02:16:23 +0000</pubDate>
<dc:creator>ronaldpc</dc:creator>
<guid>http://blogacademicoccat.wordpress.com/?p=9</guid>
<description><![CDATA[Este es un comunicado a todos los estudiantes que estan llevando el curso de algoritmos, para decirl]]></description>
<content:encoded><![CDATA[<p>Este es un comunicado a todos los estudiantes que estan llevando el curso de algoritmos, para decirles que el dia viernes 27 de este mes se realizara la asesoria para la cuarta practica, en el auditorio.</p>
<p>horario: 6:00p.m-8:00p.m</p>
<p><strong>Asesores:</strong></p>
<ul>
<li>Narcizo Susanibar, Miguel</li>
<li>Pecho Caycho,Ronald</li>
<li>Sinche Castillo, Boris</li>
<li>Villanueva Quinteros, Lenin</li>
<li>Ynocente Castro, Mario</li>
</ul>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Terminologia empleada en algoritmos]]></title>
<link>http://akgm92.wordpress.com/?p=3</link>
<pubDate>Tue, 17 Jun 2008 01:11:28 +0000</pubDate>
<dc:creator>akgm92</dc:creator>
<guid>http://akgm92.wordpress.com/?p=3</guid>
<description><![CDATA[La mayoria de los problemas informaticos tienen la tendencia de ocupar la misma terminologia. De est]]></description>
<content:encoded><![CDATA[<p>La mayoria de los problemas informaticos tienen la tendencia de ocupar la misma terminologia. De esta forma podemos enumerar cronologicamente lo que sucede cuando queramos resolver un problema atraves de recursos informaticos.</p>
<p><em>Identificacion de problemas</em></p>
<p>Generalmente se debe identificar cual es el problema que se pretende resolver atraves de medios informaticos y con que se pretende darle solucion. Los informaticos llaman a este paso analizis.</p>
<p><!--more--></p>
<ul>
<li><em>Datos numericos</em>. Es todo tipo de informacion que se puede expresar por medio de numeros(enteros ejemplos: 8,-3,23, etc), y   (Numeros Reales o de puntos flotantes 1.5, -3.83,etc.)</li>
<li><em>Datos alfanumericos</em>. Son un conjunto de caracteres que representan algun tipo de dato. Estan compuestos por todo el conjunto de caracteres alfabeticos, numericos, y algunos caracteres especiales.</li>
<li><em>Datos Logicos</em>. Son los que podemos representar mediante dos estados falso y verdadero. Tambien se les conoce como datos boleanos.</li>
<li><em>Constantes</em>. Son datos que dentro del problema en si nunca cambiaran por ejemplo, si el problema es calcular el area de un circulo,? = 3.141592 sera una constante para cualquier caso.</li>
<li><em>Variables</em>. Son datos que cambian dependiendo de las condiciones del problema que se decea resolver. Tomando el mismo ejemplo del calculo del area de un circulo, la variable podria ser el radio ya que, dependiendo del tamaño del circulo cambiara ese valor.</li>
<li><em>Expresiones Logicas</em>. Son un conjunto de condiciones que solo pueden tomar  dos estados logicos: falso y verdadero. Estan compuestas por variables constantes operadores logicos y operadores relacionales. Los operadores logiocos son: NOT(no), AND(y) y OR (o). Los relacionales pueden ser: &#60;,&#62;, &#60;=, =&#60;, &#60;&#62;. Dependiendo del elnguaje de programacion que se desee utilizar para resolver el problema puede o no cambiar la forma en que se presentan estos operadores. Por ejemplo, el lenguaje de programacion basados en ANSI como C,C++ y JAVA la negacion se representa por el simobolo de admiracion (!).</li>
<li><em>Expresiones Aritmeticas.</em> Son expresiones que se usan para el calculo de valores aritmeticos. Son muy utilez y faciles de entender ya que se representan de forma muy parecida a las expresiones matematicas. Los operadores aritmeticos son los siguientes: +,-,*,/,^,(,) , etc. Al igual que las expresiones logicas, dependiendo del lenguaje de programacion es la forma en como se representa alguno de los operadores aritmeticos y, en ocasiones, hasta la jerarquia que tienen unos sobre otros.</li>
</ul>
<p><em>Diseño de una Solucion</em></p>
<p>Una ves definido el problema y con que se quieres o se puede resolver, se planea la forma de hacerlo, creando un algoritmo de solucion. Usualmente a este proceso se le llama diseño.</p>
<p><em>Aplicando la Solucion</em></p>
<p>Cuando ya se definio como se va a resolver el problema, todo lo que implica su solucion atraves de diferentes mecanismos, es hora de aplicarlo. Los informaticos le llaman a este proceso implementacion.</p>
<p><em>Supervisar la Solucion</em></p>
<p>Seria excelente que al aplicar una solucion a un problema, este resulte correcta al primer intento. Desafortunadamente no es asi, muchas veces el hecho de aplicar una solucion nos lleva a mas problemas que no estaban preevistos. En la informatica ay que ser muy precisos en los casos que se presentan como problemas y tratar de prever  cualquier tipo de inconveniente o caso especial que se pueda presentar, para ello se lleva acabo un proceso llamado prueba o mantenimiento. Es aqui donde el ciclo se puede llegar a repetir tratando de solucionar los nuevos problemas que intervienen en la solucion nos puede llevar de nuevo al analisis y volver a comenzar el ciclo. Este se rompera caundo el problema sea resuelto satisfactoriamente y todo los casos particulares esten cubiertos.</p>
<p>Dicho de esta forma, podemos ver el proceso de solucion como un ciclo de vida, por eso muchos autores manejan este proceso como el ciclo de vida del software.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Quais RSS eu assino no meu Reader?]]></title>
<link>http://prafalardecoisas.wordpress.com/?p=107</link>
<pubDate>Mon, 16 Jun 2008 15:15:59 +0000</pubDate>
<dc:creator>Manoel Galdino</dc:creator>
<guid>http://prafalardecoisas.wordpress.com/?p=107</guid>
<description><![CDATA[
Eu assino muitos blogs via RSS. O Google tem uma ferramente, Google Reader, que permite que você a]]></description>
<content:encoded><![CDATA[<p><a href="http://prafalardecoisas.files.wordpress.com/2008/06/reader300px-quickrss.gif"><img class="alignnone size-medium wp-image-108" src="http://prafalardecoisas.wordpress.com/files/2008/06/reader300px-quickrss.gif?w=300" alt="" width="300" height="208" /></a></p>
<p>Eu assino muitos blogs via <a href="http://pt.wikipedia.org/wiki/RSS">RSS</a>. O Google tem uma ferramente, Google Reader, que permite que você assine os blogs/sites de que você gosta, para ficar atualizado sempre que atualizarem o blog/site. Funciona da seuinte maneira: você clica em incrição, digita o endereço, e pronto: sempre que o Blog for atualizado, você recebe a atualização na página do google reader. Assim, não precisa ir de blog em blog ver se tem algo útil.</p>
<p>Além disso, o google reader tem uma ferramente típica da web 2.0. Ele compara pessoas com gostos parecidos com o seu (que assinam os mesmos blogs) e procura padrões. Assim, se muita gente que assina um Blog do corinthians também assina um blog de futebol paulista, ele recomenda para você o blogdo futebol paulista. Obviamente tem um algoritmo para isso.</p>
<p>Porém, esse tipo de ferramente, enquanto útil, sempre tem um problema porque o computador (algoritmo) é meio burro. Então, seria melhor se pudéssemos colocar tags nos blogs que assinamos, de forma que aumentasse a eficiência dessa ferramenta.</p>
<p>Enquanto isso não acontece, decidi retornar ao modo antigo e inquirir as pessoas sobre que tipo de blogs elas assinam. Ok, não é exatamente o modo antigo, pré- web, já que quem vem ao meu blog deve compartilhar algum interesse comigo. De todo modo, peço que deixem no comentário, com base no que viram no meu blog, quais RSS vocês assinam e que gostariam de compartilhar comigo.</p>
<p>Abaixo todo os blogs que assino:</p>
<p><!--more--></p>
<p><a href="http://www.againstmonopoly.org/">http://www.againstmonopoly.org/</a></p>
<p><a href="http://www.badscience.net/">http://www.badscience.net/</a></p>
<p><a href="http://ba.stat.cmu.edu/forthcoming.php">http://ba.stat.cmu.edu/forthcoming.php</a></p>
<p><a href="http://ba.stat.cmu.edu/forthcoming.php">http://ba.stat.cmu.edu/forthcoming.php</a></p>
<p><a href="http://cienciaemdia.folha.blog.uol.com.br/">http://cienciaemdia.folha.blog.uol.com.br/</a></p>
<p><a href="http://anand.typepad.com/datawocky/">http://anand.typepad.com/datawocky/</a></p>
<p><a href="http://flowingdata.com/">http://flowingdata.com/</a></p>
<p><a href="http://marcelocoelho.folha.blog.uol.com.br/">http://marcelocoelho.folha.blog.uol.com.br/</a></p>
<p><a href="http://www.monbiot.com/">http://www.monbiot.com/</a></p>
<p><a href="http://outrapolitica.wordpress.com/">http://outrapolitica.wordpress.com/</a></p>
<p><a href="http://sequenciasparisienses.blogspot.com/">http://sequenciasparisienses.blogspot.com/</a></p>
<p><a href="http://www.iq.harvard.edu/blog/sss/">http://www.iq.harvard.edu/blog/sss/</a></p>
<p><a href="http://socialscienceplusplus.blogspot.com/">http://socialscienceplusplus.blogspot.com/</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Gabarito da prova de recuperação de algoritmos T-20081]]></title>
<link>http://leitejr.wordpress.com/?p=337</link>
<pubDate>Mon, 09 Jun 2008 17:49:40 +0000</pubDate>
<dc:creator>leitejr</dc:creator>
<guid>http://leitejr.wordpress.com/?p=337</guid>
<description><![CDATA[algoritmo &#8220;Q1ProvaRecuperacao&#8221;
var
n1,n2:real
inicio
// Seção de Comandos
leia(n1,n2)
]]></description>
<content:encoded><![CDATA[<p>algoritmo "Q1ProvaRecuperacao"</p>
<p>var<br />
n1,n2:real<br />
inicio<br />
// Seção de Comandos</p>
<p>leia(n1,n2)<br />
escreval("a soma é ", n1+n2)</p>
<p>se (n2&#60;&#62;0) entao<br />
escreval("a divisao é ", n1/n2)<br />
fimse</p>
<p>escreval("o quadrado de n1 é ", n1*n1)<br />
escreval("o quadrado de n2 é ", n2*n2)</p>
<p>fimalgoritmo</p>
<p>---------------------------------------------------</p>
<p>algoritmo "q2provarecuperacao"</p>
<p>var<br />
n:inteiro<br />
inicio</p>
<p>leia(n)</p>
<p>se (n % 3 = ) entao<br />
escreval ("divisivel por 3")<br />
fimse</p>
<p>se (n % 17 = ) entao<br />
escreval ("divisivel por 17")<br />
fimse</p>
<p>fimalgoritmo</p>
<p>---------------------------</p>
<p>algoritmo "q3provaRecuperacao"</p>
<p>var<br />
i, maior, menor , n :inteiro<br />
inicio</p>
<p>leia(n)<br />
maior&#60;-n<br />
menor&#60;-n</p>
<p>para i de 2 ate 100 faca<br />
leia(n)<br />
se (n &#62; maior) entao<br />
maior&#60;-n<br />
fimse<br />
se (n &#60; menor) entao<br />
menor&#60;-n<br />
fimse<br />
fimpara<br />
escreval("o menor é ", menor)<br />
escreval("o maior é ", maior)</p>
<p>fimalgoritmo</p>
<p>----------------------</p>
<p>algoritmo "q4provaRecuperacao"</p>
<p>var<br />
nomes: vetor [1..15] de literal<br />
i: inteiro<br />
busca:literal<br />
inicio<br />
//cadastro no vetor<br />
para i de 1 ate 15 faca<br />
leia(nomes[i])<br />
fimpara</p>
<p>leia(busca)</p>
<p>para i de 1 ate 15 faca<br />
se (busca=nomes[i]) entao<br />
escreval("nome encontrado")</p>
<p>fimse</p>
<p>fimpara</p>
<p>fimalgoritmo</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Dicas: pesquisa binária e pesquisa sequêncial]]></title>
<link>http://maleiria.wordpress.com/?p=20</link>
<pubDate>Thu, 05 Jun 2008 11:42:24 +0000</pubDate>
<dc:creator>maleiria</dc:creator>
<guid>http://maleiria.wordpress.com/?p=20</guid>
<description><![CDATA[
/**
 * Pesquisa um numero x num array ordenado.É
 * muito mais eficiente do que a pesquisa sequenc]]></description>
<content:encoded><![CDATA[<pre>
/**
 * Pesquisa um numero x num array ordenado.É
 * muito mais eficiente do que a pesquisa sequencial
 * mas requer que os elementos do array estejam ordenados.
 * Ele repetidamente divide a sequência em dois e em cada
 * vez restringe a pesquisa à metade que contém o elemento.
 *
 * Este algoritmo corre no tempo O(log(n)) o que quer dizer que
 * em média, o tempo de execução é proporcional ao logaritmo
 * do número de elementos no array.
 *
 *
 * @return o indice do numero x ou -1 se não encontrou
 */
public int binarySearch(int[] a, int x){

	int low = 0;
	int high = a.length;

	while(low &#60; high){
		int i = (low + high) / 2;
		if(a[i] == x){
			return i;
		}else if(a[i] &#60; x){
			low = i + 1;
		}else{
			high = i;
		}
	}
	return -1;
}
/**
 * Pesquisa sequencial (ou pesquisa linear) é o algoritmo
 * de pesquisa mais simples mas também é o menos eficiente.
 * Ele examina cada elemento sequencialmente começando
 * pelo primeiro elemento até chegar ao fim do array(se
 * eu estiver à procura de alguém num combóio, utilizo a
 * pesquisa sequencial)
 *
 * Este algoritmo corre no tempo O(n) o que quer dizer que
 * em média, o tempo de execução é proporcional ao número
 * de elementos no array.
 *
 * @return o indice do elemento a pesquisar ou 0 se não
 * o encontrar
 */
public int sequentialSearch(int[] a, int x){
	for(int i = 0, n = a.length; i &#60; n; i++){
		if(a[i] == x){
			return i;
		}
	}
	return -1;
}
/**
 * O algoritmo de binarysearch pode encontrar elementos rapidamente
 * num array que já está ordenado o que sugere que devamos ter os
 * elementos ordenados no array.No entanto, inserir novos elementos
 * num array ordenado é difícil pois temos de transladar os elementos
 * maiores para arranjar espaço para o novo elemento.Podemos faze-lo
 * assim:
 * @param a o array
 * @param n o numero de elementos que já estão ordenados no array
 * @param x o elemento a ser inserido no meio dos elementos
 */
void insert(int[] a, int n, int x){
  /**PreCondicao: a[0] &#60;= ... &#60;= a[n-1], e n &#60; a.length */
  /**PosCondicao: a[0] &#60;= ... &#60;= a[n], e x está entre eles */
  int i = 0;
  while(i &#60; n &#38;&#38; a[i] &#60;= x){
  	i++;
  }
  System.arraycopy(a, i, a, i+1, n-i);
  a[i] = x;
}
</pre>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Trios para Algoritmos : turma 2008.1]]></title>
<link>http://leitejr.wordpress.com/?p=310</link>
<pubDate>Wed, 04 Jun 2008 15:14:44 +0000</pubDate>
<dc:creator>leitejr</dc:creator>
<guid>http://leitejr.wordpress.com/?p=310</guid>
<description><![CDATA[Eis os trios para o trabalho de pascal:
Marcos Vinicius - :Luciene - Glaide
Carina - Josivane - Brun]]></description>
<content:encoded><![CDATA[<p>Eis os trios para o trabalho de pascal:</p>
<p>Marcos Vinicius - :Luciene - Glaide</p>
<p>Carina - Josivane - Bruna</p>
<p>Alessa - Roseane - Luciana Souza</p>
<p>Monira - Patrícia - Arisvaldo</p>
<p>Jorge - Diego - Josué</p>
<p>Aline - Jilcimar - Oliviane</p>
<p>Carla - Juliana - Silvana</p>
<p>Alana - Diego Miranda - Micilene</p>
<p>Wilma - Rodolfo - Cláudia</p>
<p>Robson - Luis Antonio - Ana Cristina</p>
<p>Thais - Camila - Cristiane</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Listão de exercícios de Pascal ]]></title>
<link>http://leitejr.wordpress.com/?p=298</link>
<pubDate>Sun, 01 Jun 2008 21:33:30 +0000</pubDate>
<dc:creator>leitejr</dc:creator>
<guid>http://leitejr.wordpress.com/?p=298</guid>
<description><![CDATA[A lista de exercícios anexada será feita em trios. Cada etapa deverá ser entregue nos seguintes p]]></description>
<content:encoded><![CDATA[<p>A lista de exercícios anexada será feita em trios. Cada etapa deverá ser entregue nos seguintes prazos:</p>
<p>Parte 1 - Estruturas de Decisão: 19/06 (25 exercícios)</p>
<p>Parte 2 - Estruturas de repetição: 08/07 (29 exercícios)</p>
<p>Parte 3 - Vetores : 17/07 (15 exercícios)<br />
-----------------------------&#62; Não haverá adiamento nos prazos</p>
<p><strong>Dia 17/07 será realizada um avaliação final baseada nesses exercícios</strong></p>
<p>Os trios serão definidos na próxima aula.</p>
<p>Arquivo da lista: <a href="http://leitejr.files.wordpress.com/2008/06/listao-pascal.pdf">listao-pascal</a></p>
]]></content:encoded>
</item>

</channel>
</rss>
