Fundamentos de redes y seguridad
Enviado por Leonardo Vidal • 22 de Marzo de 2021 • Ensayo • 3.073 Palabras (13 Páginas) • 80 Visitas
Título de la tarea
Nombre Alumno
Nombre Asignatura
Instituto IACC
Ponga la fecha aquí
Desarrollo
Pregunta 1 : | Enunciado |
Un amigo suyo tiene en mente un numero entero positive x que representa su mes de nacimiento.
Respuesta : con una function recursive que mediante dos indices vayan buscando el numero de mes uno desde el principio y el Segundo indice desde el final hasta el principio del array. | |
Codigo PHP | |
<?php /*Funcion recursiva en php*/ /** Buscar un valor en un array */ /* Busca mes_nacimiento en $meses[1...$rango_fin], mediante dos indices ($rango_inicio y $rango_fin) , el primero buscara el mes desde el indice 0 hasta el ultimo indice del array, y el segundo indice lo hara desde el ultimo indice hasta el principio, si ninguno de las dos variables no encuentran al numero de mes, entonces la funcion retornara un -1. */ function busquedaRecursiva($meses, int $rango_inicio, int $rango_fin, int $mes_nacimiento) { /**Si el rango_fin es menor al rango_inicio quiere * decir que la funcion recorrio todo el array de meses sin encontrar * el numero de mes_nacimiento, entonces terminara el ciclo recursivo,devolvera * un valor -1 e imprimira que "El mes x no existe" */ if ($rango_fin < $rango_inicio) return -1; /**Si la funcion recursiva encontro el numero de mes_nacimiento * entonces devolvera el inidice $rango_inicio e imprimira el * numero de mes y el indice donde se encontro */ if ($meses[$rango_inicio] == $mes_nacimiento) return $rango_inicio; /**Si la funcion recursiva encontro el numero de mes_nacimiento * entonces devolvera el inidice $rango_fin e imprimira el * numero de mes y el indice donde se encontro */ if ($meses[$rango_fin] == $mes_nacimiento) return $rango_fin; /**Si ninguna de las condiciones anteriores de la funcion recursiva * se cumnple entonces seguira iterando la funcion recursiva con el * siguiente $rango_inicio , decrementando el rango_fin hasta que uno * de los dos indices logre encontrar el numero a buscar, caso contrario * devolvera un valor -1 y se dara por sentado qeu el numero no se encontro * en el array de meses. */ return busquedaRecursiva($meses, $rango_inicio+1, $rango_fin-1, $mes_nacimiento); } /* Definiendo Variables*/ $meses = array(1,2,3,4,5,6,7,8,9,10,11,12); $i; $rango_fin = count($meses); $mes_nacimiento = 15; /**Llamando a la funcon recursiva para que encuentre el mes dentro * del arreglo de meses */ $resultado = busquedaRecursiva($meses, 0, $rango_fin - 1, $mes_nacimiento); /* Si el rango_fin no llego a un indice menor a 0 entonces encontro el numero a buscar en el array meses */ if ($resultado != -1) { echo "El mes".$mes_nacimiento." existe y su indice es ".$resultado."."; } else { /**En caso de que la funcion retorne un -1 se imprimira el * siguiente mensaje. */ echo "El mes ".$mes_nacimiento." no existe."; } ?> | |
Captura de pantalla | |
Pregunta 2 : | Enunciado |
¿Que tipo de complejidad asocial a este problema?
|
Pregunta 3: | Enunciado |
¿Que clase de algoritmo es, cualitativo o cuantitativo? ¿Por qué ?
|
Pregunta 3: | Enunciado |
Tomando en cuenta el algoritmo realizado, reflexione y discuta sobre cual tipo de algoritmo seria major usando como criterio su magnitud.
|
Ejercicio 2 : | Enunciado |
Mencione y describa al menos 2 problemas que puedan ser resuletos utilizando la tecnica “Divide y Venceras” y ademas señale en que se diferencia con la tecnica Top-Down. | |
Ejemplo 1 | Código PHP |
<?php class EncontrarMaximo { public function __construct() {
} public static function encontrarMaximo($arreglo,$indice_inicial,$indice_ultimo):int{ $medio = 0; $maximo_izquierdo = 0; $maximo_derecho = 0; /*** Divide el array en dos partes * para encontrar el maximo numero en cada para del array dividido * luego compara ambos numeros en cada iteracion y va devolviendo * el numero mayor de forma recursiva. */ if($indice_inicial==$indice_ultimo) { return $arreglo[$indice_inicial]; } else { $medio = floor(($indice_inicial+$indice_ultimo)/2); $maximo_izquierdo = EncontrarMaximo::encontrarMaximo($arreglo,$indice_inicial,$medio); $maximo_derecho = EncontrarMaximo::encontrarMaximo($arreglo,$medio+1,$indice_ultimo); } if($maximo_izquierdo>$maximo_derecho) { return $maximo_izquierdo; } else { return $maximo_derecho; } } } $findMax = new EncontrarMaximo; echo $findMax::encontrarMaximo(array(200,5,8,12,455,111,38,56,72,23),0,9); ?> | |
Ejemplo 2 | Código PHP |
<?php /**Una busqueda binaria tiene dos requisitos: * a) El array debe tener valores unicos, que no se repitan. * b) El array debe estar ordenado de forma ascendente. */ class Busquedabinaria { public function __construct(){ } /** Funcion que recibe un array y un elemento a buscar, * la funcion retornara un entero */ public static function busquedaBinaria($arreglo,$numero):int { /**Si el arrray es Nulo o esta vacio, entonces * se imprime un mensaje anunciandolo. */ if($arreglo==NULL || sizeof($arreglo)==0) { echo "Error: el arreglo esta vacio."; return -1; } /**Caso contrario llama a la funcion busquedaBinaria2 y le entrega el array * junto con un 0 que hacer referencia al indice inicial , el ultimo indice * del array, y el numero a buscar, esta funcion retornara un entero que hace * referencia al indice del numero a buscar en el array. */ return Busquedabinaria::busquedaBinaria2($arreglo,0,sizeof($arreglo)-1,$numero); } /**Funcion que se encarga de ir segmentando el array e ir tambien decidiendo * en que partes segmentadas ir busscando el indice del numero a buscar * en forma recursiva.Retorna un indice entero del array */ public static function busquedaBinaria2($arreglo,$indice_inicial,$indice_ultimo,$numero):int { /**Si los rangos del array estan fuera de rango, * entonces se imprimira un mensaje. */ if($indice_inicial>$indice_ultimo || $indice_inicial<0 || $indice_ultimo>=sizeof($arreglo)) { echo "Error:el indice del array esta fuera de rango"; } /**Si la busqueda termino, entonces se verificara que el numero * entero fue encontrardo y se retornara su indice, caso contrario * se retornara -1 , ya que indica que no queda elementos en el array * y este esta vacio y que la busqueda ha finalizo. * */ if($indice_inicial==$indice_ultimo) { if($arreglo[$indice_inicial]==$numero) { return $indice_inicial; } else { return -1; } } else { /**De lo contrario se calcula el nuevo valor del ultimo indice al ser dividido en * dos partes el array, y se continua buscado en esta nueva division del array * el numero y con ello su indice, de forma recursiva. */ $nuevo_indice_ultimo = floor($indice_inicial + ($indice_ultimo-$indice_inicial)/2); /**Si el numero a buscar esta en el indice desde donde se dividio el array, osea en la mitad, * entonces se notifica que se encontro el indice del numero buscado, al hacer la segmentacion * del array. */ if($numero==$arreglo[$nuevo_indice_ultimo]) { return $nuevo_indice_ultimo; } elseif($numero<$arreglo[$nuevo_indice_ultimo]) { /**caso contrario, si el numero a buscar esta en la primera mitad del * array dividido, entonces se procede a seguir buscando recursivamente en la primera mitad * del array dividido y se establecen los numeros valores de los indices inicial y ultimo */ return BusquedaBinaria::busquedaBinaria2($arreglo,$indice_inicial,$nuevo_indice_ultimo-1,$numero); } else { /**caso contrario, se procedera a buscar en la segunda mitad de la misma forma que en la condicion * anterior explicada.*/ return BusquedaBinaria::busquedaBinaria2($arreglo,$nuevo_indice_ultimo+1,$indice_ultimo,$numero); } } } } /**se define el array de elementos unicos y ordenados de forma ascedente */ $arreglo = array(2,5,8,12,16,23,38,56,72,91); $busquedaBinaria = new BusquedaBinaria; echo $busquedaBinaria::busquedaBinaria($arreglo,16); /**RESUMEN */ /** * La busqueda binaria tal como su nombre lo indica , procede a segmentar ,dividir, o cortar el * array de los elementos, y va preguntando si el numero a buscar se encuentra en la mitad del array, * buscara en la primera mitad del array si es que el numero abuscar es menor al numero que esta en la mitad , * o en la segunda mitad si el numero a buscar es mayor al numero que se encuentra en la mitad del array, * y procede de esta manera recursivamente hasta encontrar el numero a buscar y retorna su indice en donde * se encuentra ubicado el numero dentro del array inicial. */
?> |
...