Autor Tema: Tiempo complejidad

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

20 Mayo, 2024, 05:46 pm
Respuesta #30

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

Me estoy confundiendo. Estamos hallando el óptimo por fuerza bruta para un \( h \) que toma \( m \) valores. Tenemos tres métodos con tiempos de complejidad \( A,B \) y \( C \). ¿Cuál sería el tiempo de complejidad del método \( C \) ? El tiempo de hallar el MCM es \( O(t \log t) \), pero no veo cómo es que entra el \( m \).

Entra totalmente; es decir o me pierdo algo o \( O(t\log t) \) es para cada valor de \( h \); si tenemos \( m \) valores de \( h \) a calcular la complejidad pasa a ser \( O(m\cdot t\log t) \).

Saludos.

20 Mayo, 2024, 08:48 pm
Respuesta #31

Quema

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 2,109
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
No entiendo cuando pones:

Citar
a) Suponiendo los \( y_i \) entiendo que hay que calcular:

\( RDU(Y)=\displaystyle\sum_{k=1}^n{}u(y_i)(w(p_1+\ldots+p_i)-w(p_1+\ldots+p_{i-1}) \)

Eso son:

- Calculamos \( a_i=\displaystyle\sum_{k=1}^i{}p_i  \), para \( 1\leq i\leq n \) que son \( n-1 \) operaciones.
- Calculamos \( w_i=w(a_i)-w(a_{i-1} \) que son \( 3(n-1) \) operaciones.

 ¿De dónde sale el 3, no debería ser \( n(n-1) \)

Para entender bien esto voy a empezar a calcular los ordenes a ver que me digas en qué parte le estoy errando.

a) El A, tomo un valor determinado de \( h \) ordeno los \( y_i \) tiene un orden \( O(n \log n) \). Ahora tengo que calcular los \( w(p_1+...+p_j)-w(p_1+...+p_{j-1}) \). El primero es \( w(p_1) \), el segundo \( w(p_1+p_2)-w(p_1) \), el tercero \( w(p_1+p_2+p_3)-w(p_1+p_2) \),...y el último \( 1-w(p_1+p_2+...+p_{n-1}) \) es como \( 1+2+...+n=\displaystyle\frac{n(n-1)}{2} \) entonces es de orden \( O(n^2). \) El resto es de orden \( O(n) \), entonces el orden para los \( m \), \( h \), entonces hallar el máximo \( O(m n \log n) \). Hay algo mal?

b) No me queda claro en \( B \), un orden, por qué queda \( O(n^2 \log n) \) y no aparece el \( m \), no debería ser \( O(m n^2 \log n) \) . Yo creo que sería así, hallar los puntos de intersección tiene orden \( O(n^2) \), ordenarlos tiene orden \( O(n^2 \log n^2) \) (tu aquí pones \( O(n^2\log n) \)). Ahora calcular los pesos de cada sección es \( O(n^2) \), como hay \( \displaystyle\frac{n(n-1)}{2} \) regiones el orden de calcular todos los pesos de \( O(n^4) \).

c) Por otro lado en C, el orden de complejidad para un solo valor de \( h \) debería ser siendo \( O(n \log n) \) pues simplemente sabemos, por construcción, que hay elementos repetidos. No tiene sentido que sea \( O( t \log t) \). En todo caso deberíamos compararlo con el orden de hallar el MCM que es, creo, \( O( n \log \max (b_1,b_2,...,b_n)) \) siendo los \( b_i \) los denominadores de la probabilidades individuales. 

21 Mayo, 2024, 09:59 am
Respuesta #32

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

No entiendo cuando pones:

Citar
a) Suponiendo los \( y_i \) entiendo que hay que calcular:

