Resultados 1 al 8 de 8

Tema: problema con ejercicio de c++

  1. #1 problema con ejercicio de c++ 
    Iniciado
    Fecha de ingreso
    Sep 2008
    Mensajes
    21
    Descargas
    0
    Uploads
    0
    Hola a todos ^^

    Bueno os explico el ejercicio a grandes rasgos, tengo que crear un programa que simule una red de servidores que contienen películas y también tengo que simular las descargas de esas películas. Para ello crearé las clases Servidor, Petición y Película.

    El problema llega cuando me dicen que las peticiones pueden ser potencialmente infinitas, eso no es lo preocupante ya que solo puede haber un numero de peticiones en marcha igual al numero de servidores disponibles, de manera que las finalizadas o no aceptadas puedo eliminarlas. El problema viene cuando dados dos tiempos t1 y t2 tales que t1 <= t2 tengo que poner la película más solicitada, de manera que por cada petición aceptada tengo que guardar el tiempo en que se ha solicitado y la película que pide descargar

    ¿Cómo puedo guardar una cantidad de datos que es potencialmente infinita? (no puedo usar vectores dinámicos ni similares :/)
    www.skytablog.blogspot.com
    Citar  
     

  2. #2  
    Moderador Global
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.566
    Descargas
    58
    Uploads
    0
    ¿Cómo puedo guardar una cantidad de datos que es potencialmente infinita? (no puedo usar vectores dinámicos ni similares :/)
    Simplemente, estableciendo un umbral o límite, a partir del cual, cualquier valor (referido en tu caso al tiempo), superior a ese límite, puede considerarse "infinito".

    Un ejemplo similar lo tienes en el protocolo ICMP, cuando se usa el TTL (Time To Live) para definir los saltos (hops) necesarios en los que un paquete debe pasar por cada router o pasarela. En este protocolo, cada salto decrementa un contador establecido previamente. Si se supera este TTL, se puede considerar un nodo como inalcanzable. Este ejemplo, no tiene nada que ver con el problema que tienes en sí mismo, pero si es el mismo mecanismo.

    Un saludo.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  3. #3  
    Iniciado
    Fecha de ingreso
    Sep 2008
    Mensajes
    21
    Descargas
    0
    Uploads
    0
    Gracias por tu respuesta pero creo que no me refería a lo que me has explicado, igual no me he expresado con claridad, pondré un ejemplo:

    A mi lo primero que se me pasó por la cabeza (como es lógico teniendo en cuenta los recursos que me dejan usar) era hacer un vector, pero ese vector tenía que tener un tamaño definido, supongamos que le pongo tamaño 100. Pero esto no puedo usarlo ya que si a mi programa le llegan 101 peticiones aceptadas, entonces tendré un error de segmentación. Lo que yo busco es, explicado de una manera "mala", almacenar datos y poder manejarlos hasta que se acabe la memoria disponible para ello.

    Y aclarar que para hacer esto puedo utilizar listas, colas, vectores (no dinámicos), estructuras en árbol y estructuras más simples que las anteriores (structs, etc...)

    Gracias igualmente por la respuesta

    Edito para que quede mas claro: El error de segmentación se dará porque intentaré almacenar 101 tiempos en un vector con tan sólo 100 posiciones (de la 0 a la 99).
    www.skytablog.blogspot.com
    Citar  
     

  4. #4  
    Moderador Global
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.566
    Descargas
    58
    Uploads
    0
    Pues tu mismo te acabas de responder...

    Si no puedes usar vectores dinámicos, ni tampoco puedes usar vectores de tamaño fijo, entonces no te queda otra que usar una lista. Una pila o una cola también te pueden servir. Incluso un mapa... Los árboles para este caso, lo veo innecesario. La única diferencia entre usar una estructura u otra, radica en la forma en que se insertan y acceden a los datos.

    Un saludo.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  5. #5  
    Iniciado
    Fecha de ingreso
    Sep 2008
    Mensajes
    21
    Descargas
    0
    Uploads
    0
    Una pregunta mas (y ya la ultima xD), que me recomiendas usar? También evaluaran la eficiencia del programa y teniendo en cuenta que tendré que hacer recorridos para buscar los tiempos, qué sería lo mejor?
    www.skytablog.blogspot.com
    Citar  
     

  6. #6  
    Avanzado
    Fecha de ingreso
    Jan 2004
    Ubicación
    Argentina
    Mensajes
    427
    Descargas
    1
    Uploads
    0
    Y depende en que midas la eficiencia. Si la medis en tiempo de ejecucion ose funciones O() tendrias que ver si vas a tener que buscar, te convienen arboles, incluso AVL(con busquedas O(log n) contra el O(n) de una lista), pero si vas a procesar siempre el tope (osea las peticiones por orden de llegada osea siempre el tiempo aumenta y quedaria ordenada), por un tema conceptual queda mas claro usando una cola incluso es mas eficiente ya que tomar el primero es O(1) y poner en cola tambien es O(1).

    Te recomiendo usar TDA de la STL si no tenes que implementarlos vos especificamente en el ejercicio y si es en C++

    saludos
    <<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>
    No llores porque termino, sonrie porque sucedio-.
    Citar  
     

  7. #7  
    Iniciado
    Fecha de ingreso
    Sep 2008
    Mensajes
    21
    Descargas
    0
    Uploads
    0
    Creo que lo que haré al final será añadir los elementos ordenados en una cola y hacer un recorrido para acceder a ellos, muchas gracias por la ayuda a todos!
    www.skytablog.blogspot.com
    Citar  
     

  8. #8  
    Moderador Global
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.566
    Descargas
    58
    Uploads
    0
    tendrias que ver si vas a tener que buscar, te convienen arboles, incluso AVL(con busquedas O(log n) contra el O(n) de una lista)
    Esas cotas asintóticas dependerán de cómo estén los elementos en la lista (si están ordenados todos los elementos, si está parcialmente ordenado, si los elementos están aleatorios, etc...) y sobre todo dependerá de los algoritmos empleados en esas búsquedas. De hecho la cota de una búsqueda binaria sobre una lista ordenada, es precisamente O(log n), frente a una búsqueda lineal, con coste O(n), independientemente de su ordenación. Y para mantener una lista ordenada, basta con cuidar de que la inserción de un elemento se haga en la posición correcta dentro de esa lista, manteniendo por tanto, siempre el orden establecido.

    Un saludo.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

Marcadores
Marcadores
Permisos de publicación
  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •