Autor
|
Tema: Como crear un vector con 3/4 de probabilidad de exito (Leído 3,142 veces)
|
alpachino98
Desconectado
Mensajes: 37
Valar Morghulis
|
El programa debe realizar una búsqueda dentro de varios vectores, de 10,de 100, de 1000...el problema es que el vector antes tenia una probabilidad de exito de 1/2 porque solo creaba vectores con numeros pares. Lo que tengo que hacer ahora es conseguir que la probabilidad sea de 3/4. Esta era la función crear vector original: void CrearVector (Vector v, int n) { int i; // Guarda en el vector los números pares incluidos en el intervalo [0,2n[ for ( i = 0; i < n; i++ ) v[i] = i*2; } Y esta nuestra modificación: void CrearVector (Vector v, int n) { int i=0; cout<<n<<endl; // Guarda en el vector los números pares incluidos en el intervalo [0,2n[ while( i<(0.75*n)) { if (i%2==0) v[i]=i*2; else v[i] = i; i++; } for ( i; i < n; i++ ) v[i]=i*2; for(i=0;i<n;i++) cout<<v[i]<<" "; } En nuestra modificación salen tanto numeros pares como impares pero hasta 3/4 del tamaño de nuestro vector, el problema es que salen desordenados y tenemos que realizar una busqueda binaria. Si alguien sabe como hacer que salgan ya ordenados o otro metodo para que la probabilidad sea de 3/4. Gracias de antemano
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Si no entendí mal, quieres que los primeros 3/4 del vector sean los números del 0 al n*(3/4), y el resto, todo pares (?)
En cualquier caso, no entiendo la finalidad del algoritmo de crear el vector. En el segundo código, en el while, si i es par, lo multiplicas por 2. Eso quedaría: 1, 4, 3, 8, 5, 12... ¿Por qué así? ¿Por qué multiplicar por 2 los pares?
|
|
|
En línea
|
|
|
|
Serapis
|
Te leo y releo, pero no acabo de entender qué quieres decir con "probabilidad de 3/4"... Probabilidad de 3/4 ¿de QUÉ?. Tampoc me queda claro, cuál es el propósito dle programa... pero mejor te digo lo que me parece entender y tu amplias detalles.
Creas vectores de números pares? (o también impares?). Ordenados?). Si están ordenados y están consecutivos, es superfluo generarlo, siempre podrás calcular al instante el enésimo valor de la secuencia.
Si multiplicas un número (par) por 0'75 (3/4), es equivalente a un bucle donde vas sumando cada vez 1'5: 2: (2 * 0'75) = 1'5 4: (4 * 0'75) = 3 6: (6 * 0'75) = 4'5 8: (8 * 0'75) = 6 Luego preguntarle si el número que sal es par, es perder el tiempo, matemáticamente es demostrable que en esa secuencia el resultado (de multiplicar n * 0'75) será par, siempre que 'n' sea congruente con 8. ((n modulo 8) = 0 ), en resumen siempre que sea múltiplo de 8. Esto hace innecesario la multiplicación. (no veo cual es el objetivo de todo esto).
Luego aparece 'otro' 3/4 pero este dices que es el tamaño del array... y luego dices que haces una búsqueda binaria...
En fin, es imposible entender qué es lo pretendes hacer. Explícate ordenadamente y con claridad. Tu tienes claro que necesitas, pero al explicarte te dejas cosas en 'el tintero' como si los demás ya nos hubieran explicado el planteamiento del problema...
|
|
|
En línea
|
|
|
|
alpachino98
Desconectado
Mensajes: 37
Valar Morghulis
|
El programa busca números aleatorios dentro de diferentes vectores, el programa busca por el metodo de busqueda secuencial, busqueda secuencia con parada, secuencial con centinela y por busqueda binaria ( por eso debe estar odenado sino la busqueda binaria no tiene sentido).
Siento no saber expresarme bien pero os pongo lo que me piden ( lo subrayado):
Como los costes varían en función de la posición donde se encuentre el elemento (o de la probabilidad de que esté), hay que repetir ejecuciones con el mismo tamaño para medir los costes medios. Modifica el programa de manera que calcule la media de los valores obtenidos al repetir los algoritmos de búsqueda sobre sobre 1000 búsquedas aleatorias. "Modifica también el programa para que la probabilidad de éxito sea ¾ (tal como está, la probabilidad es ½)". Es importante que las búsquedas aleatorias (con y sin éxito) se distribuyan uniformemente sobre todo el vector. Llena la siguiente tabla con estos valores y comenta los resultados.
La probalidad de encontrar un numero en uno de estos vectores es 1/2 porque, si os fijais en primero trozo de código que he puesto, el vector solo tienes números pares entonces la probalidad de encontrar un numero es 1/2 (si es o no par ). Para aumentar esta probalidad a 3/4 habiamos pensado meter todos los numeros pares como estaba antes pero ademas meter la mitad de los impares, por ejemplo un impar si y otro no.
|
|
|
En línea
|
|
|
|
Serapis
|
... La probalidad de encontrar un numero (par) en uno de estos vectores es 1/2 porque, si os fijais en primero trozo de código que he puesto, el vector solo tienes números pares entonces la probalidad de encontrar un numero (par)es 1/2.
Para aumentar esta probalidad a 3/4 habiamos pensado meter todos los numeros pares como estaba antes pero ademas meter la mitad de los impares, por ejemplo un impar si y otro no.
Ok, con estos dos párrafos ya queda claro... lo que te piden. Como las búsqeudas y la elección aleatoria, parece no serte problema, si no solo el añadido de dichos números, vamos a ellos. Consiéralo al revés... si 3/4 es la probabilidad requierida (para los pares), entonces 1/4 será la de los impares... luego parece más sencillo rechazar 1 de cada dos impares que añadir pares y uno de cado 2 impares... Bucle para k desde 0 hasta n Si ((k+1 modulo 4)<>0) luego // esto es, añade el 0, 1, el 2 pero no el 3. Añadir k al array Fin si Fin bucle Añadidos: 0,1,2 4,5,6 8,9,10 12,13,14 ... Otra forma de verlo Bucle para k desde 0 hasta n, en saltos de 4 Añadir k al array Añadir k+1 al array Añadir k+2 al array // No se añade k+3 es el impar que rechazamos... Fin bucle
|
|
|
En línea
|
|
|
|
alpachino98
Desconectado
Mensajes: 37
Valar Morghulis
|
Bucle para k desde 0 hasta n Si ((k+1 modulo 4)<>0) luego // esto es, añade el 0, 1, el 2 pero no el 3. Añadir k al array Fin si Fin bucle Ahora si me has entendido, siento no haberme explicado mejor, esto es lo que necesito aunque no termino de entender lo de "modulo 4)<>0" a que te refieres con modulo de 4?
|
|
|
En línea
|
|
|
|
Serapis
|
No conoces el operador 'módulo'?. Módulo es el valor que resta de una división
20/4 = 5, resto=0 21/4 = 5, resto = 1 ---> o lo que es lo mismo: 21 modulo 4 = 1
Se le pregunta que si k+1 NO es múltiplo de 4, lo añada... prueba con diferentes números para k...
k 00+1 modulo 4 = 3 se añade, es distinto de 0. 01+1 modulo 4 = 2 se añade, es distinto de 0. 02+1 modulo 4 = 1 se añade, es distinto de 0. 03+1 modulo 4 = 0 NO se añade, es igual a 0. 04+1 modulo 4 = 3 se añade, es distinto de 0. 05+1 modulo 4 = 2 se añade, es distinto de 0. 06+1 modulo 4 = 1 se añade, es distinto de 0. 07+1 modulo 4 = 0 NO se añade, es igual a 0. 08+1 modulo 4 = 3 se añade, es distinto de 0. 09+1 modulo 4 = 2 se añade, es distinto de 0. 10+1 modulo 4 = 1 se añade, es distinto de 0. 11+1 modulo 4 = 0 NO se añade, es igual a 0. 12+1 modulo 4 = 3 se añade, es distinto de 0. 13+1 modulo 4 = 2 se añade, es distinto de 0.
|
|
« Última modificación: 7 Octubre 2017, 17:32 pm por NEBIRE »
|
En línea
|
|
|
|
alpachino98
Desconectado
Mensajes: 37
Valar Morghulis
|
No conoces el operador 'módulo'?. Módulo es el valor que resta de una división
Si vale ya lo entiendo, si sabia lo que era pero no sabia a que te referias con eso de <>0. Muchas gracias por tu ayuda.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Cuál es la probabilidad de...?
Foro Libre
|
1mpuls0
|
4
|
3,074
|
10 Enero 2011, 03:29 am
por 1mpuls0
|
|
|
¿Es posible crear un vector de iteradores?
Programación C/C++
|
Orubatosu
|
7
|
3,667
|
27 Noviembre 2014, 23:38 pm
por _Enko
|
|
|
Crear matriz partiendo de un vector ingresado
Programación C/C++
|
Faceless
|
7
|
3,193
|
5 Octubre 2016, 23:41 pm
por Faceless
|
|
|
C++ OOP vectores de clases - como crear un vector de una clase
« 1 2 3 »
Programación C/C++
|
GisiNA
|
22
|
16,127
|
21 Febrero 2017, 17:12 pm
por GisiNA
|
|
|
N es éxito si alguien sabe como hacerlo q me de respuesta
Dudas Generales
|
Yohan
|
0
|
1,778
|
27 Marzo 2017, 03:03 am
por Yohan
|
|