You are on page 1of 23

:

: .




,

,
.

. c
tA(n)cn2.

n/2,
.
. , ...

, 11 2013

:
: .


d ,

t(n)dn. ,
B

t B ( n)

3t A ( n / 2) t (n) 3c(( n 1) / 2) 2 dn

3 2 3
3
cn ( c d )n c
4
2
4

B n2,
25%.

;

. , ...

, 11 2013

:
: .


t A ( n)

t C ( n)
3tC ( n / 2) t (n)

n n0

nlg3 n1.59.

n. n0??
DQ(x) {

// divide & conquer

if (x )
return ADHOC(x);
x1, x2, , xk
for (i=1; i<=k; i++)
yi=DQ(xi);
yi y x
return y
}
. , ...

, 11 2013

:
: .


.

,
, .
n0 :




. n0
n,
n

.
. , ...

, 11 2013

:
: .

I
[n]
, . 0i<j n-1T[i] T[j]
x, . x
,
, .

int sequential(T[n],x) {
for (i=0;i<n;i++)
if (T[i]>x)
return i-1;
return n;
}
. , ...

, 11 2013

:
: .

II
: (n)
:
(1+2++n)/n , . (n(n+1)/2)/n, (n+1)/2. ,
O(n).

int binsearch(T[n], x) {
if (n=1 || x<T[0]) return O;
return binrec(T, x);
}
int binrec(T[i..j], x) {
// T[i]x<T[j+1] ij
if (i = j) return i;
int k=(i+j+1) / 2;
if (x<T[k])
return binrec(T[i..k-1], x);
else return binrec(T[k..j], x);
}
. , ...

, 11 2013

:
: .

III

. , ...

, 11 2013

:
: .

IV
log2n .
(log2n).

int iterbin(T[n], x) {
if (n=1 || x<T[0]) return O;
i=0; j=n-1;
while (i<j) {
// T[i]x < T[j+1]
int k=(i+j+1)/2;
if (x<T[k])
j=k-1;
else i=k;
}
return i;
}
. , ...

, 11 2013

:
: .

V
int iterbin2(T[n], x) {
if (n=1 || x<T[0])
return O;
i=0; j=n-1;
while (i<j) {
// T[i]x<T[j+1]
int k=(i+j+1) / 2;
if (x<T[k])
j=k-1;
else if (xT[k+1])
i=k+1;
else {i=k; j=k;}
}
return i;
}

n iterbin2
iterbin.
. , ...

, 11 2013

:
: .


[n] n .
.

,
.
mergesort(T[n]) {
if (n )
insert(T);
else
U=T[0..n/2];
V=T[1+n/2..n];
mergesort(U);
mergesort(V)
merge(T, U, V)
}
. , ...

, 11 2013

10

:
: .

I

.
,
,


.
(n logn)

,
(n2).
. , ...

, 11 2013

11

:
: .

, .
,
.

#{i [0..n 1] | T[i] m} n / 2

#{i [0..n 1] | T[i] m} n / 2


.
O(nlogn). ;
, :
n k
0 n-1. k-
m
#{i [0..n 1] | T[i] m} k

. , ...

#{i [0..n] | T[i] m} k

, 11 2013

12

:
: .


int selection(T[n], k) {
if (n ) { sort T;
return T[k]}
p= [n];
u=#{i[0..n-1]|T[i]<p};
v=#{i[0..n-1]|T[i]p};
if (ku) {
U[0..u-1] T
p
return selection(U,k)}
if (kv)
return p;
else {
V[0..n-v-1] T
p
return selection(V,k-v)}
}
. , ...

//k>v

, 11 2013

13

:
: .


pivot
, O(n).
,



(
). ,
(n2).
:
. , ...

, 11 2013

14

:
: .

V
pseudomed(T[n]) {
int s=n / 5;
S[s];
for (i=1;i<=s;i++)
S[i]=adhocmed5(T[5i-4-1..5i]);
return selection(S,[(s+1) / 2])
}
adhocmed


(n).
. , ...

, 11 2013

15

:
: .




,
.

,
hardware.
,
;

!!
:
. , ...

, 11 2013

16

:
: .


: 4519

45
19
405
+45
855


:
,
hardware

. , ...

45
22
11
5
2
1

19
38
76
152
304
608

, 11 2013

19
-76
152
---608
855
17

:
: .

.
; .
,
:
n
u

n / 2

n / 2

u=10sw+x v=10sy+z, 0x<10s, 0z<10s s n / 2


w y n / 2 .
2s
s
: uv 10 wy 10 ( wz xy ) xz
. , ...

, 11 2013

18

:
: .

V
long int mult(u,v:long int) {
n= u v
n;
if (n ) {
u v

return }
s = [n / 2];
w=[u / 10s];
x=u mod 10s;
y=[v / 10s]; z=v mod 10s;
return
mult(w,y) X 102s + (mult(w,z)+mult(x,y)) X 10s +
mult(x,z);
}
. , ...

, 11 2013

19

:
: .


.

r=mult(w+x,y+z);
p=mult(w,y); q=mult(x,z);
return 102sp+10s(r-p-q)+q
log 3
O(n 2 ),
O(n1.59)

. , ...

, 11 2013

20

:
: .


B nXn :
n

Cij Aik Bkj


k 1

C n
n2 , o
(n3). ;
1960
Strassen

. , ...

, 11 2013

21

:
: .

I
22 :

a11 a12
A

a
a
21 22

b11 b12
A

b
b
21 22

:
m1=(21+22-11)(b22-b12+b11)
m2=11b11
m3=12b21
m4=(11-21)(b22-b12)
m5=(21+22)(b12-b11)
m6=(12-21+11-22)b22
m7=22(b11+b22-b12-b21)
. , ...

, 11 2013

22

:
: .

II

,
m2 m3

m m m m
2
4
7
1

m1 m2 m5 m6
m1 m2 m4 m5


7
A B
nXn,
2nX2n
nXn
.
(n2.81)
. , ...

, 11 2013

23

You might also like