Explore space complexity - TAUsafra/Complexity/Space.pdf · Complexity 18 ©D.Moshkovits (a,b,c)=Is...

Post on 21-Jul-2020

4 views 0 download

Transcript of Explore space complexity - TAUsafra/Complexity/Space.pdf · Complexity 18 ©D.Moshkovits (a,b,c)=Is...

1

3

nSPACEL log

nNSPACENL log

TM space-by decided | ticdeterminisntOLLntSPACE

TM non space- by decided | ticdeterminisntOLLntNSPACE

k

knSPACEPSPACE

4

5

?

6

8

9

?

10

11

12

13

?

14

15

1

2

3

4

5

617

U d/2 W d/2 V

18Complexity

©D.Moshkovits

(a,b,c)=Is there a path from a to b, that takes no morethan c steps.

3Log2(d)

1

4

32

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

(1,4,3)(1,4,3)(1,2,2)(1,4,3)(1,2,2)TRUE(1,4,3)(2,4,1)(1,4,3)(2,4,1)FALSE(1,4,3)(1,3,2)(1,4,3)(1,3,2)(1,2,1)(1,4,3)(1,3,2)(1,2,1)TRUE(1,4,3)(1,3,2)(2,3,1)(1,4,3)(1,3,2)(2,3,1)TRUE(1,4,3)(1,3,2)TRUE(1,4,3)(3,4,1)(1,4,3)(3,4,1)TRUE(1,4,3) TRUE

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

boolean PATH(a,b,d) {

if there is an edge from a to b then

return TRUE

else {

if (d=1) return FALSE

for every vertex v (not a,b) {

if PATH(a,v, d/2) and

PATH(v,b, d/2) then

return TRUE

}

return FALSE

}

}

19

20

Premise

21

22

Yes

No

23

24

25

Induction:

26

reachs(v, l)

1. length = l; u = s

2. while (length > 0) {3. if u = v return ‘YES’

4. else, for all (u’ V) {

5. if (u, u’) E nondeterministic switch:

5.1 u = u’; --length; break

5.2 continue}

}6. return ‘NO’

27Complexity

©D.Moshkovits

Takes up logarithmic space

This N.D. algorithm might never stop

CRs ( d )

1. count = 0

2. for all uV {3. countd-1 = 0

4. for all vV {5. nondeterministic switch:

5.1 if reach(v, d - 1) then ++countd-1 else fail

if (v,u) E then ++count; break5.2 continue

}

6. if countd-1 < CRs (d-1) fail

}

7.return count28Complexity

©D.Moshkovits

Recursive call!

Assume (v,v) E

CRs ( d

1. count = 0

2. for all uV {3. countd-1 = 0

4. for all vV {5. nondeterministic switch:

5.1 if reach(v, d - 1) then ++countd-1 else fail

if (v,u) E then ++count; break5.2 continue

}

6. if countd-1 < fail

}

7.return count29Complexity

©D.Moshkovits

Main Algorithm:

CRs

C = 1

for d = 1..|V|

C = CR(d, C)

return C

parameter

C

, C)

30

Variables` range is

31

32Complexity

©D.Moshkovits

xy[(xy)(xy)]

y[(0y)(0y)] y[(1y)(1y)]

(00)(00) (01)(01) (11)(11)(10)(10)

1 0 1

1

0

1

1

33

34