Anda di halaman 1dari 19

Matemtica Discreta.

(26-09-2005). 1.- Presentacin.2.- Introduccin.Desarrollo del pensamiento matemtico.Los hbitos matemticos pueden dar grandes ventajas en muchas actividades de la humanidad (programacin o diseo de sistemas complicados). A las compaas les da igual si conoces el corazn de induccin matemtica, ellas estn interesadas en si eres capaz de asimilar conceptos rpidamente, y parece ser que las matemticas son buenos entrenadores, pero tal vez la Matemtica Discreta sea la ms adecuada ya que sus problemas y nociones iniciales son ms elementales que los del Anlisis, por ejemplo. Mtodos tcnicos y principios.La Matemtica Discreta se puede decir que es la Matemtica de los conjuntos finitos unida con la lgica, los autmatas finitos, la programacin lineal y la arquitectura de ordenadores. Veremos combinatoria y teora de grafos, centrndonos en mtodos y principios bsicos, y una variedad de tcnicas matemticas. El problema de los puentes de Knigsberg.Knigsberg es la actual Kaliningrado. Se encuentra a orillas de Mar Bltico, en Rusia a 50 km de la frontera con Polonia. Perteneci a Prusia. All vivi Kant. En la ciudad se juntas 2 ros, formando una isla en su confluencia. Siete puentes unan (ya no, pues la ciudad fue parcialmente destruida durante la Segunda Guerra Mundial) las diferentes partes de la ciudad. En el s. XVIII se hizo popular como

adivinanza o pasatiempo averiguar si era posible cruzar los 7 puentes de la ciudad pasando slo una vez por cada uno de ellos. Este problema, puede resolverse mediante un estudio exhaustivo de todos los posibles itinerarios. Pero las matemticas se interesan en generalizar el problema y buscar una solucin sencilla y vlida para todos los posibles mapas de ciudades, e incluso objetos ms generales. El problema es simplemente encontrar un trayecto, alrededor de una serie de puentes, que cruce solamente una vez cada uno de ellos.

En 1736, el matemtico suizo radicado en San Petersburgo, Leonard Euler public Solutio Problematis ad Geometriam Situs Pertinentis, un artculo en el que resolva el problema en el caso general. Este trabajo es considerado como el nacimiento de la Teora de Grafos, utilizada hoy en una multiplicidad de aplicaciones, y tambin una de las primeras apariciones de la nueva geometra en la que importan slo las propiedades estructurales de un objeto y no sus medidas. A esto se refieren las palabras geometriam situs en el ttulo de Euler, palabras que hoy se traducen como topologa (1930, Salomn Lefschetz) (=geometra de la goma elstica).

La idea de Euler fue considerar los cuatro lugares terrestres, que se deseaban comunicar (hay 4 de ellos), como puntos de destino y, a los famosos puentes, como trayectorias entre esos puntos. En consecuencia, el mapa de Knigsberg en esencia matemtica- puede ser entonces reducido al siguiente diagrama, que es un ejemplo de lo que se suele llamar un grafo.

En funcin de la ubicacin de cada uno de los vrtices y de las aristas que los conectan, Euler no pudo entregar una solucin al problema de la trayectoria de los puentes de Knigsberg. Solamente podra haber una solucin si los vrtices pudiesen ser conectados por un nmero de aristas par, ya que ello implicara entrar y salir a travs de los mismos vrtices por los cuales se llega. Alternativamente, dos vrtices pueden estar conectados por un nmero impar de aritas y, stas, seran el comienzo y el final de la trayectoria. Para que el problema tenga solucin ha de haber como mucho 2 vrtices de valencia (grado) impar. En el caso del grafo de Knigsberg, los cuatro vrtices tienen grado impar, as que el problema no tiene solucin. Demostrar que esa condicin precedente es no slo necesaria, sino tambin suficiente no es difcil. Si a ello, agregamos el hecho de que en todo grfico el nmero de aristas con valencia impar es par (porque al sumar las valencias de todos los vrtices estaremos contando dos veces cada arista) se llega a la conclusin de los grafos que se pueden dibujar sin levantar el lpiz del papel y sin pasar dos veces por la misma arista:

- Si un grfico no tiene vrtices de grado impar, entonces se puede dibujar. Adems, se puede dibujar empezando desde cualquier vrtice y el dibujo ser cerrado en el sentido en que termina en el mismo vrtice en el que se empez. A estos grafos se les llama eulerianos. - Si un grafo tiene exactamente 2 vrtices de valencia impar, entonces se puede dibujar, pero siempre ser necesario comenzar en uno de ellos y terminar en el otro. - Si un grafo tiene 4 o ms vrtices de valencia impar, entonces hasta ah se llega, ya que no se puede dibujar. 3.- Algoritmos y su eficiencia.Definicin.Un algoritmo es una secuencia finita y ordenada de instrucciones elementales que, dados los valores de entrada de un problema, en algn momento finaliza y devuelve la solucin. La Teora de Algoritmos es una ciencia que estudia cmo construir algoritmos para resolver diferentes problemas. La Teora de Algoritmos tambin proporciona herramientas formales que nos van a permitir decidir qu algoritmo es mejor en cada caso. Si un mismo algoritmo puede resultar ms rpido en una computadora que en otra, podra existir una computadora capaz de ejecutar de forma eficiente algoritmos que sabemos que no lo son? Existe un principio fundamental en Teora de Algoritmos, llamado principio de invarianza, que dice que si dos implementaciones del mismo algoritmo consumen t1(n) y t2(n) segundos respectivamente, siendo n el tamao de los datos de entrada, entonces existe una constante positiva c tal que

t1(n)ct2(n), siempre que n sea lo suficientemente grande. Luego la respuesta es NO. El tiempo de ejecucin de un algoritmo viene dado por las entradas concretas que le introduzcamos. Ejemplo.{1,2,3,4,6,5} necesita menos operaciones para ser ordenado que {6,5,3,2,1,4}. Por esto distinguimos 3 alternativas: - Mejor caso: Es el nmero de operaciones necesario cuando los datos se encuentran distribuidos de la mejor forma posible para el algoritmo. (No es prctico). - Peor caso: Es el nmero de operaciones necesario para la distribucin ms pesimista de los datos de entrada. Nos permitir obtener una cota superior del tiempo de ejecucin necesario. Un algoritmo que se comporte bien en el peor caso, ser siempre un buen algoritmo. - Caso promedio: Muchas veces, hay algoritmos que en el peor caso no funcionan bien, pero en el mayora de los caso que se presentan habitualmente tienen un comportamiento razonablemente eficiente. De hecho, algunos algoritmos tpicos de ordenacin necesitan el mismo nmero de operaciones en el peor caso, pero se diferencian considerablemente en el caso promedio. 4.- Complejidad Algortmica.Empleamos una notacin de tipo asinttico porque en la mayora de los casos carece de inters calcular el tiempo de ejecucin concreto de un algoritmo en una computadora, o resulta imposible.

Definicin.El orden de complejidad de un algoritmo es una funcin f(n) del tamao n de la entrada que define el tiempo de ejecucin del algoritmo: F:NR+ Definiciones.Dada la funcin f(n), haremos las siguientes definiciones: - Lmite superior asinttico: f(n)=O(g(n)) si existe una constante positiva c y un nmero entero positivo n0 tales que 0f(n)cg(n) nn0. (lim supn f(n)/g(n)<). - Lmite inferior asinttico: f(n)=(g(n)) si existe una constante positiva c y un nmero entero positivo n0 tales que 0 cg(n)f(n) nn0. (lim infn f(n)/g(n)>0). - Lmite exacto asinttico: f(n)=(g(n)) si existen 2 constantes positivas c1, c2 y un nmero entero positivo positivo n0 tales que c1g(n)f(n) c2g(n) nn0. - Notacin o: f(n)=o(g(n)) si para cualquier constante positiva c existe un nmero entero positivo n0>0 tal que 0f(n)cg(n) nn0. Intuitivamente, f(n)=O(g(n)) significa que f(n) crece asintticamente no ms rpido que g(n) multiplicada por una constante. f(n)=(g(n)) quiere decir que f(n) crece asintticamente al menos como g(n) multiplicada por una constante.

