Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
1
Copyright © 2001 [email protected] Java: Otras secuencias / 1
2WURV�WLSRV�GH�VHFXHQFLDV
&DUORV�'HOJDGR�.ORRV
,QJHQLHUtD�7HOHPiWLFD
8QLY��&DUORV�,,,�GH�0DGULG
Copyright © 2001 [email protected] Java: Otras secuencias / 2
2WURV�WLSRV
GH�VHFXHQFLDV
❚ &RODV�GREOHV
❚ &RODV�FRQ�SULRULGDG
❚ 6HFXHQFLDV�HQ�JHQHUDO
❚ &DGHQDV
2
Copyright © 2001 [email protected] Java: Otras secuencias / 3
'HTXHV��FRODV�GREOHV�
insertFirst
removeFirst
removeLast
insertLast
first last
Copyright © 2001 [email protected] Java: Otras secuencias / 4
,QWHUID]�SDUD
FRODV�GREOHV
public interface Deque {
public int size();
public boolean isEmpty();
public void insertFirst(Object o);
public void insertLast(Object o);
3
Copyright © 2001 [email protected] Java: Otras secuencias / 5
,QWHUID]�SDUD
FRODV�GREOHV
public Object removeFirst()throws DequeEmptyException;
public Object removeLast()throws DequeEmptyException;
public Object first()throws DequeEmptyException;
public Object last()throws DequeEmptyException;
}
Copyright © 2001 [email protected] Java: Otras secuencias / 6
3LODV�\�FRODV
FRPR�GHTXHV
removeLast()pop()
insertLast(e)push(e)
last()top()
isEmpty()isEmpty()
size()size()
'HTXH6WDFN
removeFirst()dequeue()
insertLast(e)enqueue(e)
first()front()
isEmpty()isEmpty()
size()size()
'HTXH4XHXH
4
Copyright © 2001 [email protected] Java: Otras secuencias / 7
'HILQLFLyQ�GH�SLODV
D�SDUWLU�GH�GHTXHV
public class DequeStackimplements Stack {
private Deque D;
public DequeStack()
{D=new MyDeque();}
public int size()
{return D.size();}
public boolean isEmpty()
{return D.isEmpty();}
Copyright © 2001 [email protected] Java: Otras secuencias / 8
'HILQLFLyQ�GH�SLODV
D�SDUWLU�GH�GHTXHV
public void push(Object o){ D.insertLast(o);}
public Object pop()throws StackEmptyException {try {return D.removeLast();}catch (DequeEmptyException ece) {throw new
StackEmptyException("vacia");}
}
5
Copyright © 2001 [email protected] Java: Otras secuencias / 9
'HILQLFLyQ�GH�SLODV
D�SDUWLU�GH�GHTXHV
public Object top()
throws StackEmptyException {
try {return D.last();}
catch (DequeEmptyException ece)
{throw new
StackEmptyException("vacia");}}
}
Copyright © 2001 [email protected] Java: Otras secuencias / 10
/LVWDV�GREOH�
PHQWH�HQOD]DGDV
Madrid Miami Múnich
6
Copyright © 2001 [email protected] Java: Otras secuencias / 11
1RGR
class DLNode {
private Object elem;
private DLNode next, prev;
DLNode() {this(null, null, null);}
DLNode(Object e, DLNode p, DLNode n) {elem=e; next=n; prev=p;}
Copyright © 2001 [email protected] Java: Otras secuencias / 12
1RGR
void setElem(Object e) {elem=e;}
void setNext(DLNode n) {next=n;}
void setPrev(DLNode p) {prev=p;}
Object getElem() {return elem;}
DLNode getNext() {return next;}
DLNode getPrev() {return prev;}
}
7
Copyright © 2001 [email protected] Java: Otras secuencias / 13
,PSOHPHQWDFLyQ
EDVDGD�HQ�'/1RGH
public class DLDeque implements Deque {private DLNode top, tail;
private int size;
public DLDeque() {
top=new DLNode(); tail=new DLNode();top.setElem(null); tail.setElem(null);
top.setPrev(null); tail.setPrev(top);
top.setNext(tail); tail.setPrev(null);
size=0;}
Copyright © 2001 [email protected] Java: Otras secuencias / 14
,PSOHPHQWDFLyQ
EDVDGD�HQ�OLVWDV
public void insertFirst(Object e) {
DLNode second=top.getNext();
DLNode first=newDLNode(e,top,second);
second.setPrev(first);
top.setNext(first);
size++;
}
8
Copyright © 2001 [email protected] Java: Otras secuencias / 15
,QVHUFLyQ
Madrid Miami Múnich
Moscú
first
second
top tail
Copyright © 2001 [email protected] Java: Otras secuencias / 16
,PSOHPHQWDFLyQ
EDVDGD�HQ�OLVWDV
public Object removeFirst()throws DequeEmptyException {
if (isEmpty())
throw new DequeEmptyException("vacia");
DLNode first=top.getNext();
Object temp=first.getElem();DLNode second=first.getNext();
top.setNext(second);
second.setPrev(top);
size--;return temp;
}
9
Copyright © 2001 [email protected] Java: Otras secuencias / 17
%RUUDGR
Madrid Miami MúnichMoscú
firsttop second tail
Copyright © 2001 [email protected] Java: Otras secuencias / 18
&RODV�FRQ�SULRULGDG
❚ 8QD�FROD�FRQ�SULRULGDG�HVXQD�HVWUXFWXUD�GH�GDWRV�OLQHDO�TXH�GHYXHOYH�ORV�HOHPHQWRV�GH�DFXHUGR�DXQ�YDORU�DVRFLDGR�D�HOORV��FODYH��\�QR�DO�RUGHQ�HQ�TXH�IXHURQ�LQVHUWDGRV��
❚ /D�FODYH�GH�FRPSDUDFLyQ�SXHGH�FRLQFLGLU�FRQ�HO�YDORU�GHO�HOHPHQWR��SHUR�WDPELpQ�SXHGH�GLIHULU�GH�pO�
10
Copyright © 2001 [email protected] Java: Otras secuencias / 19
,QWHUID]
public interface PriQueue {
public int size();
public boolean isEmpty();
public void insertItem(Object k,e);
public Object minElem()throws PriQueueEmptyException;
public Object removeMinElem()throws PriQueueEmptyException;
public Object minKey()throws PriQueueEmptyException;
}
Copyright © 2001 [email protected] Java: Otras secuencias / 20
(MHPSOR
2 1
3 2 4 1 5
2 1 3
2 1
+ + + – + – + –+ + + – + – + –
4 533
11
Copyright © 2001 [email protected] Java: Otras secuencias / 21
(MHPSOR
2 1
3 2 4 1 5
2 1 3
2 1
+ + + – + – + –+ + + – + – + –
4 533
minminmin
Copyright © 2001 [email protected] Java: Otras secuencias / 22
(MHPSOR
2 5
3 2 4 1 5
2 1 3
2
+ + + – + – + –+ + + – + – + –
11 33 4
inserta en ordeninserta en ordeninserta en ordeninserta en ordeninserta en orden
12
Copyright © 2001 [email protected] Java: Otras secuencias / 23
,PSOHPHQWDFLRQHV
❚ &RQ�XQD�VHFXHQFLD�VLQ�RUGHQDU
❙ ,QVHUFLyQ�IiFLO
❙ &RPSDUDFLyQ�DO�H[WUDHU
❚ &RQ�XQD�VHFXHQFLD�RUGHQDGD
❙ &RPSDUDFLyQ�DO�LQVHUWDU
❙ ([WUDFFLyQ�IiFLO
Copyright © 2001 [email protected] Java: Otras secuencias / 24
6HFXHQFLDV��HQ�JHQHUDO�
❚ &RQWHPSODPRV�VHFXHQFLDV�HQ�JHQHUDO
❚ ,QVHUFLyQ�HQ�FXDOTXLHU�SDUWH
❚ ([WUDFFLyQ�GH�FXDOTXLHU�SDUWH
13
Copyright © 2001 [email protected] Java: Otras secuencias / 25
6HFXHQFLDV��HQ�JHQHUDO�
❚ 'DPRV�GRV�GHILQLFLRQHV
❙ %DVDGD�HQ��UDQNV� �SRVLFLRQHV�RUGHQDGDV�❘ 1R�SUHVXSRQH�LPSOHPHQWDFLyQ�EDVDGD�HQ�DUUD\V
❙ %DVDGD�HQ��SRVLWLRQV� �OXJDUHV�DEVWUDFWRV�❘ 1R�SUHVXSRQH�LPSOHPHQWDFLyQ�EDVDGD�HQ�OLVWDV�HQOD]DGDV
Copyright © 2001 [email protected] Java: Otras secuencias / 26
6HFXHQFLDV
EDVDGDV�HQ�SRVLFLRQHV
public interface RankedSeq {...;public Object elemAtRank
(int r) throws RankException;
public void insertElemAtRank
(int r, Object e) throws RankException;
public Object removeElemAtRank(int r) throws RankException;
public Object replaceElemAtRank(int r, Object e) throws RankException;
}
14
Copyright © 2001 [email protected] Java: Otras secuencias / 27
,PSOHPHQWDFLyQ
FRQ�DUUD\V��,QVHUFLyQ
S
0 1 2 N-13 4 5
1 2 3 4 5
insertElemAtRank(2,6)
3 4 56
O(n)
Copyright © 2001 [email protected] Java: Otras secuencias / 28
3 4 56
,PSOHPHQWDFLyQ
FRQ�DUUD\V��%RUUDGR
S
0 1 2 N-13 4 5
1 2
removeElemAtRank(2)
3 4 5
O(n)
15
Copyright © 2001 [email protected] Java: Otras secuencias / 29
,PSOHPHQWDFLyQ
FRQ�OLVWDV��,QVHUFLyQ
Madrid MiamiMúnich
Moscú
Copyright © 2001 [email protected] Java: Otras secuencias / 30
,PSOHPHQWDFLyQ
FRQ�OLVWDV��%RUUDGR
Madrid MiamiMúnichMoscú
16
Copyright © 2001 [email protected] Java: Otras secuencias / 31
6HFXHQFLDV
EDVDGDV�HQ�OXJDUHV
❚ /RV�OXJDUHV�VRQ�FRQWHQHGRUHV�GH�GDWRV
1
23
Copyright © 2001 [email protected] Java: Otras secuencias / 32
/XJDUHV
public interface Position {
public Object element()
throws InvPosException;
public Sequence container()
throws InvPosException;
}1
23
17
Copyright © 2001 [email protected] Java: Otras secuencias / 33
6HFXHQFLDV
EDVDGDV�HQ�OXJDUHV
public interface PosSeq {
public Position first()
throws EmptyException;
public Position last()
throws EmptyException;
public Position before(Position p)
throws BoundException;
public Position after(Position p)
throws BoundException;
Copyright © 2001 [email protected] Java: Otras secuencias / 34
6HFXHQFLDV
EDVDGDV�HQ�OXJDUHV
public Position insertFirst
(Object e);
public Position insertLast
(Object e);
public Position insertBefore
(Position p, Object e);
public Position insertAfter
(Position p, Object e);
18
Copyright © 2001 [email protected] Java: Otras secuencias / 35
6HFXHQFLDV
EDVDGDV�HQ�OXJDUHV
public Object replace
(Position p, Object e);
public void swap
(Position p, Position q);
public Object remove
(Position p);
}
Copyright © 2001 [email protected] Java: Otras secuencias / 36
(MHPSORV
[5,2,7,8]p5(2)insertAfter(first(),2)
[5,7,8]3replace(p 3,7)
[5,3,8]swap(p 1,p 2)
[8,3,5]9remove(p 4)
[9,8,3,5]p2(5)last()
[9,8,3,5]p1(8)before(p 3)
[9,8,3,5]p4(9)insertFirst(9)
[8,3,5]p3(3)insertBefore(p 2,3)
[8,5]p2(5)insertAfter(p 1,5)
[8]p1(8)insertFirst(8)
65HVXOW�2SHUDFLyQ
19
Copyright © 2001 [email protected] Java: Otras secuencias / 37
,PSOHP��GH�PositionEDVDGD�HQ�OLVWDV
class NSNode implements Position{
private NSNode prev, next;
private Object element;
private Container cont;
NSNode(NSNode newPrev, NSNode newNext, Container c, Object e) {
prev=NewPrev; next=NewNext;
cont=c; element=e;}
Copyright © 2001 [email protected] Java: Otras secuencias / 38
,PSOHP��GH�PositionEDVDGD�HQ�OLVWDV
public Object element()
throws InvPosException {
if (cont==null)
throw new InvPosException
("lugar sin contenedor");
return element;
}
20
Copyright © 2001 [email protected] Java: Otras secuencias / 39
,PSOHP��GH�PositionEDVDGD�HQ�OLVWDV
public Container container()
throws InvPosException {
if (cont==null)
throw new InvPosException
("lugar sin contenedor");
return cont;
}
Copyright © 2001 [email protected] Java: Otras secuencias / 40
,PSOHP��GH�PositionEDVDGD�HQ�OLVWDV
NSNode getNext() {return next;}NSNode getPrev() {return prev;}
NSNode setNext(NSNode newNext) {
next=newNext;}
NSNode setPrev(NSNode newPrev) {
prev=newPrev;} NSNode setElement(Object newElem) {
element=newElem;}
NSNode setContainer(Object newCont) {
cont=newCont;} }
21
Copyright © 2001 [email protected] Java: Otras secuencias / 41
,PSOHPHQWDFLyQ
EDVDGD�HQ�OLVWDV
private int numElts;
private NSNode head, tail;
Copyright © 2001 [email protected] Java: Otras secuencias / 42
,PSOHPHQWDFLyQ
EDVDGD�HQ�OLVWDV
public Position insertAfter(Position p, Object e)
throws InvPosException {
NSNode n=checkPosition(p);
numElts++;
NSNode newNode=new NSNode(n, n.getNext(), this, e);
n.getNext().setPrev(newNode);
n.setNext(newNode);
return NewNode;}
22
Copyright © 2001 [email protected] Java: Otras secuencias / 43
,PSOHPHQWDFLyQ
EDVDGD�HQ�OLVWDV
public Object replace
(Position p, Object e)
throws InvPosException {
NSNode n=checkPosition(p);
Object oldElt=n.element();
n.setElement(e);
return oldElt;
}
Copyright © 2001 [email protected] Java: Otras secuencias / 44
,PSOHPHQWDFLyQ
EDVDGD�HQ�DUUD\V
S0 1 2 N-13 4 5
0
Múnich
1
Madrid
2
Moscú
3
Miami
23
Copyright © 2001 [email protected] Java: Otras secuencias / 45
&RPSDUDFLyQ
2���2�Q�remove
2���2�Q�insertAfter, insertBefore
2���2���insertFirst, insertLast
2���2���replace, swap
2���2���before, after
2���2���first, last
2���2���size, isEmpty
,PSO��/LVWD,PSO��$UUD\0pWRGRV
Copyright © 2001 [email protected] Java: Otras secuencias / 46
&DGHQDV
❚ /DV�VHFXHQFLDV�SHUPLWHQ�HO�DQLGDPLHQWR❙ >>���@�>�����@�>�����@@
❚ (Q�ODV�FDGHQDV�QR�H[LVWH�HO�FRQFHSWR��GH�DQLGDPLHQWR❙ ����������
❙ ���������� �������
❙ ������������ �������
❚ 0iV�HQ��)XQGDPHQWRV�GH�2UGHQDGRUHV�,