Pascal/Turbo Pascal - help!!! BUSQUEDA DE FIBONACCI

 
Vista:

help!!! BUSQUEDA DE FIBONACCI

Publicado por amanda (3 intervenciones) el 08/09/2004 13:17:19
Necesitaría ayuda sobre dónde encontrar la búsqueda de Fibonacci, que NO es lo mismo que la serie de Fibonacci!!, es una búsqueda como la binaria (hasta dónde yo se). Si alguien sabe, dónde buscarla, o tal vez cómo funciona y su código se lo agradezco. Amanda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:help!!! BUSQUEDA DE FIBONACCI

Publicado por ivan (37 intervenciones) el 09/09/2004 03:02:05
La busqueda de fibonacci es una modificacion de la busqueda binaria, dandole mas rapidez, ya que en el algoritmo solo intervienen sumas y restas para el calculo de la "mitad" y no divisiones como en la busqueda binaria. La idea es utilizar los numeros de la serie para generar mediante una suma o resta el indice del arreglo donde podria estar el valor a buscar, primero se avanza en la serie hasta encontrar un valor de la serie que sea mayor o igual que el numero maximo de elementos del arreglo. Supongamos que Fn es el numero de la serie que satisface lo anterior, entonces usando los numeros Fn-1 y Fn-2 de la serie se comienza la busqueda, sumando o restando, segun corresponda, Fn-2 a la variable que se usa como indice del arreglo para encontrar el valor deseado, en la medida que se disminuye la serie. Si la serie llego a su fin antes de encontrar el valor, entonces la busqueda no tuvo exito. Aca te paso la implementacion del algoritmo, es mejor que mil palabras :D...
function busqueda_fibonacci(lista: TipoArreglo; n, a: integer): integer;
var (* "n" representa la longitud del arreglo y "a" es el valor a buscar *)
f1,f2,t,mid: integer;
begin
f1:= 1; f2:= 1;
while (f1 < n) do
begin (* Busco el numero en la serie que satisface que f1>=n *)
f1:= f1 + f2; (* siguiente numero de fibonacci *)
f2:= f1 - f2; (* f2 almacena el numero anterior *)
end;
f1:= f1 - f2; (* me muevo a los dos anteriores *)
f2:= f2 - f1;
mid:= n - f1 + 1;
while (a <> lista[mid]) do
begin
if (mid < 0) or (a > lista[mid]) then
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:help!!! BUSQUEDA DE FIBONACCI

Publicado por ivan (37 intervenciones) el 10/09/2004 18:55:25
sigue asi:
begin
if f1 = 1then begin mid:= -1; break end;
mid:= mid+f2;
f1:= f1-f2;
f2:= f2-f1;
end
else
begin
if f2=0 then begin mid:= -1; break end;
mid:= mid-f2;
t:= f1-f2;
f1:= f2;
f2:= t
end;
end;
busqueda_fibonacci:= mid;
end;

Perdon pero no habia revisado cuando lo postee, recien me di cuenta hoy q faltaba codigo, se ve q no entro todo en el post, :S . Bueno ahora ta completo, espero q te sirva....Suertess
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar