Hace unos meses en una de mis clases de economia surgio esa pregunta.
El profesor en su momento nos lo explico con varias graficas de microeconomia y 2 horas completas de Clase que actualmente no recuerdo en su totalidad.
Quiero ver cuales son sus opiniones y Argumentos al respecto.
El contatador de cartas debe de ser mayor a 0 y cada que determinemos que es un "mazo nuevo" reiniciarlo a 0
El contador debe de ser un multiplo exacto de 52
Y el acumulador debe de ser 0
En uno de mis videos mostre como este acumulador sube o baja desde un valor muy alto a un valor muy bajo para llegar a 0 al finalizar el mazo actual.
El el programa main que mostre siempre da de salida.
Código:
mazo nuevo Cantidad de Barajas 6
Ahora si cambio el algoritmo para usar N cantidad de barajas a un numero random obtengo
Código:
mazo nuevo Cantidad de Barajas 73 mazo nuevo Cantidad de Barajas 41 mazo nuevo Cantidad de Barajas 36 mazo nuevo Cantidad de Barajas 31 mazo nuevo Cantidad de Barajas 1 mazo nuevo Cantidad de Barajas 56 mazo nuevo Cantidad de Barajas 71 mazo nuevo Cantidad de Barajas 37 mazo nuevo Cantidad de Barajas 90 mazo nuevo Cantidad de Barajas 38 mazo nuevo Cantidad de Barajas 2 mazo nuevo Cantidad de Barajas 4 mazo nuevo Cantidad de Barajas 44 mazo nuevo Cantidad de Barajas 4 mazo nuevo Cantidad de Barajas 4 mazo nuevo Cantidad de Barajas 5 mazo nuevo Cantidad de Barajas 5 mazo nuevo Cantidad de Barajas 20 mazo nuevo Cantidad de Barajas 3 mazo nuevo Cantidad de Barajas 41 mazo nuevo Cantidad de Barajas 80 mazo nuevo
Aun asi existen falsos positivos, en la salida anterior yo se apriori (Por que lo programe yo) que el valor random de numero de bajaras en el mazo este entre 6 y 112 y si vemos hay valores que nos dan "3" o algo menor a 6 es en falso positivo.
¿Por que se da esto?
Debido al orden aleatorio de un mazo de juego es posible que todas las condiciones que se mencionaron se cumpla antes de terminarse realmente un mazo.
Nuevamente las condiciones son
El contatador de cartas debe de ser mayor a 0 y cada que determinemos que es un "mazo nuevo" reiniciarlo a 0
El contador debe de ser un multiplo exacto de 52
Y el acumulador debe de ser 0
¿Hay forma de evitar falsos positivos?
Segun pienso NO ya que en un escenario real no puedes conocer a priori todas las variables...
¿Para que sirve determinar el numero de barajas usadas?
Como se menciona en el algoritmo de conteo de cartas es deseable saber el numero de barajas usadas en un mazo de juego para determinar si es buen momento de apostar.
El video de que comento es el siguiente:
Aun asi el código ahi mostrado no esta tan avanzado como el código que muestro en este post, pero sirve para el ejemplo didáctico de conteo de cartas aquí mostrado solo con ligeros cambios.
char*no_repetidos = NULL;//Variable auxiliar para determinar si un numero ya fue agregado o no
int*desorden = NULL;//Contenedor con los numeros en desorden y no repetidos
int r =0;//variable temporal para el numero pseudo-aleatorio
registerint i =0;//contador de numeros en el arreglo desorden
srand(time(NULL));//inicializamos nuestra funcion random, en otros sistemas se puede utlizar algun otro generador de numeros aleatorios ya que esta implementacion es muy pobre
//Los siguientes ciclos son usados para asignar espacio a no_repetidos, y desorden respectivamennte se puede omitir el ciclo ya que rara vez calloc devuelve NULL, pero siempre es bueno validar que no exista error en el retorno de calloc
Numeros aleatorios no repetidos: 9675328041 Numeros aleatorios no repetidos: 6859730142 Numeros aleatorios no repetidos: 3786251904 Numeros aleatorios no repetidos: 3786251904 Numeros aleatorios no repetidos: 3786251904 Numeros aleatorios no repetidos: 0642193587 Numeros aleatorios no repetidos: 0642193587 Numeros aleatorios no repetidos: 0642193587 Numeros aleatorios no repetidos: 7506198234 Numeros aleatorios no repetidos: 7506198234
Cada 2 lineas es una salida de 10 numeros del 0 al 9 no repetidos y en desorden...
Noten que hay veces que se repite por la pobre implementación de rand() con time(), recomiendo si pueden implementar otra forma de aleatorios estaría mucho mejor el programa.
Proximamente agregare el video explicando el código mencionado.
Tengo un detalle al momento de eliminar un nodo del arbol binario.
Dada la estructura:
Código
struct nodo {
struct nodo *padre;
struct nodo *izquierdo;
struct nodo *derecho;
char*valor;
};
Ya puedo agregar y buscar nodos sin problema y al momento de eliminar nodos hay varios casos ya aborde la mayoria de ellos solo tengo un detalle con el ultimo.
Casos:
El Nodo a eliminar no tiene hijos (Listo)
El Nodo a eliminar solo tiene un hijo derecho o izquierdo (Listo)
El Nodo a eliminar tiene ambos hijos (Pendiente)
El detalles es el decidir como reconectar los nodos cuando el noda eliminar tiene 2 hijos... (Si es un problema de algoritmo pero lo pongo aqui por que esta en C)
Si esos 2 hijos no tienen hijos no hay problema simplemente selecciono uno y lo pongo en el lugar del nodo eliminado. Pero el peor de los casos es cuando ambos nodos tienes 2 hijos cada uno mas o menos asi:
Código:
p | -> n / \ d i / \ / \ d i d i
La pregunta que tengo aqui seria la siguiente...
Tengo que hacer una funcion que reconecte y reorganize los nodos del arbol ¿Que recomendarian ustedes una funcion iterativa o una recursiva?
La otra solucion que tengo es manejar el nodo a eliminar como un arbol independiente desvincularlo del arbol principal y recorrer este nuevo subarbol de izquierda a derecha o viceversa y agregar cada nodo del subarbol al arbol principal, con excepcion de nodo a eliminar que seria la raiz del subarbol.
//No tiene hijos, hay que determinar si es el hijo derecho o izquierdo de su padre y desvincularlo
padre = n->padre;
if(padre->derecho == n){
padre->derecho = NULL;
free_nodo(n);
}
else{
padre->izquierdo = NULL;
free_nodo(n);
}
}
else{
if(n->derecho != NULL && n->izquierdo != NULL){
// Tiene 2 Hijos
padre = n->padre;
// Detalle aqui.....
}
else{
if(n->derecho != NULL){//Solo tiene al hijo derecho
derecho = n->derecho;
padre = n->padre;
if(padre->derecho == n){//hay que determinar si es el hijo derecho o izquierdo de su padre y vincular dicho nodo, con el nodo derecho del n actual y liberar n despues de eso
padre->derecho = derecho;
free_nodo(n);
}
else{
padre->izquierdo = derecho;
free_nodo(n);
}
}
else{//Solo tiene al hijo izquierdo
izquierdo = n->izquierdo;
padre = n->padre;
if(padre->derecho == n){//hay que determinar si es el hijo derecho o izquierdo de su padre y vincular dicho nodo, con el nodo izquierdo del n actual y liberar n despues de eso
padre->derecho = izquierdo;
free_nodo(n);
}
else{
padre->izquierdo = izquierdo;
free_nodo(n);
}
}
}
}
}
else{
printf("No existe un nodo con el valor \"%s\" en el arbol\n",valor);
Ya tengo esos 100 pero necesito encontrar alguna lista lo bastante amplia para pasarla a texto (Un libro por linea) Solo les pediria si me ayudaran a con links de listas de libros yo me encargo de pasarlos a texto.
Espero y me puedan ayudar
Si alguien sabe de alguna base de datos publica con muchisimos libros favor de avisarme
In certain circumstances it is possible to derive the private key of server regardless of the size of the used modulus. Even RSA keys of 4096 bits can be factored at the cost of a few CPU cycles and computational resources.
Estoy tratando de implementar un pequeño programa que hice para hacerlo un servicio WEB... pero no estoy seguro de como aplicarlo en PHP
Tengo la siguiente estrucuta de C
Código
struct temp{
unsignedchar*valor;
unsignedint bytes;
};
Mi duda es como implementarlo correctamente en PHP, segun lei lo mas parecido es un clase en PHP
entonces tengo:
Código
<?php
class temp {
public$valor[];
public$bytes;
}
?>
Mi duda es como decir que $valor tiene que ser de X cantidad;
Por ejemplo cuando leeo desde un archivo X cantidad de bytes en $valor puedo saber que $valor tiene X longitud pero no se como hacerlo a mano... esto es
Voy a crear una instanacia de esa clase y al elemento $valor le quier agregar un valor en el primer elemento y posteriormente tal vez le agrege mas. Simplemente lo agrego como
Código
$valor[1]=200;
He usado arrays pero para este caso no creo que sea lo mas eficiente..
A ver tengo mi ejemplo de numeros de longitud variable o mejor conocidos como BigInt... (Implementacion propia) en C.
Estoy sumando byte a byte y el resultado lo guardo en una variable de 2 bytes por ejemplo cuando sumo 255 + 255 el primer byte del resultado tiene 255 y lo demas esta en el segundo byte el cual posterior al ciclo lo sumo al siguiente byte de la cadena en caso de no existir lo anexo al final y todo bien.
El detalle que al final si sumo una larga serie de 255 continuos byte a byte llegara un momento en el que la variable se desborda...
Cual es la mejor solucion para esto? Guardar el resultado en una variable de 4 bytes y validar si existe acarreo en los bytes 3 y 4?
Que pasara cuando la variable de 4 bytes no sea suficiente...