\( RDU(Y)=\displaystyle\sum_{k=1}^n{}u(y_i)(w(p_1+\ldots+p_i)-w(p_1+\ldots+p_{i-1}) \)

Eso son:

- Calculamos \( a_i=\displaystyle\sum_{k=1}^i{}p_i  \), para \( 1\leq i\leq n \) que son \( n-1 \) operaciones.
- Calculamos \( w_i=w(a_i)-w(a_{i-1} \) que son \( 3(n-1) \) operaciones.

 ¿De dónde sale el 3, no debería ser \( n(n-1) \)

El tres sale de, para cada \( i \) evaluar \( w(a_i) \) (1), evaluar \( w(a_{i-1}) \) (2) y restar (3) (ahí están las \( 3 \) operaciones).

Por otro lado no tienes que multiplicar \( n \) por \( n-1 \). Ten en cuenta que los \( a_i \) se calculan una sola vez. \( a_1=p_1 \), \( a_2=a_1+p_2 \), \( a_3=a_2+p_3 \), \( a_4=a_3+p_4 \). En total \( n-1 \) operaciones.

Y luego para cada \( i \) calcular \( u(y_i)(w(a_i)-w(a_{i-1}) \) que son \( 5 \) operaciones (tres evaluaciones de funciones, una resta y un producto). Como \( i \) va de \( 1 \) a \( n \) serían \( 5n \) (yo puse \( 5(n-1) \) pero es lo de menos; está el detallito de que cuando \( i=1 \) no se resta nada).

Entonces la cosa es que es todo de orden \( O(n) \) (los coeficientes 5,6,... es lo de menos).

Para entender bien esto voy a empezar a calcular los ordenes a ver que me digas en qué parte le estoy errando.

Citar
a) El A, tomo un valor determinado de \( h \) ordeno los \( y_i \) tiene un orden \( O(n \log n) \).

Bien.

Citar
Ahora tengo que calcular los \( w(p_1+...+p_j)-w(p_1+...+p_{j-1}) \). El primero es \( w(p_1) \), el segundo \( w(p_1+p_2)-w(p_1) \), el tercero \( w(p_1+p_2+p_3)-w(p_1+p_2) \),...y el último \( 1-w(p_1+p_2+...+p_{n-1}) \) es como \( 1+2+...+n=\displaystyle\frac{n(n-1)}{2} \) entonces es de orden \( O(n^2). \)

No; eso no lo estás haciendo de manera óptima. Las sumas \( p_1+p_2+p_3+\ldots \) no tienes que calcularlas repetidas de cada vez.

Como te indiqué antes las haces una sola vez \( a_k=p_1+p_2+\ldots+p_k \); o más en concreto \( a_1=p_1 \) y \( a_{k+1}=a_k+p_{k+1} \). Esto sólo son \( n-1 \) operaciones.

Por tanto eso que a ti te da \( O(n^2) \) se puede hacer en \( O(n) \).

Citar
El resto es de orden \( O(n) \), entonces el orden para los \( m \), \( h \), entonces hallar el máximo \( O(m n \log n) \). Hay algo mal?

 Aquí estamos de acuerdo. De hecho no has usado el \( O(n^2) \) que decías antes.

Citar
b) No me queda claro en \( B \), un orden, por qué queda \( O(n^2 \log n) \) y no aparece el \( m \), no debería ser \( O(m n^2 \log n) \) .


 Ese  \( O(n^2 \log n) \) viene del coste de intersecar todas las rectas \( y_i(h) \) y ordenar los \( n(n-1)/2 \) puntos de corte \( h_{ij} \). Esto no depende de ningún valor concreto de \( h \); es decir no es una cosa que haya que \( m \) veces, supuesto que queremos hallar el valor de \( RDU \) para \( m \) valores de \( h \). Se hace una vez independientemente de que \( m=1 \) ó \( m=10^9 \).

Citar
Yo creo que sería así, hallar los puntos de intersección tiene orden \( O(n^2) \), ordenarlos tiene orden \( O(n^2 \log n^2) \) (tu aquí pones \( O(n^2\log n) \)).

 Porque \( log(n^2)=2log(n) \) y entonces:

\( O(n^2log(n^2))=O(2n^2log(n))=O(n^2log(n)) \)

Citar
Ahora calcular los pesos de cada sección es \( O(n^2) \), como hay \( \displaystyle\frac{n(n-1)}{2} \) regiones el orden de calcular todos los pesos de \( O(n^4) \).

 En lo de calcular los pesos de cada sección, estas volviendo a usar \( O(n^2) \) cuando puede hacerse en \( O(n) \).

 Pero la idea ahora sería la siguiente. Queremos calcular el valor de \( RDU(h) \), para \( m \) valores de  \( h \). Tenemos previamente calculados intervalos \( [h_i,h_{i+1}) \) en los cuales sabemos que el orden de los \( y_i(h) \) no varía.

 Entonces para el primer valor de \( h\in [h_1,h_2) \) sabemos el orden de los \( y_i(h) \) o en todo caso los reordenamos y serían \( O(nlog(n))<O(n^2log(n)) \). La clave es que esta ordenación sólo se hará para el primer \( h \). Después calculamos \( RDU(h) \) en  \( O(n) \) operaciones.

 Ahora para los siguientes valores de \( h\in [h_1,h_2) \) no hay nada que reordenar. Por tanto seguimos teniendo \( O(n) \) operaciones para calcular \( RDU(h) \).

 Si \( h \) "salta" de \( [h_1,h_2) \) a \( [h_2,h_3) \) ahí sabemos que una recta \( y_i \) ha pasado a otra \( y_j \) entonces intercambiamos el orden de ambas; y de nuevo para calcular \( RDU(h) \) necesitamos \( O(n) \) operaciones.

 En resumen, si calculamos \( m \) valores de \( h \) necesitamos \( O(mn) \) operaciones.

 La diferencia entre \( A \) y \( B \) es en definitiva que en \( A \) para cada \( h \) reordenamos los \( y_i(h) \) "partiendo de cero". Mientras en en \( B \) gastamos  primero \( O(n^2log(n)) \) operaciones en intersecar las rectas y obtener los puntos de intersección; a cambio para cada valor de \( h \) ya no tenemos que volver a reordenar los \( y_i(h) \).

Citar
c) Por otro lado en C, el orden de complejidad para un solo valor de \( h \) debería ser siendo \( O(n \log n) \) pues simplemente sabemos, por construcción, que hay elementos repetidos. No tiene sentido que sea \( O( t \log t) \). En todo caso deberíamos compararlo con el orden de hallar el MCM que es, creo, \( O( n \log \max (b_1,b_2,...,b_n)) \) siendo los \( b_i \) los denominadores de la probabilidades individuales.

