jueves, 7 de junio de 2012
Ordenamiento y Búsqueda
Ordenamiento y Búsqueda:
ORDENAMIENTO
Uno de los procedimientos más comunes y útiles en el procesamiento de datos, es la clasificación u ordenación de los mismos. Se considera ordenar al proceso de reorganizar un conjunto dado de objetos en una secuencia determinada. Cuando se analiza un método de ordenación, hay que determinar cuántas comparaciones e intercambios se realizan para el caso más favorable, para el caso medio y para el caso más desfavorable.
La colocación en orden de una lista de valores se llama Ordenación. Por ejemplo, se podría disponer una lista de valores numéricos en orden ascendente o descendente, o bien una lista de nombres en orden alfabético. La localización de un elemento de una lista se llama búsqueda.
Tal operación se puede hacer de manera más eficiente después de que la lista ha sido ordenada.
Existen varios métodos para ordenamiento, clasificados en tres formas:
Intercambio
Selección
Inserción.
En cada familia se distinguen dos versiones: un método simple y directo, fácil de comprender pero de escasa eficiencia respecto al tiempo de ejecución, y un método rápido, más sofisticado en su ejecución por la complejidad de las operaciones a realizar, pero mucho más eficiente en cuanto a tiempo de ejecución. En general, para arreglos con pocos elementos, los métodos directos son más eficientes (menor tiempo de ejecución) mientras que para grandes cantidades de datos se deben emplear los llamados métodos rápidos.
Métodos de Ordenamiento Hechos en PHP
PHP (PHP Hypertext Pre-processor) es un lenguaje de programación usado en esencia para la creación de páginas web dinámicas.
El objetivo de este post es entregar una serie de métodos de ordenamiento codificados en PHP como se ha venido haciendo en otros lenguajes de programación. Seria buena idea evaluar el rendimiento con cada uno de los códigos y analizar en que casos es mejor cada uno de ellos, eso les dejo a cuenta suya .
Tipos de método de ordenamiento:
Método Burbuja: Ordenamiento Burbuja.php
Método shell: Ordenamiento Shell.php
Método quick sort: Ordenamiento por método Quick Sort.php
Método Inserción Directa: Ordenamiento por inserción Directa.php
Método Inserción Binaria: Ordenamiento por inserción Binaria.php
Método de Selección: Ordenamiento método Selección.php
Método Heap Sort: Ordenamiento método Heap Sort.php
El siguiente post pertenece al topic:
Métodos de Ordenamiento codificados en PHP.
El código realiza un Ordenamiento de datos numéricos haciendo uso del Método de la Burbuja:
METODO DE BUSQUEDA:
Como punto de partida, la información a buscar la tenemos que tener almacenada en una tabla de nuestra base de datos. Pongamos como ejemplo una tabla con artículos técnicos que llamaremos ARTICULOS. Esta tabla ARTICULOS tendrá como mínimo dos campos llamados TITULO y DESARROLLO, que almacenarán el título del artículo y su contenido respectivamente.
Los tipos de los campos a buscar deberán ser CHAR, VARCHAR o TEXT con sus variantes.
Ahora diseñaremos una página con un formulario y una caja de texto para escribir la cadena de consulta "busqueda" y llamar al script de búsqueda "buscar.php". Ejemplo:
<FORM METHOD=POST ACTION="buscar.php">
Buscar: <INPUT TYPE="text" NAME="búsqueda">
</FORM>
En el fichero buscar.php es donde está el click de la cuestión.
Hay que hacer la consulta que busque las palabras y devuelva como resultado los registros coincidentes. Hasta aquí parece fácil y podríamos resolverlo así:
SELECT * FROM ARTICULOS WHERE DESARROLLO LIKE '%$búsqueda%' OR TITULO LIKE '%$búsqueda%'
Pues esta consulta nos mostrará todos los artículos que en su titulo o en su contenido aparezca la frase de búsqueda tal y como nosotros la introducimos. Esto es muy limitado ya que un cambio en el orden de las palabras o un artículo de separación dará al traste con nuestra búsqueda no mostrando los resultados deseados.
Si bien podríamos depurar y mejorar la sintaxis de nuestra búsqueda utilizando el operador LIKE las búsquedas resultarían muy lentas y no tendrían el resultado esperado.
La solución mas eficiente es utilizar los índices FULLTEXT específicamente indicados para estos menesteres. Pues bien esto implica ir a nuestra base de datos, y crear un índice FULLTEXT con todos los campos que deseamos incluir en nuestra búsqueda, que en nuestro caso son TITULO y DESARROLLO. Para ello basta con el phpmyadmin o bien escribir la instrucción directamente:
ALTER TABLE ARTICULOS ADD FULLTEXT(TITULO, DESARROLLO);
Una vez creado el índice la instrucción SQL para buscar será:
SELECT * FROM ARTICULOS WHERE MATCH(TITULO, DESARROLLO) AGAINST ('$busqueda')
Esta línea utiliza la función MATCH ... AGAINST ... que encuentra el texto buscado, usando consultas en lenguaje natural parecido a como lo hacen los motores de búsqueda. Además, se calcula internamente una puntuación en función de cómo aparecen los términos buscados dentro de nuestro artículo.
Métodos de Ordenamiento
Es la operación de arreglar los registros de una tabla en algún orden secuencial de acuerdo a un criterio de ordenamiento.
El ordenamiento se efectúa con base en el valor de algún campo en un registro.
El propósito principal de un ordenamiento es el de facilitar las búsquedas de los miembros del conjunto ordenado.
Ej. De ordenamientos:
Dir. Telefónico, tablas de contenido, bibliotecas y re diccionarios, etc.
El ordenar un grupo de datos significa mover los datos o sus referencias para que queden en una secuencia tal que represente un orden, el cual puede ser numérico, alfabético o incluso alfanumérico, ascendente o descendente.
Ejemplos:
Los métodos de ordenación por selección se basan en dos principios básicos:
Seleccionar el elemento más pequeño (o más grande) del arreglo.
Colocarlo en la posición más baja (o más alta) del arreglo.
A diferencia del método de la burbuja, en este método el elemento más pequeño (o más grande) es el que se coloca en la posición final que le corresponde.
Ejemplo:
<?php
function selectionsort($A,$n)
{
for ($i=0; $i<$n-1; $i++)
{
$min=$i;
for($j=$i+1; $j<$n; $j++)
if($A[$min] > $A[$j])
$min=$j;
$aux=$A[$min];
$A[$min]=$A[$i];
$A[$i]=$aux ;
}
return $A;
}
function main()
{
$VectorA=array(5,4,3,2,1);
$VectorB=selectionsort($VectorA,sizeof($VectorA));
for($i=0;$i<sizeof($VectorB);$i++)
echo $VectorB[$i]."\n";
}
main();
?>
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario