background image

1. Przekształcamy dane wejściowe na macierz sąsiedztwa - tworzymy macierz n x n (nazwijmy ją A) i wypełniamy przy pomocy 
tablic Pntr i EndVertex (skrypt Kubale, str. 86) (O(m))

2. Tworzymy drugą macierz (nazwijmy ją B) i wpisujemy do niej wynik podniesienia tej pierwotnej do kwadratu (naiwnym 
algorytmem O(n^3)) //Mozna uzyc algorytmu strassena wtedy bedzie O(n^2,376)

3. Przeglądamy jednocześnie tablice A i B. Tam, gdzie w A znajdzie się 1, sprawdzamy co znajduje się B. Jeżeli liczba >= 2, to 
robimy return true. Po dojściu do końca macierzy return false. (O(n^2))

(czyli sprawdzamy czy istnieją ścieżki z wierzchołka (i,j) długości 1 oraz dla tych samych wierzchołków muszą 

istnieć 2 ścieżki długości 2)

by blue

Asymptotyczna liczba kroków to O(n) czyli złożoność obliczeniowa to 
O(2^r) czyli wykładnicza a co do pierwszej częsci n<10 to z wzoru na 
fibonnaciego mozna uznac ze O(2^n) Giaro str. 34 ale jak to blue 
powiedzial mamy ograniczone przez 10 wiec to pomijamy

procedure odpowiedz

(

a

:

integer

)

begin
  n

=

log

(

a

)

  

{n tym razem to romiar liczby (zazwyczaj jest r)}

  if n<

10

 then for i

:=

1

 to n^

2

 do 

    write

(

'Niech się święci pierwszy maja'

)

;

  else for i

:=

1

 to n

+

90

 do 

          write

(

'Wiwat trzeci maj!'

)

;

end;

by Tom_vtec

procedure bucket

-

sort

(

A

[

1..

n

]

:

 

array

)

begin

for i

:=

1

 to n do

B

[

n

*

podloga

(

A

[

i

])]

:=

A

[

i

]

;

for i

:=

0

 to n

-

1

 do

sortuj_przez_wstawianie

(

B

[

i

])

;

polacz listy B

[

0

]

 to B

[

n

-

1

]

 w dokladnie tej kolejnosci

end;

           

Należy doprowadzić nasz ciąg do ciągu z przedziału [0..1] co ma 
złożoność O(n)
Następnie posortować algorytmem sortowania kubełkowego który ma 
złożoność O(n^2)
Następnie zwrócic środkowy element ciągu