Algoritmer och datastructurer
-En annan sort tänkande, rekursiva metoder
-Datastrukturen träd Binärt träd
-Filkomprimering med Huffmanträd
-- Kapitel 18 , 12
För utveckling av verksamhet, produkter och livskvalitet.
Rekursion ?




En rekursiv metod är en metod som anropar sig själv.
Liknar loopar / iterationer
Mycket kraftfull men något förvirrande...
Rekursion är ett sätt att lösa ett problem genom att dela
problemmet i flera identiska men mindre subproblem, dvs.
metoden anropar sig själv med ” ett mindre argument”.
Summan av 1+2+3+4+5 + ......+n
För utveckling av verksamhet, produkter och livskvalitet.
Exempel
public static int sumOf(int n)
{
if(n==1)
!! basfall
return 1;
else
return sumOf(n-1) +n;
}
Se till att den rekursiva
anropet alltid leder till
basfallet
För utveckling av verksamhet, produkter och livskvalitet.
Vad är ett träd datastruktur? En
abstaction som beskriver ...ja..just
det...
För utveckling av verksamhet, produkter och livskvalitet.
Datoranpassad träd...
För utveckling av verksamhet, produkter och livskvalitet.
Var finns träd?
Fil / Katalog strukturer!
Sökning och sortering
Filkomprimenring
Kompilatorer
För utveckling av verksamhet, produkter och livskvalitet.
Ny terminologi!
•
•
•
•
•
•
•
•
Nod
Kant
Rot
Löv
Förälder
Barn
Djup
Höjd
02
1
20
20
För utveckling av verksamhet, produkter och livskvalitet.
1
1
20
20
20
20
Lite mer komplicerat träd
•
•
•
•
•
11
0
3
Rot
Löv
Djup
Höjd
Storlek
A
113
01
1
B
12
0
F
2
1
D
C
2
1
0
G
2
10
H
2
14
E
2
10
I
2
21
J
10
3
K
För utveckling av verksamhet, produkter och livskvalitet.
Funktioner på träd
•
Typiska funktioner (oftast rekursiva!)
• Antalet noder i ett träd
• Listning (traversering) av trädstrukturen
För utveckling av verksamhet, produkter och livskvalitet.
Speciella träd
•
Binära träd
• Maximalt två barn / nod
• Vänster / höger barn
a
b
d
c
e
f
För utveckling av verksamhet, produkter och livskvalitet.
Implementation- noden
class BinaryNode{
private Object element;
private BinaryNode left;
private BinaryNode right;
public BinaryNode( Object theElement, BinaryNode lt, BinaryNode rt){
element=theElement;
left=lt;
right=rt;
}
public BinaryNode(){
this( null,null,null); }
}
För utveckling av verksamhet, produkter och livskvalitet.
element
left
right
Implementation - metoder
-
public Object getElement()
public BinaryNode getLeft()
public void printPreorder()
public void printPostOrder()
public void printInOrder();
public static int size(BinaryNode n)
public static int height( BinaryNode n)
-
...............................................................
För utveckling av verksamhet, produkter och livskvalitet.
Metoden –size()
public static int size(BinaryNode n)
{
if (n==null)
return 0;
else
return 1+size(n.left)+size(n.right);
}
För utveckling av verksamhet, produkter och livskvalitet.
Metoden printPreorder()
a
public void printPreorder(){
System.out.println(element);
if(left!=null)
left.printPreorder();
if(rigth!=null)
right.printPreorder();
}
b
e
a b
För utveckling av verksamhet, produkter och livskvalitet.
c
f
e f
c
Metoden printPostOrder()
a
public void printPostOrder(){
if(left!=null)
left.printPostOrder();
if(rigth!=null)
right.printPostOrder();
System.out.println(element);
b
e
f
}
e
f
För utveckling av verksamhet, produkter och livskvalitet.
c
b c
a
BinaryTree klassen
class BinaryTree{
private BinaryNod root;
public BinaryTree( Object item){
root=new BinaryNode(item,null,null);
}
public BinaryTree(){
root=null;
}
}
För utveckling av verksamhet, produkter och livskvalitet.
BinaryTree-metoden merge()
public void merge( Object item, BinaryTree t1, BinaryTree t2)
{
// Testa om inte t1 och t2 är samma träd
if( t1.root== t2.root && t1.root!=null)
// rapportera fel
root = new BinaryNode( item, t1.root,t2.root);
if(this!=t1)
t1.root=null;
if(this!=t2)
t2.root=null;
}
För utveckling av verksamhet, produkter och livskvalitet.
void printPostOrder(){
Tillämpning-Uttrycksträd public
if(left!=null)
left.printPostOrder();
if(rigth!=null)
right.printPostOrder();
System.out.println(element);
}
*
+
a
b
a
För utveckling av verksamhet, produkter och livskvalitet.
b
Tillämpning-datakomprimering
a
d
b
c
För utveckling av verksamhet, produkter och livskvalitet.
Datakomprimering - Huffman
Hej, mitt namn är Nicolina
och jag försöker få mina
studenter att se tjusningen
i träd och
komprimeringsalgoritmer!
01001000 01100101 01101010 00101100 00100000 01101101 01101001
01110100 01110100 00100000 01101110 01100001 01101101 01101111
00100000 10000100 ...
För utveckling av verksamhet, produkter och livskvalitet.
Datakomprimering - Huffman
01001000 01100101 01101010 00101100 00100000 01101101 01101001
01110100 01110100 00100000 01101110 01100001 01101101 01101111
00100000 10000100 ...
101
1110
010
01
111
10 ...
011
01
11
100
1101
101
10
011
001
1100
101 01 011 11 1101 10 001 1110 111 01 100 101 011 1100 010 10 ...
För utveckling av verksamhet, produkter och livskvalitet.
Datakomprimering - Huffman
I
II
III
IV
V
01001101
01101101
00110101
10101001
01010111
0
25 ggr
1
31 ggr
5 ggr
19 ggr
IV
14 ggr
III
II
I
V
För utveckling av verksamhet, produkter och livskvalitet.
I
=
II
=
III
=
IV
=
V
=
11
10
000
01
001