Lmite superior y lmite inferior.Sea (a1, a2, a3, a4,) una sucesin de nmeros reales. Sean bn=supi=n{ ai}, cn=infi=n{ ai}. bn y cn son (respectivamente) decreciente y creciente luego tiene lmete (en R{-, +}). Definicin.lim supnan=lim bn. lim inf nan=lim cn. Proposicin.lim sup = mximo de los lmites de subsucesiones. lim inf = mnimo de los lmites de subsucesiones. Proposicin.f(n)O(g(n)) lim sup f(n)/g(n) < {f(n)/g(n)} est acotado superiormente. (Lo mismo para f(n)(g(n)).) Propiedades.a) f(n) = O(g(n)) g(n) = (f(n)). b) f(n) = (g(n)) f(n) = O(g(n)) f(n) = (g(n)). c) Si f(n) = O(h(n)) g(n) = O(h(n)), entonces (f+g)(n) = O(h(n)). d) Si f(n) = O(h(n)) g(n) = O(l(n)), entonces (fg)(n) = O(h(n)l(n)) e) f(n) = O(f(n)).

f) Si f(n) = O(g(n)) g(n) = O(h(n)), entonces f(n) = O(h(n)). Para algunas funciones de uso comn, podemos definir directamente su orden de complejidad: funciones polinomiales: Si f(n) es un polinomio de grado k, y su coeficiente de mayor grado es positivo, entonces f(n) = (nk). funciones logartmicas: Para cualquier constante c>0, logc(n) = (ln(n)). factoriales: n! = (2n). logaritmo de un factorial: ln(n!) = (nln(n)). (27-09-2005) Ejemplo.Supongamos que tenemos un algoritmo que necesita llevar a cabo f(n) = 20n2+10n+1000 operaciones elementales. Podemos decir que ese algoritmo tiene un orden de ejecucin (n2), i.e., que el tiempo de ejecucin crece de forma asinttica, proporcionalmente al cuadrado del tamao de la entrada. Otro algoritmo que necesite g(n) = n3+1 operaciones efectuar menos clculos para una entrada pequea, pero su orden es (n3), por lo que crecer mucho ms rpidamente que el anterior y, en consecuencia, ser menos eficiente. 5.- Algoritmos Polinomiales, Exponenciales y Subexponenciales. Diremos que un algoritmo es polinomial si su peor caso de ejecucin es de orden O(nk), donde n es el tamao de la entrada y k es una constante. (EFICIENTE).

Cualquier algoritmo que no pueda ser acotado por una funcin polinomial, se conoce como exponencial. (INEFICIENTE). Un algoritmo se denomina subexponencial si en el peor de los casos, la funcin de ejecucin es de la forma eO(n), donde n es el tamao de la entrada. Son asintticamente ms rpidos que los exponenciales puros, pero ms lentos que los polinomiales. 6.- Correccin. Un algoritmo es correcto parcialmente si se garantiza que para el juego de datos contemplados en la especificacin, el algoritmo llega a un conjunto de resultados cuando termina, aunque no podamos establecer si termina. Un algoritmo es totalmente correcto si lo es parcialmente y adems sabemos que termina en un tiempo finito. La demostracin de la correccin de un algoritmo se establece a travs de la verificacin de algoritmo. Esto no lo han entendido. Busco otras definiciones para aclararlo y lo explico el da siguiente. (http://www.retratoensepia.com/) Correccin: capacidad del software para realizar con exactitud su tarea tal como definen sus especificaciones. Robustez: capacidad de un sistema para reaccionar adecuadamente ante situaciones excepcionales. Segn esto la correccin es la propiedad fundamental del software. Si nuestro software no cumple las especificaciones, poco importa su usabilidad, seguridad, etc La robustez es un complemento a la correccin que caracteriza lo que sucede fuera de las especificaciones dadas. Ante una entrada errnea, ser ms robusto el programa que emita un mensaje de error y termine

limpiamente que otro que cause eventos catastrficos. Otras dos definiciones: Precondiciones: Condiciones que se que definen el estado antes de la ejecucin de un programa. Postcondiciones: Condiciones que se que definen el estado despus de la ejecucin de un programa. Estos conceptos nos permitirn definir hacer una definicin ms exacta de correccin: Un programa es correcto si al ejecutarse satisfaciendo sus precondiciones tambin satisface sus postcondiciones. Utilizaremos la siguiente notacin: {P}A{Q}: A es correcto si P es cierto y al acabar su ejecucin Q es cierto. Veamos un ejemplo Modulo: raiz_cuadrada entradas: a: Real salidas: x: Real PRECONDICIONES {a>=0} INICIO //Sentencias del algoritmo return x; FIN POSTCONDICIONES {x*x == a} and {x>=0} Si nuestro algoritmo ante una entrada a mayor que 0 produce una salida que cumpla las postcondiciones, y adems siempre

termina (condicin que diferencia un programa parcialmente correcto de uno totalmente correcto), diremos que es correcto. Ejercicio.Ordenar las siguientes funciones: log n, n, n5, en, (2n n), n!, enlogn=nn, enn, 222 (n veces). Solucin.Logartmica: log n. Polinmica (n(1)): n, n5. (poli)-exponenciales: 2(n): en, (2n n) 2(nlogn): n!, enlogn=nn, enn. doblemente exponencial: 222 (n veces). 7.- Operaciones elementales.Podemos considerar una operacin elemental como aquella que se ejecuta siempre en tiempo constante. Segn la computadora, habr operaciones que podrn considerarse elementales o no. Ejemplo.En una computadora que pueda operar nicamente con nmeros de 16 bits, no podr considerarse elemental una operacin con nmeros de 32 bits. En general, el tamao de la entrada a un algoritmo se mide en bits, y se consideran en principio elementales las operaciones a nivel de bit. Sean a y b dos nmeros enteros positivos, ambos menores o iguales que n. Necesitaremos, pues, aproximadamente log2(n) bits para representarlos ntese que, en este caso, log2(n) es el tamao de la entrada-. Segn este criterio, las operaciones aritmticas,

llevadas a cabo mediante los algoritmos tradicionales, presentan los siguiente rdenes de complejidad. Suma (a+b): O(log2(a) + log2(b) = O(log2(n)). Resta (a-b): O(log2(a) + log2(b) = O(log2(n)). Multiplicacin (ab): O(log2(a)log2(b) = O((log2(n))2). Divisin (a/b): O(log2(a)log2(b) = O((log2(n))2). Nota.El orden de complejidad de un logaritmo es independiente de la base; por lo que la capacidad de realizar en tiempo constante operaciones aritmticas con nmeros de ms bits nicamente introducir un factor de proporcionalidad (loga(x)=logb(x)loga(b)). Dicho factor no afectar al orden de complejidad obtenido, por lo que podemos considerar que estas operaciones se efectan en grupos de bits de tamao arbitrario. 8.- Algoritmos de Ordenacin.Ordenamiento por Seleccin.El ordenamiento por seleccin (selection sort, en ingls) es un algoritmo de ordenamiento que requiere O(n2) operaciones para ordenar una lista de n elementos. Su funcionamiento es el siguiente: Buscar el mnimo elemento de la lista. Intercambiarle con el primero. Buscar el mnimo del resto de la lista. Intercambiarlo con el segundo. Y en general: Buscar el mnimo entre una posicin i y el final de lista. Intercambiar el mnimo con el elemento de la posicin i. 2 O(n ).

(28-09-2005) De esta manera se puede escribir el siguiente pseudo-cdigo para ordenar una lista de n elementos indexados desde el 1: iterar i desde 1 hasta n-1: minimo = i; iterar j desde i+1 hasta n si lista[j] < lista[minimo] entonces minimo = j intercambiar(lista[i], lista[minimo]) Ordenamiento de Burbuja.El Bubble sort es un sencillo algoritmo de ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambindoles de posicin si estn en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten ms intercambios, lo cual significa que la lista est ordenada. Este algoritmo obtiene su nombre de la forma con la que suben por la lista los elementos durante los intercambios, como si fueran pequeas burbujas. Caractersticas: - Ventajas: o Es bastante sencillo. o En un cdigo reducido se realiza el ordenamiento. o Eficaz. - Desventajas: o Consume bastante tiempo de computadora. o Requiere muchas lecturas/escrituras en memoria. 2 O(n ). A continuacin se muestra el pseudocdigo, donde

Vector(posicion) es una funcin que devuelve el elemento situdado en una determinada posicin de la lista, y NO_ORDENADOS(a,b) devuelve VERDADERO si no estn en orden los elementos a y b: Mientras LISTA no ordenada, hacer Para iCasilla desde INICIO hasta FINAL-1 Si NO_ORDENADOS(Vector(iCasilla), Vector(iCasilla+1)) entonces Variable_Auxiliar=Vector(iCasilla) Vector(iCasilla)=Vector(iCasilla+1) Vector(iCasilla+1)=Variable_Auxiliar Fin Si Siguiente iCasilla Fin Mientras Insercin directa.En este mtodo lo que se hace es tener una sublista ordenada de elementos de la lista e ir insertando el resto en el lugar adecuado para que la sublista no pierda el orden. La sublista ordenada se va haciendo cada vez mayor, de modo que al final la lista entera queda ordenada. Para el ejemplo {40,21,4,9,10,3,5}, se tiene: {40,21,4,9,10,35} La primera sublista ordenada es {40}. Insertamos el 21: {40,40,4,9,10,35} aux=21; {21,40,4,9,10,35} Ahora la sublista ordenada es {21,40}. Insertamos el 4: {21,40,40,9,10,35} aux=4; {21,21,40,9,10,35} aux=4; {4,21,40,9,10,35} Ahora la sublista ordenada es {4,21,40}. Insertamos el 9: {4,21,40,40,10,35} aux=9; {4,21,21,40,10,35} aux=9;

{4,9,21,40,10,35} Ahora la sublista ordenada es {4,9,21,40}. Insertamos el 10: {4,9,21,40,40,35} aux=10; {4,9,21,21,40,35} aux=10; {4,9,10,21,40,35} Ahora la sublista ordenada es {4,9,10,21,40}. Y por ltimo insertamos el 35: {4,9,10,21,40,40} aux=35; {4,9,10,21,35,40} El array est ordenado. En el peor de los casos, el nmero de comparaciones que hay que realizar es de n(n+1)/2, lo que nos deja un tiempo de ejecucin en O(n2). En el mejor caso (cuando la lista ya estaba ordenada), el nmero de comparaciones es n-2. Todos ellas son falsas, con lo que no se produce ningn intercambio. El tiempo de ejecucin est en O(n). El caso medio depender de cmo estn inicialmente distribuidos los elementos. Vemos que cuanto ms ordenada est inicialmente ms se acerca a O(n) y cuanto ms desordenada, ms se acerca a O(n2). El peor caso es igual que en los mtodos burbuja y seleccin, pero el mejor caso es lineal, algo que no ocurra en stos, con lo que para ciertas entradas podemos tener ahorros en tiempo de ejecucin. O(n) u O(n2). Divide y vencers.Este ordenamiento es un algoritmo basado en la tcnica de divide y vencers, que permite, en promedio, ordenar n elementos en un tiempo proporcional a nlogn. Esta es probablemente la tcnica de ordenamiento ms rpida conocida. Fue desarrollada por C. Anthony R. Hoare en 1960. El algoritmo original es recursivo, pero se utilizan versiones iterativas para mejorar su rendimiento (los algoritmo recursivos son en general ms lentos que los iterativos, y consumen ms recursos).

Descripcin del algoritmo: Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote. Redituar los dems elementos de la lista a cada lado del pivote, de manera que a un lado queden todos los menores que l, y al otro los mayores. En este momento, el pivote ocupa exactamente el lugar que le corresponder en la lista ordenada. La lista queda separada en dos sublistas, una formada por los elementos a la izquierda del pivote, y otra por los elementos de su derecha. Repetir este proceso de forma recursiva para cada sublista mientras stas contengan ms de un elemento. Una vez terminado este proceso todos los elementos estarn ordenados. Como se puede suponer, la eficiencia del algoritmo depende de la posicin en la que termine el pivote elegido. - En el mejor caso, el pivote termina en el centro de la lista, dividindola en dos sublistas de igual tamao. En este caso, el orden de complejidad del algoritmo es O(nlogn). - En el peor caso, el pivote termina en un extremo de la lista. El orden de complejidad del algoritmo es entonces O(n2). El peor caso depender de la implementacin del algoritmo, aunque habitualmente ocurre en listas que se encuentran ordenadas, o casi ordenadas. - En el caso promedio, el orden es O(nlogn). O(nlogn). La pregunta es: Es (nlogn)?. Respuesta: Depende del modelo de computacin. Modelo 1: o Tamao del imput = cantidad de elementos.

o Operacin elemental = comparacin. (nlogn). Modelo 2: o Tamao del imput = longitud decimal (o binaria). o Operacin elemental = operacin sobre el dgito. Hay algoritmos O(n). De todos los algoritmos hemos hecho un ejemplo en la pizarra para ver su funcionamiento. (29-09-2005) 9.- Clases de Complejidad.Para simplificar la notacin, en muchas ocasiones se suele reducir el problema de la complejidad algortmica a un simple problema de decisin, de forma que se considera un algoritmo como un mecanismo que permite obtener una respuesta s o no a un problema concreto. La case de complejidad P es el conjunto de todos los problemas de decisin que pueden ser resueltos en tiempo polinomial. La clase de complejidad NP es el conjunto de todos los problemas para los cuales una respuesta afirmativa puede ser verificada en tiempo polinomial, empleando alguna informacin extra, denominada certificado (u orculo). La clase de complejidad co-NP es el conjunto de todos los problemas para los cuales una respuesta negativa puede ser verificada en tiempo polinomial, usando un certificado apropiado.

Ntese que el hecho de que un problema sea NP, no quiere decir necesariamente que el certificado correspondiente sea fcil de obtener, sino que, dado ste ltimo, puede verificarse la respuesta afirmativa en tiempo polinomial. Una observacin anloga puede llevarse a cabo sobre los problemas co-NP. Sabemos que PNP y que Pco-NP. Sin embargo, an no se sabe si P=NP, si NP=co-NP, o si P=NPco-NP. Si bien muchos expertos consideran que ninguna de estas tres igualdades se cumplen, este punto no ha podido ser demostrado matemticamente. Todos los problemas NP se pueden reducir a un problema NP-duro. As pues si resolvemos un problema NP-duro habremos resuelto cualquier problema NP. Si un problema es NP-duro y adems NP, entonces pertenece a la clase de problemas NP-completo, que podemos denotar como NPC. Los problemas NPC tienen la peculiaridad de que todos ellos son equivalentes, es decir, se pueden reducir unos en otros, y si logrsemos resolver alguno de ellos en tiempo polinomial, los habramos resuelto todos. Sea A={a1,a2,,an} un conjunto de nmeros enteros positivos, y s otro nmero entero positivo. El problema de determinar si existe un subconjunto de A cuyos elementos sumen s es un problema NP-completo, y, como ya se ha dicho, todos los problemas de esta clase pueden ser reducidos a una instancia de este. Ntese que dado un subconjunto de A, es muy fcil verificar si suma s, y que dado un subconjunto de A que sume s que desempeara el papel de certificado-, se puede verificar fcilmente que la respuesta al problema es afirmativa.

Esta es la relacin entre las clases de complejidad, P, NP, co-NP y NPC. Ejemplo.- (Problema de la mochila o del viajante) (NPC) Sea A={a1,a2,,an} un conjunto de nmeros enteros positivos, y s otro nmero entero positivo. Existe un subconjunto de A cuyos elementos sumen s? Dado un subconjunto de A, es muy fcil verificar si suma s, y que dado un subconjunto de A que sume s que desempeara el papel de certificado-, se puede verificar fcilmente que la respuesta al problema es afirmativa.

Anda mungkin juga menyukai