102
TÉCNICAS DE DISEÑO DE ALGORITMOS
• La primera idea consiste en acotar, usando un procedimiento análogo al del problema anterior, los elementos n÷2 y (n÷2)+m–1. Esto nos dejaría en medio de ambos los elementos buscados. • Sin embargo, existe un método mejor, cuya idea consiste en localizar el elemento n÷2 mediante el procedimiento del k-ésimo (problema 2.15), y luego utilizar el procedimiento Menores del problema anterior (2.16) sobre el subvector [n÷2..ult]: PROCEDURE Medios(VAR a:vector;prim,ult,l,m); VAR x:INTEGER; BEGIN x:=Kesimo(a,prim,ult,l); Menores(a,l,ult,m) END Medios;
El procedimiento que hemos implementado aquí es un poco más general, puesto que busca los elementos que ocuparían las posiciones l, l+1,...,m, con l < m. Basta invocarlo con l = (n÷2) para obtener el método pedido. Y como puede observarse, la complejidad de este método es lineal, por serlo cada uno de los procedimientos que lo componen.