Upload
branden-stanley
View
52
Download
3
Embed Size (px)
DESCRIPTION
در مورد ساختمان داده. ساختمان داده روشی است برای معرفی و دستکاری داده و کلیه برنامه های معرفی داده برای معرفی داده نیازمند یک الگوریتم میباشد. روش های طراحی الگوریتم نیازمند پیشرفت برنامه هایی است که برای نگهداری داده است. در علوم کامپیوتر مطالعه ساختمان داده ها مهم وضروری میبا شد. - PowerPoint PPT Presentation
Citation preview
داده ساختمان مورد در داده دستکاری و معرفی برای است روشی داده ساختمان
داده معرفی های برنامه کلیه و. میباشد الگوریتم یک نیازمند داده معرفی برای
داده ساختمان مورد در
که است هایی برنامه پیشرفت نیازمند الگوریتم طراحی های روش. است داده نگهداری برای
. شد میبا وضروری مهم ها داده ساختمان مطالعه کامپیوتر علوم در
PEREQUISITES
C++ پیچیدگی
Big oh , theta and omega notation
SORTING
: بگیرید نظر در را زیر ترتیب
a[0],a[1],…, a[n-1]
: داریم صعودی سازی مرتب از پس
a[0] <=a[1] <= ….<=a[n-1]
example:8,6,9,4,3 => 3,4,6,8,9
SORT METODS
Insertion sort
Bubble sort
Selection sort
Count sort
Shaker sort
Shell sort
Heap sort
Merge sort
Quick sort
یک کردن INSERT AN ELEMENTاضافه
: بگیرید نظر در را زیر ترتیبی لیست
input: 3, 6, 9, 14
.5عنصر کنید اضافه فوق لیست به را
output: 3, 5, 6, 9, 14
INSERT AN ELEMENT
3 ,6 ,9 ,14 insert 5 کنید .5عدد مقایسه لیست عنصر آخرین با را
Shift 14 right to get 3, 6, 9, , 14
Shift 9 right to get 3, 6, , 9, 14 Shift 6 right to get 3, , 6, 9, 14
کردن اضافه :5با خروجی
Output: 3, 5, 6, 9, 14
INSERT AN ELEMENT
//insert into a[0:i-1]
Int j;
For (j=i-1 ; j>=0 && t <a[ j] ;j--)
A[ j+1] = a[ j]
A[ j+1] = t;
INSERTION SORT
سایز 1. با .1لیستی بگیرید نظر .“در دهید” قرار لیست داخل را عنصر اولین
شود insertionعمل 2. حفظ ها داده ترتیب بطوریکه کنید تکرار را
INSERTION SORT
Sort 7, 3, 5, 6, 1
Start with 7 and insert 3=> 3,7
Insert 5=>3, 5, 7
Insert 6=>3, 5, 6, 7
Insert 1=>1, 3, 5, 6, 7
INSERTION SORT
For (i=1 ; i<a.length ; i++)
//{insert a[i] into a[0:i-1]
// code to insert comes here
}
INSERTION SORT
For (i=1 ; i<a.length ; i++) //{insert a[i] into a[0:i-1]
// code to insert comes hereint t =a[ j]int j;For ( j=i-1 ; j>=0 && t <a[ j] ; j--)A[ j+1] = a[ j]A[ j+1] = t;
}
COMPLEXITY پیچیدگی یا
/ ای حافظه مکانی پیچیدگی زمانی پیچیدگی
خاص 1. عملگر یک شمارش
مراحل 2. تعداد شمارش
Asymptoticپیچیدگی 3.
COMPRATION COUNTای مقایسه شمارش
For (i=1 ; i<a.length ; i++) //{insert a[i] into a[0:i-1]
// code to insert comes hereint t =a[ j]int j;For ( j=i-1 ; j>=0 && t <a[ j] ; j--)A[ j+1] = a[ j]A[ j+1] = t;
}
COMPRATION COUNT
از کاراکتری نمونه آن nیک در که بگیرید، نظر در می nرا که باشد لیستی طولآن روی خواهیم
Insertion sort. دهیم انجام را
. ؟؟؟؟ بشمارید را کاراکتری نمونه این توابع تعداد و
Determine count as a function of this instance characteristic???.
COMPRATION COUNT
For (j=i-1 ; j>=0 && t <a[ j] ;j--)
A[ j+1] = a[ j]; ؟ است شده انجام مقایسه چند
COMPRATION COUNT
For (j=i-1 ; j>=0 && t <a[ j] ;j--)
A[ j+1] = a[ j];
به وابسته مقایسات تعداد به tو][ aشمارش توجه iبا
COMPRATION COUNT
Worst-case count=maximum count
Best –case count=minimum count
Avarage count
WORST-CASE COMPRATION COUNT
For (j=i-1 ; j>=0 && t <a[ j] ;j--)
A[ j+1] = a[ j];
A=[1,2,3,4] and t=0 =>4 compares
A=[1,2,3,..,i] and t=0 =>i compares
WORST-CASE COMPRATION COUNT
for(int i=1; i< n ; i++)
For (j=i-1 ; j>=0 && t <a[ j] ;j--)
A[ j+1] = a[ j];
مقایسات : کل تعداد
Total comprase =1+2+3+…+(n-1)
(= n-1)/2n
STEP COUNT
مقادیر به است وابسته محاسبات از مرحله n یک: مثال برای
10 add , 100 subtracts,1000 multiplies
یک میشود .stepفقط محسوب
افزایش با که باشد نمی مفهوم این تعداد nوبه به نیز مرحله اضافه stepیکشود.
STEP COUNT
s/eFor (i=1 ; i<a.length ; i++) 1
//{insert a[i] into a[0:i-1] 0 // code to insert comes here 1
int t =a[ j] 0 int j; 1 For ( j=i-1 ; j>=0 && t <a[ j] ; j--) 1 A[ j+1] = a[ j] 1 A[ j+1] = t ; 0}
STEP COUNT
s/e باشد 0همیشه نمی یک یا
X=mymath.sum(a,n)
Where n is the instance characteristic has a s/e count of n
STEP COUNT
s/e step
For (i=1 ; i<a.length ; i++) 1
//{insert a[i] into a[0:i-1] 0 // code to insert comes here 1
int t =a[ j] 0 int j; 1 i+1
For ( j=i-1 ; j>=0 && t <a[ j] ; j--) 1 i
A[ j+1] = a[ j] 1 A[ j+1] = t ; 0
}
STEP COUNT
For (int i=1;; i<a.length; i++){2i+3}
Step count for For (int i=1; i<a.length;; i++)Is n Step count for body of for loop is
2(1+2+3+…+n-1+)3(n-1)(=n-1)n +3(n-1)
(=n-1()+3n)
درجی سازی مرتب در پیچیدگی محاسبه
O(n2)
باشد؟ می معنی چه به
درجی سازی مرتب در پیچیدگی محاسبه
: حالت Ө(n2)بدترین
: حالت Ө(n)بهترین
که است زمانی حالت بدترین میرود انتظار ) nبنابراین تکرار میشود دوبلمیشود(.
درجی سازی مرتب در پیچیدگی محاسبه
آیاO(n2) است؟ زیاد خیلی
( تجربی میباشد؟( practicalالگوریتم چه
FASTER COMPUTER VS BETTER ALGORITHM
. است افزار سخت پیشرفت از تر مفید ها الگوریتم پیشرفت
داده DATA STRUCTUREساختمان
: داده انواع.) ( ارتباط در گیرند می قرار مجموعه یک در که هایی داده
Ex: integer= {0, +1,-1,+2,-2,….}
days of week = {S,M,T,W,TH,SA}
DATA OBJECT
. هستند هم با نامربوط که هایی داده
Example:
MyDataObject={apple, chair, 2,5,red,green ,jack}
DATA STRUCTURE
Data oject+
عناصر میان مقایسه برای دارد وجود که روابطی
Ex:369<370
280+4=284
DATA STRUCTURE
: مثال یک در میشوند مقایسه که عناصری میان
369
3 is more signification than 6
3 is immediately to the left of 6
9 is immediately to the right of 6
DATA STRUCTURE
می ایجاد داده نمونه چندین روی خاص های عملگر توسط معموال خاص روابط: از عبارتند شود
Add,subtract, predecessor,multiply
جمع ، تفریق ، ضرب
LINEAR (OR ORDERED) LISTS
Instannces are of the form
(e0,e1,e2,….,en-1)
Where ei denodes a list element n>=0 is finite
List size is n
LINEAR (OR ORDERED) LISTS
L= (e0,e1,e2,e3,….,en)
: است قرار بر زیر روابط
: e0“ . میباشد لیست جلوی ”zeroth elementعنصر:en-1“ . میباشد آخرلیست ”last elementsعنصر
:ei+1 بعداز .eiدقیقا گیرد می قرار
: خطی های لیست از مثالهایی
Student in COP3530=(jack,jill, Abe ,Henry,Mary ,…,judy)
Exams in COP3530=(exam1, exam 2, exam3)
Days of Week=(S,M,T,W,TH,SA)
Months=(Jan,Feb ,Mar ,Apr,…,Nov,Dec)
LINEAR LIST OPRATIONS-SIZE)(
لیست سایز گیری اندازه
Example:
L=(a,b,c,d,e)
Size=5
LINEAR LIST OPRATIONS-GET(THE INDEX)
. دهد می خروجی بعنوان را آن اندیس و میگیرد را عنصر یک
Example:
L=(a,b,c,d,e)
Get(0)=a
Get(2)=c
Get(4)=e
Get(-1)=error
Get(9)=error
LINEAR LIST OPRATIONS-INDEXOF (THE ELEMENT)
. گرداند برمی را عنصر هر اندیس
L= (a,b,d,b,a)
Index of(d)=2
Index of(a)=0
Index of(z)=-1
LINEAR LIST OPRATIONS-REMOVE(THE INDEX)
را نظر مورد اندیس محتوای و داده انجام را ف حذ. گرداند برمی
L=(a,b,c,d,e,f,g)
Remove(2) returns cand L become (a,b,d,e,f,g)
index of d,e,f and g decrease by 1
LINEAR LIST OPRATIONS-REMOVE(THE INDEX)
برمی را نظر مورد اندیس محتوای و داده انجام را ف حذگرداند.
L=(a,b,c,d,e,f)
Remove(-1)=>error
Remove(20)=>error
DATA STRUCTURE SPECIFICATION
Language independet
Abstract Data Type
Java
Abstaract class
LINER LIST ABSTARACT DATA TYPE
AbstractData Type Linear List {instances
Ordered finit collection of zero or more elements ها عملگر
Empty:) (غیرنتیجه : ،در باشد خالی لیست اگر فقط و اگر گرداند می بر را درست نتیجه
false. شد میباSize:) (
. . گرداند می بر را لیست داخل عناصر تعداد بعبارتی گرداند می بر را لیست اندازه
DATA REPRESENTATION METHODS
Array ---chapter 5
Linked---chapter 6
Simulated
LINEAR LIST ARRAY REPRESENTATION
1 2 3 4 5 6
L=(a,b,c,d,e)
e d c b a
RIGHT TO LEFT MAPPING
a b c d e
MAPPING THAT SKIP EVERY OTHER POSITION
d c b a
WRAP AROUND MAPPING
c b a e d
REPRESENTION USED IN TEXT
1 2 3 4 5 6
e d c b a
ADD/REMOVE AN ELEMENT _1
Size=5
e d c b a
ADD/REMOVE AN ELEMENT_2
Add ( l, g)
size-=6 e d c b g a
LENGTH OF ARRAY ELEMENT][
یک باید ،بنابراین داشت خواهد وجود لیست در عنصر تعداد چه دانیم نمی چون . داد افزایش را آن نیاز حسب بر سپس و کرد فرض آن برای اولیه .مقدار
LINER LIST ABSTARACT DATA TYPE
Get (index):( مقدار ودرصورتی آن جایگاه طبق بر میباشد عنصر اندیس آن برمی-( 1خروجی را
. نباشد لیست در نظر مورد عنصر که گرداندRemove (index):
. گرداند برمی را عنصر محتوای و کرده حذف را عنصرAdd (index, x):
در xعنصر بقی indexرا ما اندیس شماره آن از پس و کرده اضافه شده داده. میابد افزایش واحد یک جاری موقعیت از عناصر
Output:) (. شود می مرتب راست به چپ از که است لیست خروجی
LINEAR LIST AS JAVA ABSTRACT CLASS
Public abstractclass Linear ListAsAbstractClass
{Public abstarct Boolean isEmpty;)(Public abstarct int size;)(
Public abstarct object get(int index);Public abstarct int indexOf(Object the element);Public abstarct object remove(int index);Public abstarct void add(int index, Object the element);
Public abstarct string to sorting;)(}
LINKED REPRESENTATION
. شوند می نگهداری دلخواه ترتیبی با حافظه در لیست عناصر
explicit information (called a link)
شوند می نامیده لینک که صریح اطالعات
میشوند استفاده دیگر عنصر به عنصر یک از رفتن برای
MEMORY LAYOUT
a b c d e
c a e d b
کند می استفاده دلخواه جدول یک از .هرلینک
A linked representation uses an arbitrary layout.
. شود می استفاده ها آرایه از ها لیست نمایش برای L = (a,b,c,d,e)
LINKED REPRESENTATION
. باشد می عنصر( e )تهی گر اشاره
:firstNode
. میشود استفاده شروع عنصر به اشاره برای
c a e d b
firstNode
NORMAL WAY TO DRAW A LINKED LIST
گر اشاره فیلد
داده فیلد
a b c d enull
firstNode
CHAIN
می عنصر یک دهنده نشان نود هاهر گر اشاره از لیست یک در یا زنجیر دریکباشد.
. دارد وجود گر اشاره یک دیگر نود به نود یک از
. میباشد تهی لیست آخرین گر اشاره
a b c d enull
firstNode
NODE REPRESENTATIONpackage dataStructures;
class ChainNode
{
Object element;
ChainNode next;
}
next
element
CONSTRUCTORS OF CHAINNODE
ChainNode}{ )(null
null
null
element
next
element
ChainNode)Object element(
{this.element = element;}
ChainNode)Object element, ChainNode next(
{this.element = element;
this.next = next;}
GET(0)
checkIndex(0);
desiredNode = firstNode ;
return desiredNode.element;
a b c d enull
firstNode
GET(1)
checkIndex(1);
desiredNode = firstNode.next ;
return desiredNode.element;
a b c d enull
firstNode
GET(2)
checkIndex(2);
desiredNode = firstNode.next.next ;
return desiredNode.element;
a b c d enull
firstNode
GET(5)
checkIndex(5); desiredNode = firstNode.next.next.next.next.next;
return desiredNode.element ;
a b c d enull
firstNode
NULLPOINTEREXCEPTION
desiredNode = firstNode.next.next.next.next.next.next;
a b c d enull
firstNode
REMOVE AN ELEMENT
remove(0)
a b c d enull
firstNode
firstNode = firstNode.next;
a b d enull
firstNode
c
REMOVE(2)
کنید انتخاب را شود حذف بخواهد که را نودی از قبل نود ابتدا
"first node" یعنی
cc
beforeNode = firstNode.next;
b
beforeNode
REMOVE(2)
. دهید تغییر را گرآن اشاره درbeforeNode اکنون
beforeNode.next = beforeNode.next.next;
beforeNode
a b c d enull
firstNode
ADD(0,’F’)
a b c d enull
firstNode
f
newNode
: اول واشاره گام داده فیلد دارای حتما که کنید انتخاب را جدید نود. گرباشد
ChainNode newNode =
new ChainNode)new Character)‘f’(, firstNode(;
ADD(0,’F’)
a b c d enull
firstNode
f
newNode
: اول کنید گام انتخاب آغاز نود بعنوان را آن .
firstNode = newNode;
ONE-STEP ADD(0,’F’)
a b c d enull
firstNode
f
newNode
firstNode = new ChainNode( new Character(‘f’), firstNode);
ADD(3,’F’)
: اول اندیس ابتداگام با .2نود کنید انتخاب را
a b c d enull
firstNode
fnewNode
beforeNode
c
: دوم فیلد گام و داده فیلد دارای بطوریکه کرده ایجاد را جدید نود حالباشد داشته گر .اشاره
ChainNode newNode = new ChainNode)new Character)‘f’(,
beforeNode.next(;
• finally link beforeNode to newNodebeforeNode.next = newNode;
TWO-STEP ADD(3,’F’)
beforeNode = firstNode.next.next;
beforeNode.next = new ChainNode)new Character)‘f’(,
beforeNode.next(;
a b c d enull
firstNode
fnewNode
beforeNode
c
THE CLASS CHAIN
THE CLASS CHAIN
next (datatype ChainNode)
element )datatype Object(
ChainNodeکاربرد
a b c d enull
firstNode
size =
. میباشد لیست تعدادعناصر شمارش
THE CLASS CHAIN
**/linked implementation of LinearList/*
package dataStructures;
Import c++; // has Iterator
public class Chain implements LinearList
{
//data members
protected ChainNode firstNode;
protected int size;
//methods of Chain come here
}
CONSTRUCTORS
خالی *//** لیست یک ایجاد
public Chain(int initialCapacity)
{
اولیه// : firstNode and sizeمقادیر
// null and 0
}
public Chain)(
{ this(0)};
THE METHOD ISEMPTY
باشد /** خالی لیست اگر وفقط گردانداگر برمی را درست */مقدار public boolean isEmpty)(
{ return size == 0};
THE METHOD SIZE)(
میباشد /** لیست داخل عناصر تعداد شمارش آن خروجی/*
public int size)({ return size};
THE METHOD CHECKINDEX
**/@throws IndexOutOfBoundsException when * index is not between 0 and size - 1/*
که /** زمانی و گرداند می بر را عنصر هر به مربوط .*/1یا 0اندیس ندارد- وجود لیست در عنصر آن که است مفهوم این به برگرداند را
void checkIndex(int index){
if (index < 0 || index >= size) throw new IndexOutOfBoundsException
"( index = " + index + " size = " + size;)}
THE METHOD GET
public Object get(int index)
{
checkIndex(index);
دهید // راتغییر دلخواه نود
ChainNode currentNode = firstNode;
for (int i = 0; i < index; i++)
currentNode = currentNode.next;
return currentNode.element;
}
a b c d enull
firstNode
THE METHOD INDEXOF public int indexOf(Object theElement)
{
کنید // جستجو را نودها از زنجیر یک
ChainNode currentNode = firstNode;
int index = 0 ; //جاری نود اندیس
while (currentNode != null &&
! currentNode.element.equals(theElement))
{
دهید// تغییر بعدی نود به
currentNode = currentNode.next;
index;++
}
THE METHOD INDEXOFایم // یافته را مربوطه عنصر اینکه از اطمینان
if (currentNode == null)
return -1;
else
return index;
}
REMOVING AN ELEMENT
remove(0)
firstNode = firstNode.next;
a b c d enull
firstNode
REMOVE AN ELEMENT public Object remove(int index)
{
checkIndex(index);
Object removedElement;
if (index == 0) // کنید حذف را شروع نود
{
removedElement = firstNode.element;
firstNode = firstNode.next;
}
REMOVE(2)
دهید تغییر را آن گر اشاره و یافته beforeNodeرا
beforeNode.next = beforeNode.next.next;
beforeNode
a b c d enull
firstNode
REMOVE AN ELEMENT else
{ //: میباشد جاری نود دادن قرار برای qجایگاهی
ChainNode q = firstNode;
for (int i = 0; i < index - 1; i++)
q = q.next;
removedElement = q.next.element;
q.next = q.next.next ; //کنید حذف را دلخواه نود
}
size;--
return removedElement;
}
ONE-STEP ADD(0,’F’)
a b c d enull
firstNode
f
newNode
firstNode = new ChainNode(‘f’, firstNode);
ADD AN ELEMENT public void add(int index, Object theElement)
{
if (index < 0 || index > size)
است // نادرست لیست موقعیت
throw new IndexOutOfBoundsException
"( index = " + index + " size = " + size;)
if (index == 0)
. کنید// اضافه جلو به
firstNode = new ChainNode(theElement, firstNode);
TWO-STEP ADD(3,’F’)
beforeNode = firstNode.next.next;
beforeNode.next = new ChainNode)‘f’, beforeNode.next(;
a b c d enull
firstNode
fnewNode
beforeNode
c
ADDING AN ELEMENT else
بیابید // } را جدید عنصر
ChainNode p = firstNode;
for (int i = 0; i < index - 1; i++)
p = p.next;
//p از بعد کنید اضافه
p.next = new ChainNode(theElement, p.next);
}
size;++
}
CHAIN WITH HEADER NODE
a b c d enull
headerNode
EMPTY CHAIN WITH HEADER NODE
headerNode
null
CIRCULAR LIST
a b c d e
firstNode
DOUBLY LINKED LIST
a b c d enull
firstNode
null
lastNode
DOUBLY LINKED CIRCULAR LIST
a b c d e
firstNode
DOUBLY LINKED CIRCULAR LIST WITH HEADER NODE
a b c e
headerNode
d
EMPTY DOUBLY LINKED CIRCULAR LIST WITH HEADER NODE
headerNode
ARRAYS
1D ARRAY REPRESENTATION IN C, AND C++
بعدی یک آرایه نمونه x = [a, b, c, d] یک
میگیرند قرار یکدیگر مجاور های خانه ر د
Memory
a b c d
start
• location)x[i]( = start + i
SPACE OVERHEAD
space overhead = 4 bytes for start
+ 4 bytes for x.length
= 8 bytes
داریم () نیاز فوق آرایه برای که فضایی میزان
Memory
a b c d
start
2D ARRAYS
بعدی دو a آرایه
declared as:
int [][]a = new int[3][4];
. شود م داده نشان جدول یک در که
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
ROWS OF A 2D ARRAY
a[0][0] a[0][1] a[0][2] a[0][3] row 0
a[1][0] a[1][1] a[1][2] a[1][3] row 1
a[2][0] a[2][1] a[2][2] a[2][3] row 2
COLUMNS OF A 2D ARRAY
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
column 0 column 1 column 2 column 3
2D ARRAY REPRESENTATION IN C AND C++
. هستند , بعدی یک های آرایه بعدی دو آرایه های سطر
بعدی یک آرایه از استفاده با دوبعد های آرایه نمایش
x = [row0, row1, row 2]
row 0 = [a,b, c, d]
row 1 = [e, f, g, h]
row 2 = [i, j, k, l]
and store as 4 1D arrays
بعدی دو x آرایه a, b, c, d
e, f, g, h
i, j, k, l
2D ARRAY REPRESENTATION IN JAVA, C, AND C++
x.length = 3
x[0].length = x[1].length = x[2].length = 4
a b c d
e f g h
i j k l
x[]
SPACE OVERHEAD
space overhead = overhead for 4 1D arrays
= 4 * 8 bytes
= 32 bytes
( =number of rows + 1 )x 8 bytes
a b c d
e f g h
i j k l
x[]
ARRAY REPRESENTATION IN C AND C++
. شود می نامیده ها آرایه آرایه نمایش این
های سایز با ای حافظه نیازبه فوق شکل به توجه ذخیره 4و4و4و3با برای. دارد بعدی یک های آرایه
میباشد سطرها و ستونها سایزتعداد شامل حافظه بلوک یک
a b c d
e f g h
i j k l
x[]
ROW-MAJOR MAPPINGExample 3 x 4 array:
a b c d
e f g h
i j k l
آن عنصر هر بطوریکه است گرفته قرار بعدی یک آرایه یک در فوق آرایهاست فوق آرایه از سطر آرایه یک یک آن سطر هر بعبارتی و
. باشد می بعدی یک
اند . شده مرتب راست به چپ از سطر هر عناصرداخل
اند . شده مرتب پایین به باال از سطرها
We get y[] = {a, b, c, d, e, f, g, h, i, j, k, l}
row 0 row 1 row 2 … row i
COLUMN-MAJOR MAPPINGa b c d
e f g h
i j k lآن عنصر هر بطوریکه است گرفته قرار بعدی یک آرایه یک در فوق آرایهیک آرایه یک آن ستون هر بعبارتی و است فوق آرایه از ستون یک
. باشد می مرتب بعدی پایین به باال از ستون هر عناصرداخلاند . شدهاند . شده مرتب راست به چپ هااز ستونWe get y = {a, e, i, b, f, j, c, g, k, d, h, l}
SPARSE MATRICES
sparse … باشد می صفر آن عناصر تعدادبیشتر
dense … باشد می صفر آن عناصر تعدادکمتر
REPRESENTATION OF UNSTRUCTURED SPARSE MATRICES
داد نشان زیر بصورت میتوان را اسپارس ماتریس در صفری غیر عنصر هر
(row, column, value)
SINGLE LINEAR LIST EXAMPLE
0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0
list =
row 1 1 2 2 4 4
column 3 5 3 4 2 3
value 3 4 5 7 2 6
ARRAY LINEAR LIST REPRESENTATION
row 1 1 2 2 4 4
list = column 3 5 3 4 2 3
value 3 4 5 7 2 6
element 0 1 2 3 4 5
row 1 1 2 2 4 4
column 3 5 3 4 2 3
value 3 4 5 7 2 6
CHAIN REPRESENTATIONنود ساختار
row col
nextvalue
SINGLE CHAIN row 1 1 2 2 4 4
list = column 3 5 3 4 2 3
value 3 4 5 7 2 6
1 3
3
1 5
4
2
5
2
7
4
2
4
6
3 4 3null
firstNode
2
ONE LINEAR LIST PER ROW
0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0
row1 = [)3, 3(, )5,4(]
row2 = [)3,5(, )4,7(]
row3 = []
row4 = [)2,2(, )3,6(]
ARRAY OF ROW CHAINSنود ساختار
next
valuecol
ARRAY OF ROW CHAINS
0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0
row[]
33
null
45
53
null
74
22
null
63
null
ORTHOGONAL LIST REPRESENTATION
Node structure.
row col
nextdown
value
ROW LISTS
0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0
null
1 3 3 1 5 4
2 3 5 2 4 7
4 2 2 4 3 6
n
n
n
COLUMN LISTS
0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0
1 3 3 1 5 4
2 3 5 2 4 7
4 2 2 4 3 6
n
nn
ORTHOGONAL LISTS
0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0
null
row[]
1 3 3 1 5 4
2 3 5 2 4 7
4 2 2 4 3 6
n n
n
nnn
VARIATIONS
May use circular lists instead of chains.
STACKS
. میباشد خطی لیست نوعی پشته میگیرد قرار پشته داخل که عنصری bottomاولین
شود می نامیده بگیرد قرار پشته داخل که عنصری نامیده topآخرین
شود می از فقط درج و حذف باشد topعملیات می پذیر امکان
STACK OF CUPS
وحذف درج از Fبرای .topباید کرد عمل
bottom
top
C
A
B
D
E
F
• Stack=LIFO=LAST IN FIRST OUT
bottom
top
C
A
B
D
E
THE INTERFACE STACK
public interface Stack
{
public boolean empty;)(
public Object peek;)(
public void push(Object theObject);
public Object pop;)(
}
PARENTHESES MATCHING
(((a+b)*+ -c d e)/(+f g)-(+h j)*(-k l))(/-m n)Output pairs (u,v) such that the left parenthesis at position u is
matched with the right parenthesis at v.(2,6) (1,13 )(15,19) (21,25 )(27,31) (0,32) (34,38)
(a+b))(*(+c d)(0,4)right parenthesis at 5 has no matching left parenthesis
(8,12)left parenthesis at 7 has no matching right parenthesis
PARENTHESES MATCHING
. بخوانید راست به چپ از را عبارت
به پشته Left parenthesisوقتی رادر آن .pushرسید کنید
به پشته right parenthesisوقتی رااز آن .popرسید کنید
EXAMPLE
(((a+b)*+ -c d e)/(+f g)-(+h j)*(-k l))(/-m n)
0 1 2
EXAMPLE
(((a+b)*+ -c d e)/(+f g)-(+h j)*(-k l))(/-m n)
0 1
)2,6( )1,13(15
EXAMPLE
(((a+b)*+ -c d e)/(+f g)-(+h j)*(-k l))(/-m n)
0 1
)2,6( )1,13( )15,19(21
EXAMPLE
(((a+b)*+ -c d e)/(+f g)-(+h j)*(-k l))(/-m n)
0 1
)2,6( )1,13( )15,19( )21,25(27
EXAMPLE
(((a+b)*+ -c d e)/(+f g)-(+h j)*(-k l))(/-m n)
0 1
)2,6( )1,13( )15,19( )21,25()27,31( )0,32(
• and so on
TOWERS OF HANOI/BRAHMAA B C
1234
64 ستون از طال .Cبه A حلقه شوند می داده انتقال. کند می عمل پشته یک مانند آن در ستون هر. گیرد نمی قرار خودش از کوچکتر روی بزرگی حلقه هیچ و
TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma
A B C
123
TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma
A B C
12
3
TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma
A B C
1 2 3
TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma
A B C
1 23
TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma
A B C
123
TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma
A B C
123
TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma
A B C
12
3
TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma
A B C
123
• 7 disk moves
RECURSIVE SOLUTIONA B C
1
هانوی با برج مساله از از n > 0 استفاده میتوان را از Cبه Aحلقه استفاده .Bبا کرد منتقل
از استفاده از n-1تعداد Cبا را .Bبه Aحلقه داده انتقال
RECURSIVE SOLUTIONA B C
1
ستون اول از Aحلقه .Cبه Aرا دهید انتقال
RECURSIVE SOLUTIONA B C
1
n-1 از را .Cبه Bحلقه دهید انتقال
RECURSIVE SOLUTIONA B C
1
moves(n) = 0 when n = 0
moves(n) = 2*moves(n-1) + 1 = 2n-1 when n > 0
STACKS
public interface Stack
{
public boolean empty;)(
public Object peek;)(
public void push(Object theObject);
public Object pop;)(
}
DERIVE FROM A LINEAR LIST CLASS
ArrayLinearList
Chain
DERIVE FROM ARRAYLINEARLIST
راست ویا ترین چپ معادل پشته باالی عنصر. باشد می آرایه داخل عنصر ترین
empty() => isEmpty)(O(1) time
peek() => get(0) or get(size() - 1)O(1) time
0 1 2 3 4 5 6
a b c d e
DERIVE FROM ARRAYLINEARLIST
که قراردارد topوقتی آرایه عنصر ترین چپ موقعیت درpush(theObject) => add(0,
theObject)O(size) timepop() => remove(0)O(size) time
0 1 2 3 4 5 6
a b c d e
DERIVE FROM ARRAYLINEARLIST
که قراردارد topوقتی آرایه عنصر ترین راست موقعیت درpush(theObject) => add(size(),
theObject)O(1) timepop() => remove(size()-1)O(1) time
use right end of list as top of stack
0 1 2 3 4 5 6
a b c d e
DERIVE FROM CHAIN
راست ویا ترین چپ معادل پشته باالی عنصر. باشد می آرایه داخل عنصر ترین
empty() => isEmpty)(O(1) time
a b c d enull
firstNode
DERIVE FROM CHAIN
a b c d enull
firstNode
که – قراردارد topوقتی آرایه عنصر ترین چپ موقعیت در
peek)( => get)0( O)1( time push)theObject( => add)0, theObject( O)1( time pop)( => remove)0( O)1( time
DERIVE FROM CHAIN
a b c d enull
firstNode
که – آرایه topوقتی عنصر ترین راست موقعیت درقراردارد
• peek)( => get)size)( - 1(• O)size( time• push)theObject( => add)size)(, theObject(• O)size( time• pop)( => remove)size)(-1(• O)size( time
– use left end of list as top of stack
EMPTY() AND PEEK)(
public boolean empty)({ return isEmpty};)(
public Object peek)({
if (empty())
throw new EmptyStackException;)( return get(size() - 1)
}
0 1 2 3 4 5 6
a b c d e
PUSH(THEOBJECT) AND POP)(
public void push(Object theElement)
{ add(size(), theElement)};
public Object pop)({
if (empty())
throw new EmptyStackException;)( return remove(size() - 1);
}
0 1 2 3 4 5 6
a b c d e
A FASTER POP)(if (empty())
throw new EmptyStackException;)( return remove(size() - 1);
vs.
try {return remove(size() - 1);}
catch(IndexOutOfBoundsException e)
{ throw new EmptyStackException};)(
PUSH)…(
public void push(Object theElement)
{ //increase array size if necessary
if (top == stack.length - 1)
stack = ChangeArrayLength.changeLength1D
( stack, 2 * stack.length ;) //put theElement at the top of the stack
stack[++top] = theElement;}
0 1 2 3 4
a b c d e
top
POP)(
public Object pop)({
if (empty())
throw new EmptyStackException;)( Object topElement = stack[top];
stack[top--] = null; // enable garbage collection
return topElement; }
0 1 2 3 4
a b c d e
top
LINKED STACK FROM SCRATCH
See text.
PERFORMANCE
500,000 pop, push, and peek operations
initial capacity
Class 10 500,000
ArrayStack 0.44s 0.22s
DerivedArrayStack 0.60s 0.38s
DerivedArrayStackWithCatch 0.55s 0.33s
java.util.Stack 1.15s-
DerivedLinkedStack 3.20s 3.20s
LinkedStack 2.96s 2.96s
QUEUES
. باشد می خطی لیست یک
صف جلوی .frontعنصر میشود نامیده
لیست انتهای .rearعنصر میشود نامیده
" صف ازانتهای فقط لیست به عنصر .rearافزودن است " پذیر امکان
" صف جلوی از لیست عناصراز کردن .frontحذف است" پذیر امکان
BUS STOP QUEUE
Bus Stop
frontrear
rear rear rear rear
BUS STOP QUEUE
Bus Stop
frontrear
rear rear
BUS STOP QUEUE
Bus Stop
frontrear
rear
BUS STOP QUEUE
Bus Stop
frontrear
rear
THE INTERFACE QUEUE
public interface Queue
{
public boolean isEmpty;)(
public Object getFrontEelement;)(
public Object getRearEelement;)(
public void put(Object theObject);
public Object remove;)(
}
DERIVE FROM ARRAYLINEARLIST
که و frontزمانی لیست .rearچپ باشد لیست راست درQueue.isEmpty() => super.isEmpty)(
O(1) timegetFrontElement() => get(0)
O(1) timegetRearElement() => get(size() - 1)
O(1) timeput(theObject) => add(size(), theObject)
O(1) timeremove() => remove(0)
O(size) time
0 1 2 3 4 5 6
a b c d e
DERIVE FROM ARRAYLINEARLIST
که و frontزمانی لیست .rearراست باشد لیست درچپQueue.isEmpty() => super.isEmpty)(
O(1) timegetFrontElement() => get(size() - 1)
O(1) timegetRearElement() => get(0)
O(1) timeput(theObject) => add(0, theObject)
O(size) timeremove() => remove(size() - 1)
O(1) time
0 1 2 3 4 5 6
e d c b a
DERIVE FROM ARRAYLINEARLIST
با صف در وحذف درج .O(1)عملیات گیرد می صورت
DERIVE FROM EXTENDEDCHAIN
a b c d enull
firstNode lastNode
front rear
که و frontوقتی لیست دارد rearچپ قرار لیست راست
• Queue.isEmpty)( => super.isEmpty)(
– O)1( time
• getFrontElement)( => get)0(
– O)1( time
DERIVE FROM EXTENDEDCHAIN
a b c d enull
firstNode lastNode
front rear• getRearElement)( => getLast)( … new method
– O)1( time
• put)theObject( => append)theObject(
– O)1( time
• remove)( => remove)0(
– O)1( time
DERIVE FROM EXTENDEDCHAIN
e d c b anull
firstNode lastNode
rear front
که و frontوقتی لیست دارد rearراست قرار لیست چپ
Queue.isEmpty)( => super.isEmpty)(
– O)1( time
• getFrontElement)( => getLast)(
– O)1( time
DERIVE FROM EXTENDEDCHAIN
a b c d enull
firstNode lastNode
rear front• getRearElement)( => get)0(
– O)1( time
• put)theObject( => add)0, theObject(
– O)1( time
• remove)( => remove)size-1(
– O)size( time
CUSTOM ARRAY QUEUE
صف بعنوان بعدی یک آرایه یک کاربرد
queue[]
حلقوی • صف بعنوان بعدی یک آرایه یک کاربرد
[0]
[1]
[2] [3]
[4]
[5]
CUSTOM ARRAY QUEUE
با • حلقوی .3صف است شده پر عنصر
[0]
[1]
[2] [3]
[4]
[5]
A B
C
CUSTOM ARRAY QUEUE
گیری • قرار از دیگری لیست 3حالت در حلقویعنصر
[0]
[1]
[2] [3]
[4]
[5]AB
C
CUSTOM ARRAY QUEUE
لیست front and rearکاربرد • حلقویدر
–front . کند می اشاره لیست ابتدای ب که است مکانی
–Rear . کند می اشاره لیست انتهای به که است مکانی
[0]
[1]
[2] [3]
[4]
[5]
A B
Cfront rear
[0]
[1]
[2] [3]
[4]
[5]AB
Cfront
rear
ADD AN ELEMENT[0]
[1]
[2] [3]
[4]
[5]
A B
Cfront rear
•rear . کند می حرکت ساعت های عقربه درجهت
ADD AN ELEMENT
•rear های عقربه . درجهت دهید حرکت ساعت
[0]
[1]
[2] [3]
[4]
[5]
A B
Cfront
rear
که • مکانی کند rearدر می اشاره آن . را queue[rear]به کنید اضافه
D
REMOVE AN ELEMENT[0]
[1]
[2] [3]
[4]
[5]
A B
Cfront rear
•Front . کنید جا جابه واحد یک را
REMOVE AN ELEMENT[0]
[1]
[2] [3]
[4]
[5]
A B
C
front
rear
•Front واحد یک .را کنید جا جابه ساعت های عقربه جهت در
محتوای • . queue[front] و کنید حذف صف از را
MOVING REAR CLOCKWISE[0]
[1]
[2] [3]
[4]
[5]
A B
C
front rear
• rear++;
if )rear = = queue.length( rear = 0;
• rear = )rear + 1( % queue.length;
EMPTY THAT QUEUE
[0]
[1]
[2] [3]
[4]
[5]AB
Cfront
rear
EMPTY THAT QUEUE
[0]
[1]
[2] [3]
[4]
[5]B
C
front
rear
EMPTY THAT QUEUE
[0]
[1]
[2] [3]
[4]
[5]
C
front
rear
EMPTY THAT QUEUE
: آنگاه شود حذف صف داخل عناصر تمام front = rearزمانی باشد خالی صف front = rear = 0اگر
[0]
[1]
[2] [3]
[4]
[5]front
rear
A FULL TANK PLEASE
[0]
[1]
[2] [3]
[4]
[5]AB
Cfront
rear
A FULL TANK PLEASE
[0]
[1]
[2] [3]
[4]
[5]AB
Cfront
rearD
A FULL TANK PLEASE
[0]
[1]
[2] [3]
[4]
[5]AB
Cfront
rearD E
A FULL TANK PLEASE
[0]
[1]
[2] [3]
[4]
[5]AB
Cfront
rear
D E
F
• : شرط به رسیم می نهایت در دهیم ادامه صف کردن پر به front = rearاگرپر • صف که درصورتی باشد می صف بودن خالی شرط همان کنید دقت اگر
است!
OUCH!!!!!
حلقوی صف در بودن خالی و پر شرطQueue is empty iff (front == rear) && !lastOperationIsPut
Queue is full iff (front == rear) && lastOperationIsPut
OUCH!!!!!
معمولی صف در بودن خالی و پر شرطQueue is empty iff (size == 0)
Queue is full iff (size == queue.length)
TREES
NATURE LOVER’S VIEW OF A TREE
ریشه
شاخه
ها برگ
COMPUTER SCIENTIST’S VIEW
شاخه
ها ریشهبرگ
گره
LINEAR LISTS AND TREES
: است ترتیبی های داده برای خطی های لیست کاربردهای
(e0, e1, e2, …, en-1)
هفته روزهای
سال های ماه
کالس یک دانشجویان
: یکسان مراتب سلسله با هایی داده برای درخت کاربرد شرکت یک کارمندان مانند
HIERARCHICAL DATA AND TREES
دارد قرار مرتبه باالترین در که نامیده rootعنصری ریشه میشود. یا
Children می قرار ریشه از بعد مراتب در که . عناصری شود می نامیده گیرند
leaves فاقد که هستند .childrenعناصری هستند
great grand child of root
grand children of root
children of root
CLASSES (PART OF FIGURE 1.1)
Object
Number Throwable OutputStream
Integer Double Exception FileOutputStream
RuntimeException
root
DEFINITION
. است شده تشکیل متناهی عناصر مجموعه یک از درخت یک
. شود می نامیده ریشه عنصر اولین
" نامیده درخت عناصرزیر .subtrees of tمابقی شود " می
SUBTREES
Object
Number Throwable OutputStream
Integer Double Exception FileOutputStream
RuntimeException
root
LEAVES
Object
Number Throwable OutputStream
Integer Double Exception FileOutputStream
RuntimeException
PARENT, GRANDPARENT, SIBLINGS, ANCESTORS, DESCENDANTS
Object
Number Throwable OutputStream
Integer Double Exception FileOutputStream
RuntimeException
Level 4
Level 3
Level 2
LEVELS
Object
Number Throwable OutputStream
Integer Double Exception FileOutputStream
RuntimeException
Level 1
CAUTION
یا هرسطح :Levelبه میدهیم شماره یک درخت در
در . level 0 ریشه دارد قرار
سطح از ریشه های درخت .1زیر شوند می شروع
البتهlevel بنابراین باشد نیز یک سطح از تواند می زیر levelریشه به مربوطسطح ا ریشه های .2درخت میشود شروع
HEIGHT = DEPTH = NUMBER OF LEVELS
Level 3
Object
Number Throwable OutputStream
Integer Double Exception FileOutputStream
RuntimeException
Level 4
Level 2
Level 1
NODE DEGREE = NUMBER OF CHILDRENObject
Number Throwable OutputStream
Integer Double Exception FileOutputStream
RuntimeException
3
2 1 1
0 0 1 0
0
TREE DEGREE = MAX NODE DEGREE
Degree of tree = 3.
Object
Number Throwable OutputStream
Integer Double Exception FileOutputStream
RuntimeException
3
2 1 1
0 0 1 0
0
BINARY TREE
. است شده تشکیل عنصر محدودی تعداد از دودویی درخت. باشد می ریشه آن عنصر اولین یادو باشد صفر یا آن در گره هر درجه که است درختی دودویی .درخت. : میباشد: گره آن های درخت زیر تعداد شامل گره درجه تعریف نامیده راست و چپ های درخت زیر آن درخت زیر دو باشد دو گره درجه اگر
. شوند می
DIFFERENCES BETWEEN A TREE & A BINARY TREE
. ندارد دو از بیشتر درجه باینری درخت در گره هر
تواند نمی معمولی درخت اما باشد خالی تواند می دودویی درخت یک. باشد خالی
DIFFERENCES BETWEEN A TREE & A BINARY TREE
می ترتیب دارای ها درخت زیر باینری درخت درترتیبی. ها درخت زیر برای معمولی درخت در اما باشند
. نیستیم قائل
a
b
a
b
•: ها درخت زیر ترتیب•. کرد نگاه آنها به باینری دیددرخت به هستنداگر متفاوتکرد • نگاه آنها به معمولی دیددرخت به اگر هستند یکسان
ARITHMETIC EXPRESSIONS
(a + b( * ) + c d + )e – f/g*h + 3.25
: از شده تسکیل باال محاسباتی عبارتOperators( + ,- ,/ ,*// عملگرها(.
Operands (a, b, c, d, e, f, g, h, 3.25, (a + b), (c + d), etc.)// ها. عملوند
Delimiters( ( ,).)
OPERATOR DEGREE
: ها عملگر انواع. : هستند عملوند دو نیازمند دودویی های عملگر
a + bc / de - f
. : هستند عملوند یک نیازمند یکانی های عملگر +g -h
INFIX FORM
. عبارت یک نوشتن برای معمولی روش
. گیرند می قرار عملوند دو میان دودوئی های عملگرa * b
a + b * c
a * b / c
(a + b( * ) + c d + )e – f/g*h + 3.25
OPERATOR PRIORITIES
شود؟ می اعمال زودتر عملگر کدامa + b * c
a * b + c / d
شویم می قائل اولویت یا هاترتیب عملگر برایpriority(*) = priority(/) > priority(+) = priority)-(
. باشد داشته را اولویت باالترین که شود می اعمال زودتر عملگری
TIE BREAKER
از باشند یکسان اولویت دارای گیرند می قرار عبارت در که عملگرهایی اگر. کنید اعمال عملوندها روی را ها عملگر راست به چپ
a + b - c
a * b / c / d
INFIX EXPRESSION IS HARD TO PARSE
: داریم محاسباتی عبارت یک نمایش برای روش سه
Infix/ وسط: / بعدعملگردر عملوندچپ ابتدا درآن که
. گیرد می قرار راست ونهایتاعملوند
prefix/ / : بعدعملوندچپ ریشه عملگریا ابتدا درآن که
. گیرد می قرار راست ونهایتاعملوند
postfix / : بعدعملوندراست ریشه عملگریا عملوندچپ ابتدا درآن که. گیرد/ می قرار ریشه ونهایتا
POSTFIX FORM
:مثالInfix = a + b
Postfix = ab+
POSTFIX EXAMPLES
Infix = a + b * cPostfix = a b c * +
• Infix = a * b + c Postfix = a b * c +
• Infix = )a + b( * )c – d( / )e + f( Postfix = a b + c d - * e f + /
UNARY OPERATORS
Replace with new symbols. +a => a @
+a + b => a @ b+ -a => a? -a-b => a ? b-
POSTFIX EVALUATION
بخوانید راست به چپ از را محاسباتی عبارت
هر پشته oprandبه رسیدیددر عملوند .pushیا کنید
پشته از رسیدید عملوند به که .popزمانی کنید اعمال آن روی را وعملگر کنید
در که است این برای روش .postfixاین آید می ها عملوند از بعد عملگر
POSTFIX EVALUATION
(a + b( * ) – c d( / ) + e f )a b + c d - * e f/ + a b + c d - * e f/ +
stack
a
• a b + c d - * e f + /
b
• a b + c d - * e f + /
POSTFIX EVALUATION
(a + b( * ) – c d( / ) + e f )a b + c d - * e f/ + a b + c d - * e f/ +
stack
)a + b(
• a b + c d - * e f + /
• a b + c d - * e f + /
• a b + c d - * e f + /c
• a b + c d - * e f + /
d
• a b + c d - * e f + /
POSTFIX EVALUATION
(a + b( * ) – c d( / ) + e f )a b + c d - * e f/ +
stack
)a + b(
• a b + c d - * e f + /
)c – d(
POSTFIX EVALUATION
(a + b( * ) – c d( / ) + e f )a b + c d - * e f/ +
stack
)a + b(*)c – d(
• a b + c d - * e f + /
e
• a b + c d - * e f + /
• a b + c d - * e f + / f
• a b + c d - * e f + /
POSTFIX EVALUATION
(a + b( * ) – c d( / ) + e f )a b + c d - * e f/ +
stack
)a + b(*)c – d(
• a b + c d - * e f + /
)e + f(
• a b + c d - * e f + /
• a b + c d - * e f + /
• a b + c d - * e f + /
• a b + c d - * e f + /
PREFIX FORM
درprefix. آید می راست عموند ونهایتا چپ عملوند سپس و عملگر ابتداInfix = a + b
Postfix = ab+Prefix = +ab
BINARY TREE FORM
a + b
+
a b
• - a-
a
BINARY TREE FORM
(a + b( * ) – c d( / ) + e f)/
+
a b
-
c d
+
e f
*
/
MERITS OF BINARY TREE FORM
. است محاسباتی عبارت از تر بهینه باینری درخت الگوریتم با کار
Binary Tree
+
a b
-
c d
+
e f
*
/
BINARY TREE PROPERTIES & REPRESENTATION
MINIMUM NUMBER OF NODES
. میباشد آن ارتفاع اندازه به باینری درخت یک های گره تعداد حداقل. باشد می ارتفاع معرف باینری درخت در گره آخرین
درخت در ها گره تعداد حداقلمیباشد. hدودویی
MAXIMUM NUMBER OF NODES . : باشد داشته وجود آخرش سطح های گره تمام که درختی کامل درخت برای
: زیر روش هااز گره تعداد حداکثر محاسبه برای
Maximum number of nodes
= 1 + 2 + 4 + 8 + … + 2h-1
= 2h - 1
NUMBER OF NODES & HEIGHT
اگرn: آن محدوده باشد باینری درخت یک های گره تعداد
h <= n <= 2h – 1log2(n+1) <= h <= n
FULL BINARY TREE
ارتفاع به دودویی درخت یک در ها :hتعدادگره2h – 1 .میباشد
باال کامل درخت در .4ارتفاع میباشد
NUMBERING NODES IN A FULL BINARY TREE
از باینری درخت نودهادر . 2h – 1تا 1تعداد است متغیر. باشد می پایین به باال از سطوح شمارش. باشد می راست به چپ از ها گره شمارش سطح هر در
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
NODE NUMBER PROPERTIES
مثل گره هر استثنای , i / 2درگره iوالد به البته میباشد :i = 1آن زیرا.
i = 1. ندارد والد وریشه میباشد ریشه
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
NODE NUMBER PROPERTIES
چپ .2iدر iگره میباشد
n باشد درخت یک های آنگاه 2i > nاگر. تعدادگره iباشد
. باشد نمی چپ فرزند دارای
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
NODE NUMBER PROPERTIES
راست .2i+1در iگره میباشد n باشد درخت یک های باشد 2i+1 > nاگر. تعدادگره
iآنگاه . باشد نمی راست فرزند دارای
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
COMPLETE BINARY TREE WITH N NODES
میان ها گره تعداد باینری درخت یک .nتا 1در باشد می
هر شامل درخت سطر , nاگر و گویند کامل درخت درخت آن به آنگاه باشد تا. باشد گرفته قرار راست به ازچپ ها گره و باشد نشده پر کامال آخر
EXAMPLE :با را کامل درخت .10مثال بگیرید نظر در گره
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
BINARY TREE REPRESENTATION
. کرد استفاده آرایه از توان می دودویی درخت نمایش برای
پیوندی های لیست از استفاده با نمایش
ARRAY REPRESENTATION
سطحی صورت به را درخت یک های از Level Orderابتداگرهسطحی را درخت سپس کرده گذاری شماره راست به چپ
گره که صورت این به کرده .tree[i]در iپیمایش گیرد می قرار
tree[]0 5 10
a b c d e f g h i j
b
a
c
d e f g
h i j
1
2 3
4 5 6 7
8 9 10
RIGHT-SKEWED BINARY TREE
سایز با آرایه ازیک استفاه با دودویی درخت یک نمایش تا n+1برای2n. داریم نیاز
a
b
1
3
c7
d15
tree[]0 5 10
a - b - - - c - - - - - - -15d
LINKED REPRESENTATION
گر اشاره دو دارای که شود می داده نمایش نود یک صورت به پیوندی نمایش در باینری درخت های گره تمام. دارد چپ به ویکی راست به یکی
برای داریم نیاز که فضایی باینری nکل درخت گره
: پیوندی لیست نمایش جهت
n * (space required by one node).
THE CLASS BINARYTREENODE
package dataStructures;
public class BinaryTreeNode
{
Object element;
BinaryTreeNode leftChild ; // چپ درخت زیر
BinaryTreeNode rightChild; //راست درخت زیر
}
LINKED REPRESENTATION EXAMPLE
a
cb
d
f
e
g
hleftChildelementrightChild
root
BINARY TREE TRAVERSAL METHODS
Preorder
Inorder
Postorder
Level order
BINARY TREE TRAVERSAL METHODS
مرتبه یک فقط گره هر باینری درخت پیمایش میشود.visitدر
BINARY TREE TRAVERSAL METHODS
Preorder
Inorder
Postorder
Level order
PREORDER TRAVERSAL
public static void preOrder(BinaryTreeNode t)
{ if (t != null)
{ visit(t); preOrder(t.leftChild) ; preOrder(t.rightChild) ;}
}
PREORDER EXAMPLE (VISIT = PRINT)
a
b c
a b c
PREORDER EXAMPLE (VISIT = PRINT)
a
b c
d ef
g h i j
a b d g h e i c f j
PREORDER OF EXPRESSION TREE
+
a b
-
c d
+
e f
*
/
!prefixمعادل محاسباتی عبارت در
/ * + a b - c d + e f
INORDER TRAVERSAL
public static void inOrder(BinaryTreeNode t)
{ if (t != null)
{ inOrder(t.leftChild); visit(t); inOrder(t.rightChild) ;}
}
INORDER EXAMPLE (VISIT = PRINT)
a
b c
b a c
INORDER EXAMPLE (VISIT = PRINT)
a
b c
d ef
g h i j
g d h b e i a f j c
INORDER BY PROJECTION (SQUISHING)
a
b c
d ef
g h i j
g d h b e i a f j c
INORDER OF EXPRESSION TREE
+
a b
-
c d
+
e f
*
/
ea + b * c d / + f-
POSTORDER TRAVERSAL
public static void postOrder(BinaryTreeNode t)
{ if (t != null)
{ postOrder(t.leftChild) ; postOrder(t.rightChild); visit(t); }
}
POSTORDER EXAMPLE (VISIT = PRINT)
a
b c
b c a
POSTORDER EXAMPLE (VISIT = PRINT)
a
b c
d ef
g h i j
g h d i e b j f c a
POSTORDER OF EXPRESSION TREE
+
a b
-
c d
+
e f
*
/
!postfixمعادل محاسباتی عبارت در
a b + c d - * e f + /
TRAVERSAL APPLICATIONSa
b c
d ef
g h i j
LEVEL ORDER
Let t be the tree root.while (t != null)
{ visit t and put its children on a FIFO queue; remove a node from the FIFO queue and call it t;
}
LEVEL-ORDER EXAMPLE (VISIT = PRINT)
a
b c
d ef
g h i j
a b c d e f g h i j
SOME EXAMPLES
preorder = ab
a
b
a
b
inorder = ab b
a
a
b
postorder = ab b
a
b
a
level order = ab a
b
a
b
PREORDER AND POSTORDER
preorder = ab a
b
a
bpostorder = ba
INORDER AND PREORDER
inorder = g d h b e i a f j c
preorder = a b d g h e i c f j
a
gdhbei fjc
INORDER AND PREORDER
preorder = a b d g h e i c f jb / است بعدی درخت gdhریشه زیر
راست eiچپ / درخت زیر
a
gdhbei fjc
a
gdh
fjcb
ei
INORDER AND PREORDER
preorder = a b d g h e i c f jd /. باشد می بعدی درخت gریشه زیر
و/ .hچپ باشد می راست درخت زیر
a
gdh
fjcb
ei
a
g
fjcb
eid
h
INORDER AND POSTORDER
درlevel order باشد می راست به چپ از پیمایش درPost order. باشد می چپ به راست از پیمایش
inorder = g d h b e i a f j c postorder = g h d i e b j f c a
Tree root is a; gdhbei // چپ درخت زیرfjc // راست زیردرخت
INORDER AND LEVEL ORDER
درlevel order. باشد می راست به چپ از پیمایش
inorder = g d h b e i a f j c level order = a b c d e f g h i jTree root is a;gdhbei // چپ درخت زیرfjc //راست زیردرخت
PRIORITY QUEUES
: کنیم می تعریف دار اولویت صف دونوع
باال الویت با صف
پایین الویت با صف
MIN PRIORITY QUEUE. میباشد عناصر از مجموعه یک
. کنیم می تعریف اولویت کلید یک عنصر هر برای
. داد انجام آن روی توان می را زیر اعمال نه؟ یا است خالی صف اینکه کردن چک
صف اندازه و سایز
لیست به عنصر یک کردن اضافه
اولویت کمترین با عنصر کردن پیدا
اولویت کمترین با عنصری حذف
MAX PRIORITY QUEUE. میباشد عناصر از مجموعه یک
. کنیم می تعریف اولویت کلید یک عنصر هر برای
. داد انجام آن روی توان می را زیر اعمال نه؟ یا است خالی صف اینکه کردن چک
صف اندازه و سایز
لیست به عنصر یک کردن اضافه
اولویت بیشترین با عنصر کردن پیدا
اولویت بیشترین با عنصری حذف
COMPLEXITY OF OPERATIONS
از توان می خوب نمونه leftistو heaps leftistدوtrees. برد نام
isEmpty, size, and get => O(1) time
put and remove => O(log n) time
آن در باشد nکه می لیست طول
APPLICATIONSSorting
. شود می محسوب آن اولویت عنوان به عنصر هر کلید
دهید قرار اولویت لیست در شده مرتب را عناصر
: آن اولویت کلید به توجه با عنصر گزینش صورت به صف باید کنیم انتخاب خواستیم را اولویت کمترین با عنصری اگر
. باشد شده مرتب صعودی
صورت به صف باید کنیم انتخاب خواستیم را اولویت بیشترین با عنصری اگر. باشد شده مرتب نزولی
SORTING EXAMPLE: باشد قرار این به آن های کلید که عنصری کنیدپنج مرتب
6 ,8 ,2 ,4 ,1. کنید استفاده باال الویت با صف از
دهید قرار باال الویت ب صف یک در را عناصر ابتدا می مرتب چپ به راست از عناصر نهایت در دهید انجام را حذف عمل مرتبه پنج
شوند.
AFTER PUTTING INTO MAX PRIORITY QUEUE
Sorted Array
68
2
41
باال الویت با صف
AFTER FIRST REMOVE MAX OPERATION
Sorted Array
6
2
41
8
باال الویت با صف
AFTER SECOND REMOVE MAX OPERATION
Sorted Array
2
41
86
باال الویت با صف
AFTER THIRD REMOVE MAX OPERATION
Sorted Array
21
864
با باال صف الویت
AFTER FOURTH REMOVE MAX OPERATION
Sorted Array
1
8642
باال الویت با صف
AFTER FIFTH REMOVE MAX OPERATION
Sorted Array
86421
باال الویت با صف
COMPLEXITY OF SORTING
سازی عنصرnمرتبn put operations => O(n log n) time.
n remove max operations => O(n log n) time.total time is O(n log n).
compare with O(n2)
HEAP SORT
در باال الویت با صف .heapکاربرد شود می دیده
با سازی مرتب .O(n)این است انجام قابل
MIN TREE DEFINITIONدارای درختی باشد valueهر می مقدار یک یا
Min tree :آن در که است از valueدرختی valueریشه
. باشد کمتر فرزندانش با درختها زیر تمام
MIN TREE EXAMPLE
2
4 9 3
4 8 7
9 9
دارد را مقدار کمترین ریشه
MAX TREE EXAMPLE
9
4 9 8
4 2 7
3 1
دارد را مقدار بیشترین ریشه
MIN HEAP DEFINITION
کامل باینری درخت
min tree
MIN HEAP WITH 9 NODES
با کامل گره 9درخت
MIN HEAP WITH 9 NODES
با کامل وهمچنین 9درخت min treeگره
2
4
6 7 9 3
8 6
3
MAX HEAP WITH 9 NODES
با کامل وهمچنین 9درخت max treeگره
9
8
6 7 2 6
5 1
7
HEAP HEIGHT
Heap ان ارتفاع که باشد می کامل log2درختی(n+1).است
9 8 7 6 7 2 6 5 1
1 2 3 4 5 6 7 8 9 100
A HEAP IS EFFICIENTLY REPRESENTED AS AN ARRAY
9
8
6 7 2 6
5 1
7
MOVING UP AND DOWN A HEAP9
8
6 7 2 6
5 1
7
1
2 3
4 5 6 7
8 9
PUTTING AN ELEMENT INTO A MAX HEAP
با کامل گره 10درخت
9
8
6 7 2 6
5 1
7
7
PUTTING AN ELEMENT INTO A MAX HEAP
باشد 5 می جدید گره
9
8
6 7 2 6
5 1
7
75
PUTTING AN ELEMENT INTO A MAX HEAP
باشد 20 می جدید گره
9
8
6
7
2 6
5 1
7
7
7
PUTTING AN ELEMENT INTO A MAX HEAP
باشد 20 می جدید گره
9
8
6
7
2 6
5 1
7
77
PUTTING AN ELEMENT INTO A MAX HEAP
باشد 20 می جدید گره
9
86
7
2 6
5 1
7
77
PUTTING AN ELEMENT INTO A MAX HEAP
باشد 20 می جدید گره
9
86
7
2 6
5 1
7
77
20
PUTTING AN ELEMENT INTO A MAX HEAP
با کامل گره 11درخت
9
86
7
2 6
5 1
7
77
20
PUTTING AN ELEMENT INTO A MAX HEAP
باشد 15 می جدید گره
9
86
7
2 6
5 1
7
77
20
PUTTING AN ELEMENT INTO A MAX HEAP
باشد 15 می جدید گره
9
8
6
7
2 6
5 1
7
77
20
8
PUTTING AN ELEMENT INTO A MAX HEAP
باشد 15 می جدید گره
8
6
7
2 6
5 1
7
77
20
8
9
15
COMPLEXITY OF PUT
آن سایز O(log n)پیچیدگی باشد nمقدار heapزمانیکه
8
6
7
2 6
5 1
7
77
20
8
9
15
REMOVING THE MAX ELEMENT
. دارد قرار ریشه در مقدلر بزرگترین
8
6
7
2 6
5 1
7
77
20
8
9
15
REMOVING THE MAX ELEMENT
شد حذف مقدار بزرگترین آنکه از پس
8
6
7
2 6
5 1
7
77 8
9
15
REMOVING THE MAX ELEMENT
.10تعداد heapدر گیرد می قرار عنصر
8
6
7
2 6
5 1
7
77 8
9
15
به 8 .heapرا کنید اضافه
REMOVING THE MAX ELEMENT
6
7
2 6
5 1
7
77
9
15
REMOVING THE MAX ELEMENT
6
7
2 6
5 1
7
77
9
15
REMOVING THE MAX ELEMENT
6
7
2 6
5 1
7
77
9
15
8
REMOVING THE MAX ELEMENT
15. گیرد می قرار عنصر بزرگترین
6
7
2 6
5 1
7
77
9
15
8
REMOVING THE MAX ELEMENT
شد حذف مقدار بزرگترین آنکه از پس
6
7
2 6
5 1
7
77
9
8
REMOVING THE MAX ELEMENT
در .9تعداد heapاکنون گیرد می قرار عنصر
6
7
2 6
5 1
7
77
9
8
REMOVING THE MAX ELEMENT
6 2 6
5 1
79
8
REMOVING THE MAX ELEMENT
6 2 6
5 1
7
9
8
REMOVING THE MAX ELEMENT
6 2 6
5 1
7
9
8
7
COMPLEXITY OF REMOVE MAX ELEMENT
O(log n) = پیچیدگی
6 2 6
5 1
7
9
8
7
INITIALIZING A MAX HEAP
input array = [-, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
8
4
7
6 7
8 9
3
710
1
11
5
2
INITIALIZING A MAX HEAP
موقعیت درخت n/2ابتدا در گره آن از سپس و کرده محاسبه فوق آرایه در راکنید شروع
8
4
7
6 7
8 9
3
710
1
11
5
2
INITIALIZING A MAX HEAP
Max heap . درخت در کنید چک درخت در را ریشه max heapبودن محتوای. باشد می بزرگتر آن عناصر کلیه از
8
4
7
6 7
8 9
3
710
1
5
11
2
INITIALIZING A MAX HEAP
8
4
7
6 7
8 9
3
710
1
5
11
2
INITIALIZING A MAX HEAP
8
9
7
6 7
8 4
3
710
1
5
11
2
INITIALIZING A MAX HEAP
8
9
7
6 7
8 4
3
710
1
5
11
2
INITIALIZING A MAX HEAP
8
9
7
6 3
8 4
7
710
1
5
11
2
INITIALIZING A MAX HEAP
8
9
7
6 3
8 4
7
710
1
5
11
2
INITIALIZING A MAX HEAP
8
9
7
6 3
8 4
7
710
1
5
11
.2با 11مکان شود می عوض
INITIALIZING A MAX HEAP
8
9
7
6 3
8 4
7
75
1
11
.2با 10مکان شود می عوض
10
INITIALIZING A MAX HEAP
8
9
7
6 3
8 4
7
72
1
11
10
5
INITIALIZING A MAX HEAP
8
9
7
6 3
8 4
7
72
1
11
10
5
بیابید؟ 1مکان را
11
INITIALIZING A MAX HEAP
8
9
7
6 3
8 4
7
72
10
5
مکان 1یافتن
INITIALIZING A MAX HEAP
8
9
7
6 3
8 4
7
72
11
10
5
مکان 1یافتن
INITIALIZING A MAX HEAP
8
9
7
6 3
8 4
7
72
11
10
5
مکان 1یافتن
INITIALIZING A MAX HEAP
8
9
7
6 3
8 4
7
72
11
10
5
. شد انجام
1
TIME COMPLEXITY
87
6 3
4
7
710
11
5
2
9
8
1
درخت heap = hارتفاع
در ریشه با ها درخت زیر =level j 2 j-1تعداد
درخت زیر هر برای زمانی )O)h-j+1= پیچیدگی
COMPLEXITYدرخت زیر برای زمانی 2j-1)h-j+1( = t)j( <= jسطح پیچیدگی
= کل )t)1( + t)2( + … + t)h-1( = O)nزمان
EXTENDED BINARY TREES
نود یک کنید اضافه بگیریدو نظر در را باینری درخت یک. باشد نداشته درخت زیر جایی هر خارجی
می یافته گسترش باینری درخت آن به دلیل همین بهگویند.
A BINARY TREE
AN EXTENDED BINARY TREE
خارجی های گره n+1 = تعداد
THE FUNCTION S)(گره هر با xبرای یافته گسترش باینری درخت تابع در از استفاده
s(x): قادریم
از مسیر کوتاهترین ریشه xطول های درخت زیر در خارجی گره به. کرد محاسبه
S() VALUES EXAMPLE
BINARY SEARCH TREES
Dictionary Operations:get(key)put(key, value)remove(key)
Additional operations:ascend)(get(index)( ). گرداند برمی را باینری درخت در گره اندیسremove(index) ) می) حذف را باینری درخت در اندیس محتوای کند
COMPLEXITY OF DICTIONARY OPERATIONSGET(), PUT() AND REMOVE)(
Data Structure Worst Case Expected
Hash Table O)n( O)1(
Binary SearchTree
O)n( O)log n(
BalancedBinary SearchTree
O)log n( O)log n(
COMPLEXITY OF OTHER OPERATIONSASCEND(), GET(INDEX), REMOVE(INDEX)
Data Structure ascend get andremove
Hash Table O)D + n log n( O)D + n log n(
Indexed BST O)n( O)n(
IndexedBalanced BST
O)n( O)log n(
D is number of buckets
DEFINITION OF BINARY SEARCH TREE
باینری درخت یک در
دارای گره .(key, value)هر میباشد
دلخواه گره هر کوچکتر xبرای آن چپ درخت زیر عناصر کلیهمی آن از بزرگتر آن راست درخت زیر عناصر وکلیه آن ازباشد.
EXAMPLE BINARY SEARCH TREE20
10
6
2 8
15
40
30
25
. است داده نشان را ها کلید فقط
THE OPERATION ASCEND)(20
10
6
2 8
15
40
30
25
با آن میانوندی . )O)nپیمایش است پذیر ن امکا
THE OPERATION GET)(20
10
6
2 8
15
40
30
25
(O)height( = O)n = پیچیدگی
THE OPERATION PUT)(20
10
6
2 8
15
40
30
25
Put 35.
35
THE OPERATION PUT)(
Put 7.
20
10
6
2 8
15
40
30
25 35
7
THE OPERATION PUT)(20
10
6
2 8
15
40
30
25
Put 18.
35
7
18
THE OPERATION PUT)(20
10
6
2 8
15
40
30
25
.)put)( = O)height => پیچیدگی
35
7
18
THE OPERATION REMOVE)( : های وضعیت در گره
باشد برگ گره اگر
. باشد یک درجه از گره اگر
باشد دو درجه از گره اگر
REMOVE FROM A LEAF
برگ حذف 7 = گره
20
10
6
2 8
15
40
30
25 35
7
18
REMOVE FROM A LEAF (CONTD.)
برگ حذف 35 = گره
20
10
6
2 8
15
40
30
25 35
7
18
REMOVE FROM A DEGREE 1 NODE
فرزندی تک گره 40= حذف
20
10
6
2 8
15
40
30
25 35
7
18
REMOVE FROM A DEGREE 1 NODE (CONTD.)
فرزندی تک گره 15= حذف
20
10
6
2 8
15
40
30
25 35
7
18
REMOVE FROM A DEGREE 2 NODE
فرزندی دو گره 10= حذف
20
10
6
2 8
15
40
30
25 35
7
18
REMOVE FROM A DEGREE 2 NODE20
10
6
2 8
15
40
30
25
. راست درخت زیر در کوچکترین با ویا چپ درخت زیر در بزرگترین با کنید جا جابه
35
7
18
REMOVE FROM A DEGREE 2 NODE20
10
6
2 8
15
40
30
25
. راست درخت زیر در کوچکترین با ویا چپ درخت زیر در بزرگترین با کنید جا جابه
35
7
18
REMOVE FROM A DEGREE 2 NODE20
8
6
2 8
15
40
30
25
. راست درخت زیر در کوچکترین با ویا چپ درخت زیر در بزرگترین با کنید جا جابه
35
7
18
REMOVE FROM A DEGREE 2 NODE20
8
6
2 8
15
40
30
25
فرزندی تک گره یا باشد برگ باید یا کلید بزرگترین
35
7
18
ANOTHER REMOVE FROM A DEGREE 2 NODE
فرزندی دو گره =20حذف
20
10
6
2 8
15
40
30
25 35
7
18
REMOVE FROM A DEGREE 2 NODE20
10
6
2 8
15
40
30
25
چپ درخت زیر در بزرگترین با کنید جا جابه
35
7
18
REMOVE FROM A DEGREE 2 NODE20
10
6
2 8
15
40
30
25
چپ درخت زیر در بزرگترین با کنید جا جابه
35
7
18
REMOVE FROM A DEGREE 2 NODE18
10
6
2 8
15
40
30
25
چپ درخت زیر در بزرگترین با کنید جا جابه
35
7
18
REMOVE FROM A DEGREE 2 NODE18
10
6
2 8
15
40
30
25
.)O)height = پیچیدگی
35
7
INDEXED BINARY SEARCH TREE
باینری جستجوی
: دارد وجود اضافی فیلد یک نود هر در
leftSize = درخت چپ های نود تعداد شمارش
EXAMPLE INDEXED BINARY SEARCH TREE
20
10
6
2 8
15
40
30
25 35
7
18
0
0 1
1
4
0
0
7
0 0
1
3
leftSize =red
LEFTSIZE AND RANKRank =در عناصر inorderموقعیت
)inorder = صعودی صورت به ها کلید .)مرتب
[2,6,7,8,10,15,18,20,25,30,35,40]
rank)2( = 0
rank)15( = 5
rank)20( = 7
leftSize)x( = rank)x(
LEFTSIZE AND RANK20
10
6
2 8
15
40
30
25 35
7
18
0
0 1
1
4
0
0
7
0 0
1
3
sorted list = [2,6,7,8,10,15,18,20,25,30,35,40]
GET(INDEX) AND REMOVE(INDEX)7
20
10
6
2 8
15
40
30
25 35
7
18
0
0 1
1
4
0
0
0 0
1
3
sorted list = [2,6,7,8,10,15,18,20,25,30,35,40]
GET(INDEX) AND REMOVE(INDEX)
if index = x.leftSize x.element . کن انتخاب را
if index < x.leftSize محتوای که شود می انتخاب چپ indexعنصری درخت زیر در می xآن
باشد.if index > x.leftSize
محتوای شودکه می انتخاب زیر (index - x.leftSize-1)عنصری در آنراست .xدرخت باشد می
LINEAR LIST AS INDEXED BINARY TREEh
e
b
a d
f
l
j
i k
c
g
0
0 1
1
4
0
0
7
0 0
1
3
list = [a,b,c,d,e,f,g,h,i,j,k,l]
ADD(5,’M’)h
e
b
a d
f
l
j
i k
c
g
0
0 1
1
4
0
0
7
0 0
1
3
list = [a,b,c,d,e,f,g,h,i,j,k,l]
ADD(5,’M’)h
e
b
a d
f
l
j
i k
c
g
0
0 1
1
4
0
0
7
0 0
1
3
list = [a,b,c,d,e, m,f,g,h,i,j,k,l]
find node with element 4 )e(
ADD(5,’M’)h
e
b
a d
f
l
j
i k
c
g
0
0 1
1
4
0
0
7
0 0
1
3
list = [a,b,c,d,e, m,f,g,h,i,j,k,l]
find node with element 4 )e(
ADD(5,’M’)h
e
b
a d
f
l
j
i k
c
g
0
0 1
1
4
0
0
7
0 0
1
3
m گره راست به است eرا کرده اضافه
راست درخت زیر نتیجه درخت eدر زیر عنوان به. mراست گیرد می قرار
m
ADD(5,’M’)h
e
b
a d
f
l
j
i k
c
g
0
0 1
1
4
0
0
7
0 0
1
3
m گره راست درخت زیر در چپ فرزند بعنوان .eرا دهید قرار
m