Si; en eso estoy de acuerdo. En realidad basta ordenar los \( n \) ya que el salto a \( t \) valores únicamente supone repetir algunos cierto número de veces.

Saludos.

21 Mayo, 2024, 02:18 pm
Respuesta #33

Quema

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 2,109
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Para \( C \) luego de reordenar los \( y_i \) que tiene orden \( O(n \log n) \) y hallar el \( t \)=MCM que tiene orden \( O( t \log \max(b_1,b_2,...,b_n) \) (en este orden creo que luego no influye \( m \)), luego debemos repetir los valores que toma la v.a., para hacer equiprobables sus probabilidades y eso da orden \( O(t max\{b_1,b_2,...,b_n\}) \), no? El resto de las operaciones daría orden \( O(t) \).


Entonces hallar el óptimo \( h \) por fuerza bruta sería \( \max\{O(m n \log n), O( t \log \max(b_1,b_2,...,b_n)) \) no? obviamente \( b_i>1 \). No tengo muy claro el orden siguiendo este método.

El valor de \( t \) podría ser muy alto. Pero C bien podría ser menor a A y a B, no? En algún lugar, tu decías que no veías que esto pudiera ocurrir, es decir que C fuera menor a A, simplemente reordenando la forma de presentar los valores y probabilidades de la variable aleatoria.  Aunque posiblemente el orden de C y A sean iguales. Pensándolo en voz alta, como el método C lo único que trata es hacer equiprobables los pesos, y el orden del A está marcado por \( O(n \log n) \) éste método debería dar el mismo orden. Aunque en el programa que he hecho parece más fácil usar el método C que el A.


21 Mayo, 2024, 07:55 pm
Respuesta #34

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

Para \( C \) luego de reordenar los \( y_i \) que tiene orden \( O(n \log n) \) y hallar el \( t \)=MCM que tiene orden \( O( t \log \max(b_1,b_2,...,b_n) \) (en este orden creo que luego no influye \( m \)), luego debemos repetir los valores que toma la v.a., para hacer equiprobables sus probabilidades y eso da orden \( O(t max\{b_1,b_2,...,b_n\}) \), no? El resto de las operaciones daría orden \( O(t) \).


Entonces hallar el óptimo \( h \) por fuerza bruta sería \( \max\{O(m n \log n), O( t \log \max(b_1,b_2,...,b_n)) \) no? obviamente \( b_i>1 \). No tengo muy claro el orden siguiendo este método.

 La cosa es que al final no cambia nada el orden respecto al método A, que era \( O(m n \log n) \)

Citar
El valor de \( t \) podría ser muy alto. Pero C bien podría ser menor a A y a B, no?

 Es imposible que \( C \) sea menor que A porque \( A=O(mnlog(n)) \) y  \( C=max\{O(mnlog(n)),O( t \log \max(b_1,b_2,...,b_n)) \).

Citar
En algún lugar, tu decías que no veías que esto pudiera ocurrir, es decir que C fuera menor a A, simplemente reordenando la forma de presentar los valores y probabilidades de la variable aleatoria.  Aunque posiblemente el orden de C y A sean iguales. Pensándolo en voz alta, como el método C lo único que trata es hacer equiprobables los pesos, y el orden del A está marcado por \( O(n \log n) \) éste método debería dar el mismo orden. Aunque en el programa que he hecho parece más fácil usar el método C que el A.

 Lo que yo decía es que siempre \( t\geq n \).

Saludos.

21 Mayo, 2024, 08:14 pm
Respuesta #35

Quema

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 2,109
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Ok, capaz que es más fácil escribir el código con el método C que con el A.