algorytmy rózne, Wyszukiwanie liniowe i binarne, Program liniowe;


Politechnika

Zielonogórska

Wydział Elektryczny

Anna Rożnowska

Marcin Kozłowski

Gr. lab.

25A

Nr.

ćwicz.

2

Ocena:

Laboratorium algorytmy i struktury danych.

Temat ćwiczenia:

Przeszukiwanie liniowe, binarne, haszowanie.

Data wykon. ćw.

18-10-99

Data

oddania

spraw.

25-10-99

Sprawdz.

Przeszukiwanie liniowe.

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

NIE TAK

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

NIE

0x08 graphic

0x08 graphic

0x08 graphic

TAK

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

program liniowe;

const n=10;

type tablica=array[1..n] of string;

var a:tablica;

i:integer;

b:string;

Begin

for i:=1 to n do

begin

writeln('podaj ',i,' element tablicy: ');

readln(a[i]);

end;

i:=1;

writeln('podaj szukany element');

readln(b);

for i:=1 to n do

if a[i]=b then

begin

writeln('istnieje');

exit;

end;

writeln('nie istnieje');

End.

Przeszukiwanie binarne

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

NIE TAK

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
NIE TAK

Program binarne;

Const n=20;

tablica:array[1..n] of real;

ostat, srod, pierw: integer;

a:tablica;

b:real;

Begin

pierw:=1;

ostat:=n;

for srod:=1 to n do readln (a[srod]);

write(`Podaj szukany element: `);

readln(b);

srod:=(ostat+pierw) div 2;

while(a[srod]<>b) and (ostat<>pierw) do

begin

if a[srod]<b then ostat:=srod

else pierw:=srod;

srod:=(ostat+pierw) div 2

end;

if a[srod]=b then writeln(`Element istnieje')

else writeln(`Element nie istnieje');

End.

Haszowanie

Wpisywanie

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

NIE

0x08 graphic

0x08 graphic

TAK

0x08 graphic

Szukanie

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

NIE

0x08 graphic
0x08 graphic

0x08 graphic

TAK

0x08 graphic
0x08 graphic

T

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

Haszowanie

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

NIE

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

TAK

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

NIE

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

TAK

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

NIE

0x08 graphic

0x08 graphic

TAK

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

Program Haszowanie;

Uses Crt;

Const n=25;

Type

Wskaznik = ^elem;

elem=record

nast:wskaznik;

wart:string[30];

end;

tablica=array[0..n] of wskaznik;

var

i,j,k,l:integer;

s:string[30];

t:tablica;

element:wskaznik;

elem2:wskaznik;

z:char;

Begin

For i:=0 to n do t[i]:=nil;

Repeat

Readln(s);

k:=0;

for i:=1 to length(s) do

begin

j:=ord(upcase(s[i]))-64;

for l:=1 to (i mod 5) do

begin

j:=j*2;

if j>32 then j:=j-31;

end;

k:=k xor j;

end;

new(element);

element^.nast:=nil;

element^.wart:=s;

if t[k]=nil then t[k]:=element

else

begin

elem2:=t[k];

while elem2^.nast<>nil do elem2:=elem2^.nast;

elem2^.nast:=element;

end;

writeln('Czy wpisać następne dane T/N');

z:=readkey;

until upcase(z)='N';

readln(s);

k:=0;

for i:=1 to length(s) do

begin

j:=ord(upcase(s[i]))-64;

for l:=1 to (i mod 5) do

begin

j:=j*2;

if j>32 then j:=j-31;

end;

k:=k xor j;

end;

if t[k]=nil then writeln('Element nie istnieje')

else

begin

elem2:=t[k];

while(elem2^.wart<>s) and (elem2^.nast<>nil) do elem2:=elem2^.nast;

if elem2^.wart=s then writeln('Element istnieje')

else writeln('Element nie istnieje');

end;

End.

Wnioski:

Powyższe algorytmy stosuje się przy wyszukiwaniu podanego klucza np.: w słownikach, książkach telefonicznych, itp.Algorytmy wyszukiwania liniowego i binarnego są mniej skomplikowane ale przypłacają to dlugim, w porownaniu do haszowania, czasem szukania klucza.Haszowanie skraca czas wyszukiwania elementu, jednak nie mogac znaleść idealnej funkcji nie powodującej kolizji, musimy tworzyć bardziej zlożone struktury takie jak lista list, tabela list, itd.

1

9

START

Wczytaj dane do tablicy oraz szukany element 'b'

i:=1

i>n

a[i]=b

i:=i+1

Element nie

istnieje

Element istnieje w tablicy.

STOP STOP

Element nie istnieje

Element istnieje

Czy tablica jest pusta

STOP STOP

Weź pierwszą lub druga połowę tablicy zależnie od wyniku porównania

Sprawdź czy `b' jest równe środkowemu elementowi tablicy

Wczytaj dane do tablicy oraz szukany element `b'

START STOP

START SSTART

Wprowadź klucz

k=H(v)

Wpisz na koniec listy T[k]

Koniec wprowadzania danych

STOP

START

STOP

Wprowadź klucz

k=H(v)

Czy istnieje element w liście t[k]

Element nie istnieje

Element istnieje

START

k:=0

i:=1

i<=length(s)

j:=ord(upcase(s[i]))-64

l:=1

l<=i div 5

j:=j*2

k:=k xor j

j > 32

j:=j-31

STOP

l:=l+1



Wyszukiwarka