Autor Tema: Análisis de algoritmos

0 Usuarios y 1 Visitante están viendo este tema.

22 Septiembre, 2017, 03:52 am
Leído 2178 veces

fabianmedina

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 7
  • Karma: +0/-0
  • Sexo: Masculino
Hola a todos necesito ayuda con estos problemas

1) Considere la operación \( mx \), definida sobre parejas de números naturales

\( mx(a,b)=\dfrac{a+b+|a-b|}{2} \)

a) Sea \( A_n \) un conjunto de \( n \) números naturales, \( n\geq 1 \), sea \( Max(A_n) \) el problema de encontrar el elemento máximo de \( An \). Diseñe un algoritmo que utilice \( mx \), pero que no use ninguna comparación entre los elementos de \( An \), y que resuelva \( Max(A_n) \).

b) Estime como \( \Theta(\ldots) \) la complejidad de su algoritmo.

2 Dada una lista de \( n\geq 1 \) vértices en el plano cartesiano \( \{(a_0,b_0),(a_1,b_1),\ldots,(a_n,b_n)\} \) determine si, al considerar los elementos de la lista como vértices consecutivos del perímetro de una figura geométrica, la figura en cuestión es un polígono. Y, cuando éste sea el caso, decidir si es un polígono convexo.

Agradezco cualquier ayuda.


Recuerda leer y seguir  las reglas del foro así como el tutorial del LaTeX para escribir las fórmulas matemáticas correctamente.

Por esta vez te han corregido las fórmulas desde la administración.

22 Septiembre, 2017, 06:09 am
Respuesta #1

delmar

  • Moderador Global
  • Mensajes: 3,993
  • País: pe
  • Karma: +0/-0
  • Sexo: Masculino
Hola fabianmedina

Bienvenido al foro

Es conveniente escribir las fórmulas en LATEX, para entendernos mejor.

Te ayudo con el problema 1) apartado a)

Un algoritmo que resuelve el problema es :

Leer los n números naturales, almacenandolos en las variables \( a_1,a_2,..,a_n \)

\( M=a_1 \), M es la variable en donde se almacena el mayor de los números que están en  \( a_1,a_2, ...,a_i \)

for \( i=2:n \)
   
    if \( mx(M,a_i)=a_i \)

         \( M=a_i \)
       
    end

end

Explico :

Antes de entrar al bucle for es obvio que el mayor del conjunto \( \left\{{a_1}\right\} \) es \( a_1 \) por eso se lo pone en \( M \)

Luego se ejecuta la operación \( mx(M,a_2) \), esta operación tiene la particularidad de arrojar el mayor de a y b, en este caso de \( M \ y \ a_2 \),  en el caso de que \( a_2>M \) se tendrá \( mx(M,a_2)=a_2 \) y este valor se almacenará en M por ser el mayor del conjunto \( \left\{{a_1,a_i}\right\} \) (i=2). Luego  la operación se ejecutara con \( a_3 \) y asi sucesivamente, arrojando siempre el mayor entre \( M \ y a_i \). El valor de M  cambiará cuando se encuentre un \( a_i>M \), por que ahí la operación retorna a \( a_i \)

Al terminar el bucle en M estará el máximo de los n números.

Detallo que mx(a,b) siempre retorna al mayor entre a y b :

si \(  a\geq{b} \) se tiene  \( mx(a,b)=\displaystyle\frac{a+b+a-b}{2}=a \)

si a< b \( mx(a,b)=\displaystyle\frac{a+b-(a-b)}{2}=b \)


Saludos

22 Septiembre, 2017, 09:55 am
Respuesta #2

Ignacio Larrosa

  • Moderador Global
  • Mensajes: 2,401
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
    • Actividades con GeoGebra
Hola fabianmedina

Bienvenido al foro

Es conveniente escribir las fórmulas en LATEX, para entendernos mejor.

Te ayudo con el problema 1) apartado a)

Un algoritmo que resuelve el problema es :

Leer los n números naturales, almacenandolos en las variables \( a_1,a_2,..,a_n \)

\( M=a_1 \), M es la variable en donde se almacena el mayor de los números que están en  \( a_1,a_2, ...,a_i \)

for \( i=2:n \)
   
    if \( mx(M,a_i)=a_i \)

         \( M=a_i \)
       
    end

end

Explico :

Antes de entrar al bucle for es obvio que el mayor del conjunto \( \left\{{a_1}\right\} \) es \( a_1 \) por eso se lo pone en \( M \)

Luego se ejecuta la operación \( mx(M,a_2) \), esta operación tiene la particularidad de arrojar el mayor de a y b, en este caso de \( M \ y \ a_2 \),  en el caso de que \( a_2>M \) se tendrá \( mx(M,a_2)=a_2 \) y este valor se almacenará en M por ser el mayor del conjunto \( \left\{{a_1,a_i}\right\} \) (i=2). Luego  la operación se ejecutara con \( a_3 \) y asi sucesivamente, arrojando siempre el mayor entre \( M \ y a_i \). El valor de M  cambiará cuando se encuentre un \( a_i>M \), por que ahí la operación retorna a \( a_i \)

Al terminar el bucle en M estará el máximo de los n números.

Detallo que mx(a,b) siempre retorna al mayor entre a y b :

si \(  a\geq{b} \) se tiene  \( mx(a,b)=\displaystyle\frac{a+b+a-b}{2}=a \)

si a< b \( mx(a,b)=\displaystyle\frac{a+b-(a-b)}{2}=b \)


Saludos

Pero no es necesario el condicional. Puede ponerse simplemente:

for \( i=2:n \)
   
    \( M=mx(M,a_i) \)

end

fabianmedina: Es mejor que utilices un hilo distinto para cada cuestión, a no ser que estén íntimamente relacionadas, lo que no parece ser el caso.

Saludos,

Daría todo lo que se por la mitad de lo que ignoro (R. Descartes)
O incluso por muchísimo menos ...  (yo)

22 Septiembre, 2017, 01:28 pm
Respuesta #3

Ignacio Larrosa

  • Moderador Global
  • Mensajes: 2,401
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
    • Actividades con GeoGebra

2 Dada una lista de \( n\geq 1 \) vértices en el plano cartesiano \( \{(a_0,b_0),(a_1,b_1),\ldots,(a_n,b_n)\} \) determine si, al considerar los elementos de la lista como vértices consecutivos del perímetro de una figura geométrica, la figura en cuestión es un polígono. Y, cuando éste sea el caso, decidir si es un polígono convexo.


Una lista de más de dos puntos siempre define un polígono, Supongo que se trata de ver si es cruzado o simple (si sus lados se intersecan o no). Para ello debe comprobarse, por ejemplo, si cada segmento constituido por cada par de puntos consecutivos de la lista se interseca con los segmentos que le siguen o no, saltándose el inmediatamente siguiente. El número de comprobaciones es entonces \( \displaystyle\sum_{k=1}^{n-2}{n-k-1}=\displaystyle\sum_{k=1}^{n-2}k=\displaystyle\frac{(n-2)(n-1)}{2}=\frac{1}{2}n^2 - \frac{3}{2}n + 1 \). En el caso del primer segmento, puede saltarse la comprobación con el último (que es su anterior en orden cíclico). Se debe, más que se puede, por lo que se dice a continuación.

¿En que debe consistir cada una de estas comparaciones? Se trata de ver que al menos uno de los dos segmentos está enteramente en uno de los semiplanos definido por el otro segmento, pues uno podría cortar a la prolongación del otro, pero entonces el segundo no puede cortar a la prolongación del primero sin que se corten los propios segmentos.

Si los dos segmentos son \( [A, B]\textrm{ y }[C, D] \), distintos si el polígono ha de ser simple, sean \( \vec{a}, \vec{b}, \vec{c}\textrm{ y }\vec{d} \) sus vectores de posición con cualquier origen.

Lo mejor para evitar divisiones o el uso de funciones trigonométricas es utilizar el producto vectorial. Como todos los vectores están incluidos en el plano Oxy, podemos considerarlos vectores de \( \mathbb{R}^3 \) con la tercera componente nula. Su producto vectorial tendrá entonces a lo suma la tercera componente distinta de cero. En lo sucesivo, al hablar del signo del producto vectorial, me refiero al signo de esta tercera componente.

Debe comprobarse que \( (\vec{b}-\vec{a})\times\vec{c} \) tiene el mismo signo que \( (\vec{b}-\vec{a})\times\vec{d} \) o que \( (\vec{d}-\vec{c})\times\vec{a} \) tiene el mismo signo que \( (\vec{d}-\vec{c})\times\vec{b} \), no contando como de igual signo cuando uno de ellos es cero.

Seben realizarse entonces del orden de \( 2n^2 \) productos vectoriales, \( n^2 \) comparaciones y \( \displaystyle\frac{n^2}{2} \) disyunciones, entre otras cosas.

Para ver si es convexo, basta con ver que los vectores consecutivos, que unen puntos consecutivos con el inicio del segundo coincidiendo con el extremo del primero, siempre giran en el mismo sentido, viendo que sus productos vectoriales tienen todos el mismo signo. Por tanto \( n \) productos vectoriales. Puede simultanearse con la comprobación de que el polígono es no cruzado.

Bueno, esto es un esbozo, tienes que detallarlo ...

Saludos,
Daría todo lo que se por la mitad de lo que ignoro (R. Descartes)
O incluso por muchísimo menos ...  (yo)

22 Septiembre, 2017, 06:12 pm
Respuesta #4

fabianmedina

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 7
  • Karma: +0/-0
  • Sexo: Masculino
Muchas gracias, tendré en cuenta las recomendaciones para futuras preguntas

24 Septiembre, 2017, 02:57 am
Respuesta #5

delmar

  • Moderador Global
  • Mensajes: 3,993
  • País: pe
  • Karma: +0/-0
  • Sexo: Masculino
Hola fabianmedina

Bienvenido al foro

Es conveniente escribir las fórmulas en LATEX, para entendernos mejor.

Te ayudo con el problema 1) apartado a)

Un algoritmo que resuelve el problema es :

Leer los n números naturales, almacenandolos en las variables \( a_1,a_2,..,a_n \)

\( M=a_1 \), M es la variable en donde se almacena el mayor de los números que están en  \( a_1,a_2, ...,a_i \)

for \( i=2:n \)
   
    if \( mx(M,a_i)=a_i \)

         \( M=a_i \)
       
    end

end

Explico :

Antes de entrar al bucle for es obvio que el mayor del conjunto \( \left\{{a_1}\right\} \) es \( a_1 \) por eso se lo pone en \( M \)

Luego se ejecuta la operación \( mx(M,a_2) \), esta operación tiene la particularidad de arrojar el mayor de a y b, en este caso de \( M \ y \ a_2 \),  en el caso de que \( a_2>M \) se tendrá \( mx(M,a_2)=a_2 \) y este valor se almacenará en M por ser el mayor del conjunto \( \left\{{a_1,a_i}\right\} \) (i=2). Luego  la operación se ejecutara con \( a_3 \) y asi sucesivamente, arrojando siempre el mayor entre \( M \ y a_i \). El valor de M  cambiará cuando se encuentre un \( a_i>M \), por que ahí la operación retorna a \( a_i \)

Al terminar el bucle en M estará el máximo de los n números.

Detallo que mx(a,b) siempre retorna al mayor entre a y b :

si \(  a\geq{b} \) se tiene  \( mx(a,b)=\displaystyle\frac{a+b+a-b}{2}=a \)

si a< b \( mx(a,b)=\displaystyle\frac{a+b-(a-b)}{2}=b \)


Saludos

Pero no es necesario el condicional. Puede ponerse simplemente:

for \( i=2:n \)
   
    \( M=mx(M,a_i) \)

end

fabianmedina: Es mejor que utilices un hilo distinto para cada cuestión, a no ser que estén íntimamente relacionadas, lo que no parece ser el caso.

Saludos,



Gracias por tu aporte Ignacio Larrosa, es cierta la observación. Escribí así, por la costumbre de disminuir las asignaciones de las variables importantes; pero es  oportuna la observación que has hecho.

Saludos