Professional Documents
Culture Documents
11 ArhetipAlgoritmi
11 ArhetipAlgoritmi
(
): (greedy), (divide
and conquer), (dynamic programming),
(randomized) (backtracking).
11.1
:
:
. , .
:
.
,
. , ,
.
,
( ,
), ( ,
), .
,
T(n) = 2T(n/2) + O(n)
O(n log n).
1
.
:
a[0..n] a[0..m] a[m+1..n],
(),
. ,
. ,
, 1.
static int FindMax( int a[], int left, int right )
{
int middle;
int max_l, max_r;
if ( left == right )
{
// osnovniot slucaj
// samo 1 element
return a[left];
}
else
{
// Resavanje na pomali problemi
middle = (left+right)/2;
.
static int MaxEl(Node p) {
int max,maxLevo,maxDesno;
if(p!=null){
max=p.data;
maxLevo=MaxEl(p.left);
maxDesno=MaxEl(p.right);
if (max<maxLevo) max=maxLevo;
if (max<maxDesno) max=maxDesno;
return max;
}
}
:
T(n) = 2T(n/2) + n
2T(n/2) = 2(2(T(n/4)) + n/2) = 4T(n/4) + n T(n) = 4T(n/4) + 2n
4T(n/4) = 4(2T(n/8)) + (n/4) = 8T(n/8) + n T(n) = 8T(n/8) + 3n ...
T (n) 2k T (n 2k ) kn k = log2 n, :
n
1
log2 2
2k
T (n) n T (1) n log2 n
k log n
T(n) = nT(1) + n log2 n = n log2 n + n
2logb n
n logb 2
T (n)
cn log n n
O(n log 2 n)
n c,
2 d AVL
.
depth(d) d.
: AVL .
1.
AVL
.
static int avl(Node d){
int L,D;
if (d=null) return 1;
if (abs(height (d.left)- height (d.right))>1) return 0;
L= avl(d.left);
D= avl(d.right);
return L&&D;
}
3 x
.
: false.
, ,
.
static int Najdi(Node d, int X){
if (d==null) return 0;
else
if(d.data==X) return 1;
else return (Najdi(d.left,X)|| Najdi(d.right,X));
}
11.2
( ) .
,
. ,
. . ,
, ,
.
, (greedy,
). (
,
, ),
.
. , 269 ,
,
. ,
100 , 50 , 10, 5
. (
)
.
4
. .
1,2,5,10,50,100,500 .
public class Change {
private int[] denom;
private String name;
Change(String name, int[] denom) {
this.name = name;
this.denom = denom;
}
void giveChange(int changeInCent) {
System.out.println("\nChange for " + changeInCent + " in " +
name + ":");
for(int i = 0; i < denom.length; ++i) {
int nb = changeInCent / denom[i];
if(nb > 0)
System.out.println(nb + " " + denom[i]);
changeInCent %= denom[i];
}
}
public static void main(String[] args) {
int[] mk = {100, 50, 10, 5, 2, 1};
int[] us = {100, 25, 10, 5, 1};
// MK
// US
change2.giveChange(456734);
change1.giveChange(12345);
change2.giveChange(12345);
}
}
T(n)=O(n), ,
GreedyCoins n .
5 ( ) .
.
, 2/3=1/2+1/6 7/13=1/2 + 1/26.
,
, .
11.3
, .
,
.
.
:
public static int fibonacci(int n){
if(n <= 1) return 1;
else
return(fibonacci(n-1) + fibonacci(n-2));
}
T(n)=O(n).
2. Memoization
.
public class Fibonacci
{
int []memo= {0,1}
public static int fibMem ( int n )
{
if ( n < 1 ) return 0; // Allows memo[k]==0 to flag uncomputed cell
if ( n >= memo.length )
{
int[] omem = new Int[n+1];
System.arraycopy(memo, 0, omem, 0, memo.length);
memo = omem;
}
if ( memo[n] == 0 )
memo[n] = fibMem(n-2) + fibMem(n-1);
return memo[n];
}
11.4
BACKTRACKING
Backtracking brute
force , .
(v1, ..., vm)
. .
.
(v1, ..., vi) ,
.
6
, .
.