در مورد ساختمان داده

Post on 30-Dec-2015

52 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

در مورد ساختمان داده. ساختمان داده روشی است برای معرفی و دستکاری داده و کلیه برنامه های معرفی داده برای معرفی داده نیازمند یک الگوریتم میباشد. روش های طراحی الگوریتم نیازمند پیشرفت برنامه هایی است که برای نگهداری داده است. در علوم کامپیوتر مطالعه ساختمان داده ها مهم وضروری میبا شد. - PowerPoint PPT Presentation

TRANSCRIPT

داده ساختمان مورد در داده دستکاری و معرفی برای است روشی داده ساختمان

داده معرفی های برنامه کلیه و. میباشد الگوریتم یک نیازمند داده معرفی برای

داده ساختمان مورد در

که است هایی برنامه پیشرفت نیازمند الگوریتم طراحی های روش. است داده نگهداری برای

. شد میبا وضروری مهم ها داده ساختمان مطالعه کامپیوتر علوم در

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

top related