<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Algoritmia básica (AB) &#187; cosas de clase</title>
	<atom:link href="http://webdiis.unizar.es/asignaturas/AB/?cat=24&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://webdiis.unizar.es/asignaturas/AB</link>
	<description>El reto de diseñar algoritmos eficientes para resolver problemas puede resultar apasionante</description>
	<lastBuildDate>Thu, 10 Feb 2022 08:44:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>Programación dinámica: algoritmos de abajo arriba iterativos versus de arriba abajo con memorialización</title>
		<link>https://webdiis.unizar.es/asignaturas/AB/?p=2598</link>
		<comments>https://webdiis.unizar.es/asignaturas/AB/?p=2598#comments</comments>
		<pubDate>Thu, 25 Mar 2021 11:57:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[cosas de clase]]></category>
		<category><![CDATA[programación dinámica]]></category>

		<guid isPermaLink="false">http://webdiis.unizar.es/asignaturas/AB/?p=2598</guid>
		<description><![CDATA[&#160; Toda solución de programación dinámica evita usar una solución top-down recursiva que directamente traduzca a un algoritmo la ecuación recurrente correspondiente al problema. Esto es así porque, normalmente, el coste en tiempo de esa solución es extremadamente alto pues resuelve muchas veces los mismos subproblemas. Para evitar resolver muchas veces los mismos subproblemas, un algoritmo de [...]]]></description>
			<content:encoded><![CDATA[<p id="yui_3_17_2_1_1616671453949_944">&nbsp;</p>
<p>Toda solución de programación dinámica <strong id="yui_3_17_2_1_1616671453949_6185">evita usar una </strong><strong id="yui_3_17_2_1_1616671453949_6108">solución </strong><strong id="yui_3_17_2_1_1616671453949_1071"><em id="yui_3_17_2_1_1616671453949_1043">top-down</em> recursiva</strong> que directamente traduzca a un algoritmo la ecuación recurrente correspondiente al problema. Esto es así porque, normalmente, el coste en tiempo de esa solución es extremadamente alto pues <strong id="yui_3_17_2_1_1616671453949_3191">resuelve muchas veces los mismos subproblemas</strong>.</p>
<p id="yui_3_17_2_1_1616671453949_944">Para evitar resolver muchas veces los mismos subproblemas, un algoritmo de programación dinámica utiliza siempre una <strong id="yui_3_17_2_1_1616671453949_3331">tabla auxiliar</strong>, en la que se almacenan las <strong id="yui_3_17_2_1_1616671453949_3373">soluciones de los subproblemas</strong> conforme se van resolviendo.</p>
<p id="yui_3_17_2_1_1616671453949_944">Dicho esto, hay <strong id="yui_3_17_2_1_1616671453949_33033">dos formas distintas de implementar la solución de programación dinámica</strong>:</p>
<ul id="yui_3_17_2_1_1616671453949_4459">
<li id="yui_3_17_2_1_1616671453949_4458"><strong id="yui_3_17_2_1_1616671453949_6035">Solución de abajo arriba (<em id="yui_3_17_2_1_1616671453949_6282">bottom-up)</em> iterativa</strong>, en la que se van resolviendo <strong id="yui_3_17_2_1_1616671453949_11824">todos los subproblemas</strong> y <strong id="yui_3_17_2_1_1616671453949_45775">rellenando la tabla en un cierto orden, iterativamente</strong>, en primer lugar resolviendo los casos base de la recursión y después el resto de los casos aplicando la ecuación recurrente &#8220;ordenadamente&#8221;, de manera que cuando se necesiten las soluciones de ciertos subproblemas (en cierto sentido, &#8220;más pequeños&#8221;) para resolver otros, éstas hayan sido resueltas y almacenadas en la tabla con anterioridad en el(los) bucle(s) correspondiente(s) del algoritmo. Ejemplos de estas soluciones son las de los problemas de la mochila 0-1, el camino de coste mínimo en un grafo multietapa o la multiplicación de una secuencia de matrices, vistas ya en clase.</li>
<li id="yui_3_17_2_1_1616671453949_4458"><strong id="yui_3_17_2_1_1616671453949_20826">Solución (recursiva) de arriba abajo (<em id="yui_3_17_2_1_1616671453949_20946">top-down</em>) con memorialización (<em id="yui_3_17_2_1_1616671453949_21052">memoization</em>)</strong>, en la que se aplica directamente la ecuación recurrente, como en la solución <em id="yui_3_17_2_1_1616671453949_24300">top-down</em> recursiva (mencionada antes y descartada por muy ineficiente), pero <strong id="yui_3_17_2_1_1616671453949_45974">cada vez que se resuelve un subproblema, se almacena su solución en la tabla auxiliar para evitar volver a resolverlo de nuevo más adelante</strong>. De esta forma, lo primero que hace el algoritmo es averiguar si el subproblema ha sido ya resuelto consultando la tabla, y sólo si no se ha resuelto todavía, se aplica la ecuación recurrente para resolverlo (de forma recursiva). Un ejemplo de este tipo de solución es la del problema del viajante de comercio, vista ya en clase.</li>
</ul>
<p>El <strong id="yui_3_17_2_1_1616671453949_46163">coste asintótico</strong> de ambos métodos suele ser el mismo, salvo en algunos casos (poco frecuentes) en los que la solución de arriba abajo no necesita resolver todos los subproblemas de la tabla. En general, la solución de abajo arriba ofrece mejores resultados prácticos al tener constantes multiplicativas más pequeñas, pues se evita el sobrecoste provocado por las llamadas recursivas. Por eso recomendamos, siempre que sea posible, plantear una solución de abajo arriba iterativa.</p>
<p id="yui_3_17_2_1_1616671453949_944"><strong id="yui_3_17_2_1_1616671453949_52858">Lectura adicional (acceso restringido):</strong> <a id="yui_3_17_2_1_1616671453949_56748" href="http://webdiis.unizar.es/asignaturas/AB/restringido/rod_cutting_Cormen_et_al.pdf">ejemplo del recorte óptimo de varillas y sus dos soluciones de programación dinámica</a> (arriba abajo con memorialización versus abajo arriba iterativa), del libro [CLRS09].</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://webdiis.unizar.es/asignaturas/AB/?feed=rss2&#038;p=2598</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Material adicional de divide y vencerás</title>
		<link>https://webdiis.unizar.es/asignaturas/AB/?p=2490</link>
		<comments>https://webdiis.unizar.es/asignaturas/AB/?p=2490#comments</comments>
		<pubDate>Tue, 03 Mar 2020 11:31:18 +0000</pubDate>
		<dc:creator>Javier Campos</dc:creator>
				<category><![CDATA[cosas de clase]]></category>
		<category><![CDATA[divide y vencerás]]></category>

		<guid isPermaLink="false">http://webdiis.unizar.es/asignaturas/AB/?p=2490</guid>
		<description><![CDATA[En la página de material adicional de esta web puede encontrarse: Un artículo que describe un par de métodos de ordenación por fusión (o mezcla) &#8220;in situ&#8221; y analiza su coste (acceso con clave aquí). Un par de capítulos de libros sobre métodos de ordenación en memoria externa basados en la idea de la ordenación por [...]]]></description>
			<content:encoded><![CDATA[<p>En la página de material adicional de esta web puede encontrarse:</p>
<ul>
<li>Un artículo que describe un par de métodos de ordenación por fusión (o mezcla) &#8220;in situ&#8221; y analiza su coste (<a href="http://webdiis.unizar.es/asignaturas/AB/restringido/mergesort_NJC.ps">acceso con clave aquí</a>).</li>
<li>Un par de capítulos de libros sobre métodos de ordenación en memoria externa basados en la idea de la ordenación por fusión (acceso con clave <a href="http://webdiis.unizar.es/asignaturas/AB/restringido/sortingFilesWirth.pdf">aquí</a> y <a href="http://webdiis.unizar.es/asignaturas/AB/restringido/sortingFilesGadia.pdf">aquí</a>).</li>
<li>La demostración de que el coste promedio del <em>quicksort</em> está en <em>n</em> log <em>n</em> (<a href="http://webdiis.unizar.es/asignaturas/AB/restringido/costePromedioQuicksort.pdf">acceso con clave aquí</a>).</li>
<li>Comparación práctica de velocidades de métodos de ordenación: <a href="http://cg.scs.carleton.ca/~morin/misc/sortalg/">un applet</a>, <a href="http://www.cse.iitk.ac.in/users/dsrkg/cs210/applets/sorting/allSort.html">otro applet</a>.</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://webdiis.unizar.es/asignaturas/AB/?feed=rss2&#038;p=2490</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Floyd-Warshall: cálculo del camino</title>
		<link>https://webdiis.unizar.es/asignaturas/AB/?p=2197</link>
		<comments>https://webdiis.unizar.es/asignaturas/AB/?p=2197#comments</comments>
		<pubDate>Tue, 18 Apr 2017 10:46:38 +0000</pubDate>
		<dc:creator>Javier Campos</dc:creator>
				<category><![CDATA[cosas de clase]]></category>
		<category><![CDATA[programación dinámica]]></category>

		<guid isPermaLink="false">http://webdiis.unizar.es/asignaturas/AB/?p=2197</guid>
		<description><![CDATA[En la transparencia 55 de programación dinámica quedó como ejercicio el cálculo de los nodos de las secuencias que componen los caminos mínimos desde cualquier nodo i a cualquier nodo j. Hay varias formas de resolverlo. Una muy sencilla consiste en guardar una matriz adicional C[v,w] en la que se almacene un nodo u que [...]]]></description>
			<content:encoded><![CDATA[<p>En la <a href="http://webdiis.unizar.es/asignaturas/AB/material/4-Programacion%20dinamica.pdf">transparencia 55 de programación dinámica</a> quedó como ejercicio el cálculo de los nodos de las secuencias que componen los caminos mínimos desde cualquier nodo <em>i</em> a cualquier nodo <em>j</em>. Hay varias formas de resolverlo. Una muy sencilla consiste en guardar una matriz adicional <em>C</em>[<em>v</em>,<em>w</em>] en la que se almacene un nodo <em>u</em> que esté en el camino mínimo de <em>v</em> a <em>w</em>.  Para ello, en el interior de los tres bucles del algoritmo, hay que modificar la instrucción condicional añadiendo la actualización de esa matriz <em>C</em>:</p>
<pre>  <strong>si </strong>D[i,k]+D[k,j]&lt;D[i,j] <strong>entonces</strong>
    D[i,j]:=D[i,k]+D[k,j];
    C[i,j]:=k
<strong>  fsi</strong></pre>
<p>La matriz se ha debido inicializar al principio del algoritmo (por ejemplo con valores nulos).  El algoritmo para el cálculo del camino mínimo de <em>i</em> a <em>j</em>, usando la matriz <em>C</em>, queda como:</p>
<pre>  <strong>procedimiento </strong>camino(<strong>ent</strong> i,j:vértice;
<strong>                       ent</strong> C:<strong>vector</strong>[vértice,vértice] <strong>de</strong> entero)
  <strong>variable</strong> k:vértice
  <strong>principio</strong>
    k:=C[i,j];
    <strong>si</strong> k≠0 <strong>entonces</strong>
      camino(i,k,C);
      escribir(k);
      camino(k,j,C)
    <strong>fsi</strong>
<strong>  fin</strong></pre>
]]></content:encoded>
			<wfw:commentRss>https://webdiis.unizar.es/asignaturas/AB/?feed=rss2&#038;p=2197</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programación dinámica: aplicaciones</title>
		<link>https://webdiis.unizar.es/asignaturas/AB/?p=2181</link>
		<comments>https://webdiis.unizar.es/asignaturas/AB/?p=2181#comments</comments>
		<pubDate>Tue, 04 Apr 2017 08:10:52 +0000</pubDate>
		<dc:creator>Javier Campos</dc:creator>
				<category><![CDATA[Bioinformática]]></category>
		<category><![CDATA[cosas de clase]]></category>
		<category><![CDATA[juegos]]></category>
		<category><![CDATA[programación dinámica]]></category>
		<category><![CDATA[robótica]]></category>
		<category><![CDATA[visión por computador]]></category>

		<guid isPermaLink="false">http://webdiis.unizar.es/asignaturas/AB/?p=2181</guid>
		<description><![CDATA[. Las soluciones de programación dinámica aparecen en prácticamente todos los dominios de aplicación. Seleccionamos aquí algunos ejemplos en Visión, Juegos, Robótica y Bioinformática: Dynamic Programming and Graph Algorithms in Computer Vision: A Survey. Dynamic programming and board games: A survey (acceso restringido con usurio/clave). Some dynamic programming problems useful to solve the mobile robot [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: right;"><span style="color: #ffffff;">.</span></p>
<p>Las soluciones de programación dinámica aparecen en prácticamente todos los dominios de aplicación. Seleccionamos aquí algunos ejemplos en Visión, Juegos, Robótica y Bioinformática:</p>
<ol>
<li><a href="http://www.cs.cornell.edu/~rdz/Papers/FZ-survey.pdf">Dynamic Programming and Graph Algorithms in Computer Vision: A Survey</a>.</li>
<li><a href="http://webdiis.unizar.es/asignaturas/AB/restringido/Dynamic%20programming%20and%20board%20games.pdf">Dynamic programming and board games: A survey (acceso restringido con usurio/clave)</a>.</li>
<li><a href="http://webdiis.unizar.es/CRPetri/papers/jcampos/04_GBC_IROS.pdf">Some dynamic programming problems useful to solve the mobile robot localization problem</a>.</li>
<li><a href="http://bibiserv.techfak.uni-bielefeld.de/dynprog/">Systematic Dynamic Programming in Bioinformatics</a>.</li>
</ol>
<p style="text-align: center;"><a rel="attachment wp-att-1913" href="http://webdiis.unizar.es/asignaturas/AB/?attachment_id=1913"><img class="aligncenter size-full wp-image-1913" title="dynamic" src="http://webdiis.unizar.es/asignaturas/AB/wp/wp-content/uploads/dynamic.png" alt="" width="477" height="611" /></a></p>
]]></content:encoded>
			<wfw:commentRss>https://webdiis.unizar.es/asignaturas/AB/?feed=rss2&#038;p=2181</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fibonacci y programación dinámica</title>
		<link>https://webdiis.unizar.es/asignaturas/AB/?p=2141</link>
		<comments>https://webdiis.unizar.es/asignaturas/AB/?p=2141#comments</comments>
		<pubDate>Fri, 31 Mar 2017 11:02:18 +0000</pubDate>
		<dc:creator>Javier Campos</dc:creator>
				<category><![CDATA[cosas de clase]]></category>
		<category><![CDATA[Fibonacci]]></category>
		<category><![CDATA[programación dinámica]]></category>

		<guid isPermaLink="false">http://webdiis.unizar.es/asignaturas/AB/?p=2141</guid>
		<description><![CDATA[Uno de los ejemplos más sencillos (más que los vistos en clase) de aplicación de la programación dinámica es el cálculo del término n-ésimo de la sucesión de Fibonacci. La definición de la sucesión o función de Fibonacci es: Fib(n) = 1, si n = 0,1 Fib(n) = Fib(n-1) + Fib(n-2), si n &#62; 1 [...]]]></description>
			<content:encoded><![CDATA[<p>Uno de los ejemplos más sencillos (más que los vistos en clase) de aplicación de la programación dinámica es el cálculo del término <em>n</em>-ésimo de la sucesión de Fibonacci.</p>
<p>La definición de la sucesión o función de Fibonacci es:</p>
<p style="text-align: center;"><em>Fib</em>(<em>n</em>) = 1, si <em>n</em> = 0,1</p>
<p style="text-align: center;"><em>Fib</em>(<em>n</em>) = <em>Fib</em>(<em>n</em>-1) + <em>Fib</em>(<em>n</em>-2), si <em>n</em> &gt; 1</p>
<p>La solución más natural para calcular el término <em>n</em>-ésimo sería, por tanto, traducir esa definición recursiva de la función a nuestro pseudocódigo:</p>
<pre><strong>  función </strong>FibRec(n:natural) <strong>devuelve </strong>natural
<strong>  principio</strong>
    <strong>si </strong>n≤1 <strong>entonces</strong>
      <strong>devuelve </strong>1
    <strong>sino</strong>
      <strong>devuelve </strong>FibRec(n-1)+FibRec(n-2)
    <strong>fsi</strong>
<strong>  fin</strong></pre>
<p>El inconveniente de esa solución es su coste, exponencial en el valor de <em>n</em>. La ineficiencia de <em>FibRec</em> se debe a que se producen llamadas repetidas de la función para calcular valores que ya se habían calculado previamente, no se ha conservado su resultado, y por tanto hay que volver a calcularlos.</p>
<p>La solución de programación dinámica pasaría por utilizar una tabla auxiliar en la que almacenar las soluciones de todos los &#8220;subproblemas&#8221; (valores de <em>Fib</em> para valores menores que <em>n</em>) resueltos:</p>
<p style="text-align: center;"><a rel="attachment wp-att-2143" href="http://webdiis.unizar.es/asignaturas/AB/?attachment_id=2143"><img class="aligncenter size-full wp-image-2143" title="tabla" src="http://webdiis.unizar.es/asignaturas/AB/wp/wp-content/uploads/tabla1.jpg" alt="" width="272" height="28" /></a></p>
<p>El algoritmo iterativo para devolver el <em>n</em>-ésimo término de Fibonacci calculando la tabla sería:</p>
<pre>  <strong>función </strong>FibIterProto(n:natural) <strong>devuelve</strong> natural
<strong>  </strong><strong><strong>variables </strong></strong>i:natural; T:<strong>vector</strong>[0..n] <strong>de</strong> natural
<strong>  principio
</strong><strong>    si </strong>n≤1 <strong>entonces
</strong><strong>      devuelve</strong> 1
<strong>    sino
</strong>      T[0]:=1;
      T[1]:=1;
<strong>      para </strong>i:=2 <strong>hasta</strong> n <strong>hacer
</strong>        T[i]:=T[i-1]+T[i-2]
<strong>      fpara</strong>;
<strong>      devuelve</strong> T[n]
<strong>    fsi
</strong><strong>  fin </strong></pre>
<p>El último paso en la mejora proviene de detectar que en el algoritmo anterior no es necesario todo el vector auxiliar, pues basta con almacenar los dos últimos valores calculados:</p>
<pre>  <strong>función </strong>FibIter(n:natural) <strong>devuelve</strong> natural
<strong>  </strong><strong><strong>variables </strong></strong>i,suma,x,y:natural {x e y para almacenar los dos últimos
                 términos calculados y suma para almacenar el actual}
<strong>  principio
</strong><strong>    si </strong>n≤1 <strong>entonces
</strong><strong>      devuelve</strong> 1
<strong>    sino
</strong>      x:=1;
      y:=1;
<strong>      para </strong>i:=2 <strong>hasta</strong> n <strong>hacer
</strong>        suma:=x+y;
        y:=x;
        x:=suma
<strong>      fpara</strong>;
<strong>      devuelve</strong> suma
<strong>    fsi
</strong><strong>  fin </strong></pre>
]]></content:encoded>
			<wfw:commentRss>https://webdiis.unizar.es/asignaturas/AB/?feed=rss2&#038;p=2141</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Algoritmo de Karatsuba (y no de Ofman)</title>
		<link>https://webdiis.unizar.es/asignaturas/AB/?p=1479</link>
		<comments>https://webdiis.unizar.es/asignaturas/AB/?p=1479#comments</comments>
		<pubDate>Tue, 14 Mar 2017 09:42:42 +0000</pubDate>
		<dc:creator>Javier Campos</dc:creator>
				<category><![CDATA[cosas de clase]]></category>
		<category><![CDATA[curiosidades]]></category>
		<category><![CDATA[divide y vencerás]]></category>
		<category><![CDATA[Historia]]></category>
		<category><![CDATA[multiplicación]]></category>

		<guid isPermaLink="false">http://webdiis.unizar.es/asignaturas/AB/?p=1479</guid>
		<description><![CDATA[. El algoritmo conocido como &#8220;de Karatsuba y Ofman&#8221; para multiplicar enteros de n cifras con un coste asintótico en O(nlog 3)  ( ≈ O(n1,59) )  aparece publicado en el artículo &#8221;Multiplication of multidigit numbers on automata&#8221;, A. Karatsuba, Y. Ofman, en el nº 145, pp. 293-294, de las actas de la Academia de Ciencias de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: right;"><span style="color: #ffffff;">.</span></p>
<p>El algoritmo conocido como &#8220;de Karatsuba y Ofman&#8221; para multiplicar enteros de <em>n</em> cifras con un coste asintótico en <em>O</em>(<em>n</em><sup>log 3</sup>)  ( ≈ <em>O</em>(<em>n</em><sup>1,59</sup>) )  aparece publicado en el artículo &#8221;Multiplication of multidigit numbers on automata&#8221;, A. Karatsuba, Y. Ofman, en el nº 145, pp. 293-294, de las actas de la Academia de Ciencias de la extinta Unión Soviética (<em>Doklady Akademii Nauk SSSR</em>) en 1962.</p>
<p>Curiosamente, el mencionado artículo no fue escrito por Anatoli Alekséyevich Karatsuba (Grozny, URSS, 31 de enero de 1937 — Moscú, Rusia, 28 de septiembre de 2008) sino que, tal y como relata él mismo en su artículo &#8220;<a href="http://www.ccas.ru/personal/karatsuba/divcen.pdf">The complexity of computations</a>&#8221; (publicado en <em>Proceedings of the Steklov Mathematical Institute</em>, vol. 211, pp. 169-183, 1995, copia local con clave <a href="http://webdiis.unizar.es/asignaturas/AB/restringido/karatsuba1995.pdf">aquí</a>), fue escrito por Kolmogorov, probablemente ayudado por Ofman, y sin el conocimiento de Karatsuba, quien era realmente el autor del algoritmo:</p>
<blockquote><p><em> [...] Later in 1962 Kolmogorov wrote a short article (probably in collaboration with Ofman) and published it in Doklady Akad. Nauk SSSR. The article was entitled: A. Karatsuba and Y. Ofman, &#8220;Multiplication of Multiplace Numbers on Automata&#8221; (Doklady Akad. Nauk SSSR, vol. 145, No. 2, pp. 293-294). I learned about the article only when I was given its reprints.</em></p></blockquote>
<p>En el mismo artículo de 1995, Karatsuba reivindica su autoría:</p>
<blockquote><p><em>In this section I present my algorithm for multiplying numbers. Now it is called the KML algorithm or, briefly, KML (Karatsuba Multiplication).</em></p></blockquote>
<p>&nbsp;</p>
<div id="attachment_1480" class="wp-caption aligncenter" style="width: 230px"><a rel="attachment wp-att-1480" href="http://webdiis.unizar.es/asignaturas/AB/?attachment_id=1480"><img class="size-full wp-image-1480 " title="Anatoli Alekséyevich Karatsuba" src="http://webdiis.unizar.es/asignaturas/AB/wp/wp-content/uploads/A.A.Karatsuba.jpg" alt="" width="220" height="229" /></a><p class="wp-caption-text">Anatoli Alekséyevich Karatsuba</p></div>
<p>&nbsp;</p>
<p>Con posterioridad, se han desarrollado algoritmos asintóticamente más rápidos que el de Karatsuba, como el de Schönhage–Strassen (1971), de coste Θ(<em>n</em> log(<em>n</em>) log(log(<em>n</em>))), o el de Martin Fürer (2007), de coste <em>n</em> log(<em>n</em>) 2<sup>Θ(log<sup>*</sup>(<em>n</em>))</sup>.</p>
]]></content:encoded>
			<wfw:commentRss>https://webdiis.unizar.es/asignaturas/AB/?feed=rss2&#038;p=1479</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Material adicional de divide y vencerás</title>
		<link>https://webdiis.unizar.es/asignaturas/AB/?p=2081</link>
		<comments>https://webdiis.unizar.es/asignaturas/AB/?p=2081#comments</comments>
		<pubDate>Tue, 07 Mar 2017 15:44:39 +0000</pubDate>
		<dc:creator>Javier Campos</dc:creator>
				<category><![CDATA[cosas de clase]]></category>
		<category><![CDATA[divide y vencerás]]></category>

		<guid isPermaLink="false">http://webdiis.unizar.es/asignaturas/AB/?p=2081</guid>
		<description><![CDATA[En la página de material adicional de esta web puede encontrarse: Un artículo que describe un par de métodos de ordenación por fusión (o mezcla) &#8220;in situ&#8221; y analiza su coste (acceso con clave aquí). Un par de capítulos de libros sobre métodos de ordenación en memoria externa basados en la idea de la ordenación por [...]]]></description>
			<content:encoded><![CDATA[<p>En la página de material adicional de esta web puede encontrarse:</p>
<ul>
<li>Un artículo que describe un par de métodos de ordenación por fusión (o mezcla) &#8220;in situ&#8221; y analiza su coste (<a href="http://webdiis.unizar.es/asignaturas/AB/restringido/mergesort_NJC.ps">acceso con clave aquí</a>).</li>
<li>Un par de capítulos de libros sobre métodos de ordenación en memoria externa basados en la idea de la ordenación por fusión (acceso con clave <a href="http://webdiis.unizar.es/asignaturas/AB/restringido/sortingFilesWirth.pdf">aquí</a> y <a href="http://webdiis.unizar.es/asignaturas/AB/restringido/sortingFilesGadia.pdf">aquí</a>).</li>
<li>La demostración de que el coste promedio del <em>quicksort</em> está en <em>n</em> log <em>n</em> (<a href="http://webdiis.unizar.es/asignaturas/AB/restringido/costePromedioQuicksort.pdf">acceso con clave aquí</a>).</li>
<li>Comparación práctica de velocidades de métodos de ordenación: <a href="http://cg.scs.carleton.ca/~morin/misc/sortalg/">un applet</a>, <a href="http://www.cse.iitk.ac.in/users/dsrkg/cs210/applets/sorting/allSort.html">otro applet</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://webdiis.unizar.es/asignaturas/AB/?feed=rss2&#038;p=2081</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dos enlaces relacionados con matroides</title>
		<link>https://webdiis.unizar.es/asignaturas/AB/?p=2073</link>
		<comments>https://webdiis.unizar.es/asignaturas/AB/?p=2073#comments</comments>
		<pubDate>Wed, 01 Mar 2017 15:00:23 +0000</pubDate>
		<dc:creator>Javier Campos</dc:creator>
				<category><![CDATA[cosas de clase]]></category>
		<category><![CDATA[voraces]]></category>

		<guid isPermaLink="false">http://webdiis.unizar.es/asignaturas/AB/?p=2073</guid>
		<description><![CDATA[La anotación en el blog de Jeremy Kun: When Greedy Algorithms are Perfect: the Matroid. Más allá de los matroides: los gridoides.]]></description>
			<content:encoded><![CDATA[<ul>
<li>La anotación en el <em>blog</em> de Jeremy Kun: <em><a href="https://jeremykun.com/2014/08/26/when-greedy-algorithms-are-perfect-the-matroid/">When Greedy Algorithms are Perfect: the Matroid</a></em>.</li>
<li>Más allá de los <em>matroides</em>: <a href="http://webdiis.unizar.es/asignaturas/AB/?p=1459">los <em>gridoides</em></a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://webdiis.unizar.es/asignaturas/AB/?feed=rss2&#038;p=2073</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Curiosidades sobre el problema del árbol de recubrimiento de coste mínimo</title>
		<link>https://webdiis.unizar.es/asignaturas/AB/?p=2070</link>
		<comments>https://webdiis.unizar.es/asignaturas/AB/?p=2070#comments</comments>
		<pubDate>Tue, 21 Feb 2017 15:28:28 +0000</pubDate>
		<dc:creator>Javier Campos</dc:creator>
				<category><![CDATA[cosas de clase]]></category>
		<category><![CDATA[curiosidades]]></category>
		<category><![CDATA[Historia]]></category>
		<category><![CDATA[voraces]]></category>

		<guid isPermaLink="false">http://webdiis.unizar.es/asignaturas/AB/?p=2070</guid>
		<description><![CDATA[. Leer esta anotación: http://webdiis.unizar.es/asignaturas/AB/?p=1009]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ffffff;">.</span></p>
<p>Leer esta anotación: <a href="http://webdiis.unizar.es/asignaturas/AB/?p=1009">http://webdiis.unizar.es/asignaturas/AB/?p=1009</a></p>
]]></content:encoded>
			<wfw:commentRss>https://webdiis.unizar.es/asignaturas/AB/?feed=rss2&#038;p=2070</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un par de anotaciones sobre el problema del cambio en monedas</title>
		<link>https://webdiis.unizar.es/asignaturas/AB/?p=2057</link>
		<comments>https://webdiis.unizar.es/asignaturas/AB/?p=2057#comments</comments>
		<pubDate>Tue, 14 Feb 2017 14:57:28 +0000</pubDate>
		<dc:creator>Javier Campos</dc:creator>
				<category><![CDATA[cosas de clase]]></category>
		<category><![CDATA[curiosidades]]></category>
		<category><![CDATA[monedas]]></category>
		<category><![CDATA[voraces]]></category>

		<guid isPermaLink="false">http://webdiis.unizar.es/asignaturas/AB/?p=2057</guid>
		<description><![CDATA[. Aquí y aquí.]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ffffff;">.</span></p>
<p><a href="http://webdiis.unizar.es/asignaturas/AB/?p=1856">Aquí</a> y <a href="http://webdiis.unizar.es/asignaturas/AB/?p=927">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://webdiis.unizar.es/asignaturas/AB/?feed=rss2&#038;p=2057</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
