情報知識ネットワーク研究室arim/pub/algo/algo3.pdfgnf.jwbkdjei[ 6!9& ¨q[ -[!9&o...
TRANSCRIPT
�����������
1
�����������
������������������� �����
�3��:D8��n��*��H
¨A6;
n!�G �A6;G� �A6;)-. �
¨6894
n 6894*��E��,�%F
¨3?D
n =2C;
¨��*��H[��](�$/'6@2<+��%-#¨=2C80�"':D8��
¨��:D8�(&* �1B5A7>(:D8��
2
��
*>0=2:#6A4��
3
6A4��
6A4��#&
n 3>(cell)%��$�(��)��"'%¨���������������� ����������
¨�����������
6A4) �!(����
Algorithms + Data Structures = Programs
Niklaus Wirth B�-<,1@8>7C ��"�%��Niklaus Wirth(1934-)&1+1%������/?9;A4��Pascal%����DGFE$5;A=?.����
������n
¨ h 1 h 6 7 9i 7
¨
n
¨ 7 9 N 96 7
¨W N "
.��� ������
4
��/�3AN?�#2��
��!2AN?
◆K<=?�0+2��
�AN?
◆char, int, large int, double, �#AN?
◆%�OarrayPQ�#�OstructP��AN?�#
◆I=BOlinked listPQ=?@8OstackPQ ,��OqueueP�$�AN?�#
◆�����Obinary search treePQ�����Obalanced search treePQC@;G�Ohash tableP
�2 !4�-.(5OCQPascalP
��!O)1(P
�"2 !OC++QJava, etc.P
*2&7J:I>F0AN?�#'/�30*6
&DL9HEM9'/�30*6
5
�� ) ( !&=
AE C DI
C
.
• 07/�8%API9,���07/��!'��;• 07/�$&:��+&��8What9�!��+,"%)�$���*�=8How9�%��%���*;
• ���#26.43��(4-1457&�% �$� �;8�<C++:Java:Ruby, Python #"#"9
6
������ ����������
n 10 �
������������
7
n 0n �n ��� � �n
�
�
�
��
A1 AnA2 A3�
��
=6;-�(1��n List L = create () : �.=6;3�(An insert(L, p, x) : =6;L.��p.�-��x3��(1n delete(L, p) : =6;L.��p.��3�!(1n search (L, x) : =6;L-��x&02*$2/13@,'2/03�(
n addFirst(L, x) : =6;L.�"��-��x3��(1n find(L, i) : =6;L.i��.8>.� 3�(n last(L) : =6;L.��.8>.��3�(n next(L, p) : ��p.B)�.8>.��3�(n previous(L, p) : =6;L-%$*#��p.B)�.8>.��3�(
4>5=7<+:?9��
8
�
�
��
��
�
��������
��� �����������������
9
������������
N\Q[SYBU`T�+
10
[RVD�'��
[RVBE(#Me���f�C�G?ID
a��b[RVE,$[RVM�=;B9�8
[[RV a0,a1,…,an-1D� �]
1. /�(array)
2. ,$[RV(linked list)
3. ��,$[RV(doubly linked list)
a0 a1 ___ an-1
n�D,%2�C�"
an-1 nulla1a0init ___
XO^TA�D(#D�"2�M�=
an-1 nulla1a0init ___null ___ final
XO^TA�D(#D�"2�M�=
�.
�.
&�
-�
�binitBfinalXO^TMcheada�3bBtaila��bB�F;BI�8d
[!)] 6�'7BE4N\Q[SYJ�*U`T M4W]PZYB<@�1C��=K;B4H?E4>D:L<8��5
0(
��$
n ��(array)�����
11
a1 a2 a3 a4
�� int a[100]; % 100����a[0],a[1],…,a[99]������
1. ��(array) n�� ����
a0 a1 """ an-1
0 1 """ n-1
n=4
�!� ����#���
G<BP��G<B(linked list)/35��n ��7��)5#>H$7D9I?,+.%,NG<B7�)O
n ��10���!7��3',�&5
12
an nulla1-1head JJJ ai-1 ai JJJ
a1 a2 a3 a4n=4
*>H = �46*�2 0(-
>H*0���LC��0:KCM
typedef struct _cell {int element;struct cell *next;
} cell;
@EK0>H
�"(head)
aicellelement next
>H*L�M
�� �0D9I?
��
8H;G=F-AK?��
��3)"/%��4
)"/% 1pointer2◆$,���! �&0%
◆��-(,���$,������
◆'.#+*/#���������!����� ������
13
��3,$1)� �
14#/%.(-�*2)��
,$1) p
132 � x
5
C�����
²,$1)p�����x"�x = *p����
²�x"�,$1)p"p = &x �� ��!�
0&')0+/������
15
C��9@CUJN:��(1/3)
"�UJN
typedef struct cell {int element;struct cell *next;
} cell;
cell *init=NULL; %�:UJN
void list_add(int x) { %����xE�%< �
cell *new=(cell *)malloc(sizeof(cell));new->element=x;new->next=init;init=new;
}
struct cell {XXX}\ �!�cellEXXX7��
typedef XXX cell\ XXXEMYLLGPcell7/5��
init;cellMYLE 0QGWL
sizeof(cell)\ cell:MYLIGKZOGN[
malloc(n)\nOGN:STUYE��
(cell *)malloc(n)\ ��/2nOGN:$EcellMYL��$7>80(
aicell
��
elementcell<:QGWLnext
#�
FVHUKR7MYL�!
��E�,C�<\--*A�:"�UJN:C��9@C��;'��6?B=0(��:�&7�D15'/4*B��/5+3.)
&5)4+1�-7, �
16
C�� #$4*.!��(2/3)typedef struct cell {
int elem;struct cell *next;
} cell;
cell *init=NULL; //�!4*.
void addFirst(int x) { //���x%��"��
cell *new=(cell *)malloc(sizeof(cell));new->elem=x;new->next=init;init=new;
}
init3 6
NULL
elem��
next��
addFirst(5)%��$�new
�234!��
new5
�elem!��
init3 6
NULL
�next init0'6,%(/7new
5
init3 6
NULL
�init new0'6,%(/7
��
?JAICH3ELD�&
17
C#$5;<IBF6 !(3/3) : ���IBF
���' IBFtypedef struct cell {
int elem;struct cell *prev;struct cell *next;
} cell;
cell *init=NULL; //�6IBFcell *final=NULL;void addFirst(int x) { //��"�x>�)9%�
cell *new=(cell *)malloc(sizeof(cell));new->elem=x;new->next=init;new->prev=NULL;if(init==NULL) final=new;else init->prev=new;init=new;
}
cell7Q2�6ELD>�0G@KDprev::2
���6ELD>�0G@KDfinal:�"
�)5%�0<��7Q2�6ELD74/
��5��.=1ELD,���6ELDMfinal,�0ELD)34<
R2��(5��.=1ELD7prevG@KD>�/*�)ELD>�0;+5��0<
�Ninit3finalG@KD>OheadM�)N3tailM��N38-3:�*P
)2*1,0#.4-��
18��1+/"� $��5��6
INSERT(x,p,L) : 1+/L5���n6&��p&�&��%��x(��
a0 a1 333 ai 333 an-1ai-1
p
a0 a1 333 ai 333 an-1ai-1 x��/��!�� 'Θ(n)
��&�
an-1 nulla1a0init 333 ai-1 ai 333
p
an-1 nulla1a0init 333 ai-1 ai 333
x
��1+/&�
��/��!�� 'Θ(1)
an-1 nulla0
init333null 333
finalai-1 ai 333333
an-1 nulla0
init333null 333
finalai-1 ai 333333
p
x
�����1+/&�
��/��!�� 'Θ(1)
��
)2*1,0$.4-��
19��1+/#��%��5�"6
DELETE(p,L) : 1+/L5���n6&��p&�&��&�&��(�"
a0 a1 333 ai 333 an-1ai-1
p
a0 a1 333 ai+1 333 an-1ai-1
� /���!�� 'Θ(n)
��&�
an-1 nullai-1a0init 333 ai ai+1 333
p��1+/&�
� /���!�� 'Θ(1)
ai-1 ai ai+1 333333
p�����1+/&�
� /���!�� 'Θ(1)
ai+1
an-1 nullai-1a0init 333 ai+1 333
333333
ai-1 ai+1 333333333333
�
7E9D;C.@G=�
20
"�(��/��Hi��1��2178<:IFIND(i,L) : D:ALH���nI1i��1<E1��6�)LAST(L) : D:ALH���nI1��1<E1��6�)PREVIOUS(p,L) : D:ALH���nI0'&,$��p1J+�1<E1��6�)
a0 a1 FFF ai FFF an-1ai-1
"�1��
an-1 nullai-1a0init FFF ai ai+1 FFF
!�D:A1��
��!�D:A1��
ai+1aFIND(i,L) : Θ(1)LAST(L) : Θ(1)PREVIOUS(p,L) : Θ(1)
p
FIND(i,L) LAST(L)PREVIOUS(p,L)
FIND(i,L) : Θ(n), LAST(L) : Θ(n), PREVIOUS(p,L) : Θ(n)
p
!�#-%5*3i��1��4��1��0J:?>B-78<:��
PREVIOUS(p,L) LAST(L)
K
FIND(i,L)K
an-1 nulla0
initFFFnull FFF
finalai-1 ai FFFFFF
p
FIND(i,L) : Θ(n), LAST(L) : Θ(1), PREVIOUS(p,L) : Θ(1)PREVIOUS(p,L) LAST(L)FIND(i,L)
K
�
,E2D6?$9J7��
21
��&)*��D5:'�
a1 a2 IIIa0 an-1 an-22 4 6 9 7 III1 -1 m-1 5 -1
0 1 2 3 4 5 6 m-3 m-2 m-1
free_init 0 init 3
@D8:•=-H7!% ;G0C>H0��#(��#"* (�KFORTRAN)•@ADJ����'��+��#"*�•@ADJ���+��#"*�•.<J41F/3BH'�!% �
��
�������
������� ���������
22
�����������
#.%-',�*/(�
23
&()$(stack)&()$��
�����������������! -&+
LIFO(last-in-fast-out)[���]TOP(S) &()$S������"��POP(S) &()$S���� �"��PUSH(x,S) &()$S���� �x"��
a0
a1
a2 PUSH(a2,S)
a0
a1
a2
a0
a1
a2POP(S)
TOP(S)
�
�) ("'�%+#�
24
!#$����
a0 a1 *** ***ai
i
���������� ��Θ(1)
�������
a0 nullaitop ***��(!&�����
���������� ��Θ(1)
top
S
=TOP(S)
a0 a1 *** ***ai
i+1top
S ai+1
PUSH(ai+1,S) POP(S)
ai-1
TOP(S)=
a0 nullaitop ***ai-1
ai+1
PUSH(ai+1,S) POP(S)
��
��
�, +#)�&0$ �
25
"$%����1������2(.�*)1��n!���2int factorial(int n) {if(n==1) return 1;else return n*factorial(n-1);
}
���0'!0��/"
1: if n≠1 then goto 32: return 13: r=factorial(n-1)4: return n*r
����n 3
���0'1:2:3:4:
3���'-"
n 2
1:2:3:4:
n=3, �:4"$%�
n
1:2:3:4:
n=3, �:4n=2, �:4
n=3, �:4"$%�
3
3
1:2:3:4: 4
1
2
n 2
1:2:3:4: 4
n
factorial(3) factorial(2)
factorial(1)3
6
��
"��=08<>#'?
n ��&��' ����'���*$ ,+926
n FIFO(fast-in-fast-out)#)��
.:1937#5<4��
26
[����]n TOP(Q) 08<Q&��&��-�!n ENQUEUE(x,Q) ��x-08<Q& �%�,+n DEQUEUE(Q) ��&��-08<Q�*��
�/;08<���508<�#�(
C D E FA B
G H I
��
'2)1+/�-3,��
27
���((03, queue)���((034�"
��!��" ����"���#��%$1*.
FIFO(fast-in-fast-out)
[����]TOP(Q) (03Q!��!��&��ENQUEUE(x,Q) ��x&(03Q! � �%$DEQUEUE(Q) ��!��&(03Q�#��
a0 a1 a2ENQUEUE(a2,Q)
a0 a1 a2
TOP(Q)
a0 a1 a2
DEQUEUE(Q)
��
�) ("&�$+#�
28
�'+���
*** ***a0
j
���������� ��Θ(1)
�������
ai nulla0front ***
��(!%�����
front
Q
TOP(Q)
ENQUEUE(ai+1,Q)
a1
TOP(Q)=
aia0front ***a1 ai+1
ENQUEUE(ai+1,S)
ai ***
=
(j+i)%nrear0 n-1
DEQUEUE(Q)
a1
*** ***a0
front
Q ai ***
(j+i+1)%nrear0 n-1
a1 ai+1
*** ***
(j+1)%nfront
ai ***
(j+i+1)%nrear0 n-1
a1 ai+1
j
rear
null rear
aifront ***a1 ai+1 null rear
DEQUEUE(Q)���������� ��Θ(1)
��
��
A4 A5 A1 A2 A3
0 1 2 3 4 5
frontrear
&�J��e]`V UEk◆ [dgN'C n @)�CTF�◆ �,K��@HL@GIj$MLGFe]`
◆ "�N��Vjn N����J��.
���������
front ?R i ��N"� /-Element[ (front + i) mod n ]
0213145
ex. Elem[(head + 5) mod n] (head = 1 and n = 6)= Elem[7 mod 6] = E[1]
�
29
\cf`lBN��O+�M8<P;9XZ_YXJ:S7 *6�)'a^bWh��'C@�PGI;S[dgiM(DIO6%�e]`JLAI6BN&�MQS[dgN !@�A�UTI;SNJ6#=I>AKQ;7
�������������� �������������
T S R a P L IN L DEAT S
. :
C
&���5*��!�$03����:��6;���2D���������F(:�5*�� &��+B�'�7/���F.>� &�8C�4=;�?��� ��F
9A�4=�-E!%�#"�)�D-�<@�,D�4=�1AF
30
�3��/7-��n��!��;
¨4+0
n��:��4+0:���4+0 #$��
¨+-.)
n +-.)!��8� �"��9
¨(37
n 1'60
¨1'6-%���/7-��
¨��/7-��!��
&5*4,2�/7-��31
gnf.JWbkdjei[�6!9&¨ Q[�-[!9&o���SUO`W?Or>=Z\*\�Mrp
n @)�8qCZ_`bkdjeiWgnf.Jq2%�q2916n �5��qbkdjeiWgnf.Js B CAF3tq,��3q2376r
¨Aho, Hopcroft, Ullmann The Design and Analysis of Computer Algorithms, Addison
Wesley, 1974.o'�[gnf.J[!9&[�Tp
¨Knuthn The Art of Computer Programming, Addison-Wesley
1�o �*:0pq2�o1"�:0pq3�o#�W�;p, 1975n �*K [79Hr/+FVCIr�KGaR�\�YOu
¨Cormen, Leiserson, Rivest, and Steinn Introduction to Algorithms, 3rd Edition, MIT Press, 2009.n 4�q']�EPN`!9&r�-^hlcmYXV[���[�6ro$*FD(q3�<p
�L
bkdjeiWgnf.J
32