388

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

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 2: در مورد ساختمان داده
Page 3: در مورد ساختمان داده

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

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

Page 4: در مورد ساختمان داده

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

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

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

Page 5: در مورد ساختمان داده

PEREQUISITES

C++ پیچیدگی

Big oh , theta and omega notation

Page 6: در مورد ساختمان داده

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

Page 7: در مورد ساختمان داده

SORT METODS

Insertion sort

Bubble sort

Selection sort

Count sort

Shaker sort

Shell sort

Heap sort

Merge sort

Quick sort

Page 8: در مورد ساختمان داده

یک کردن INSERT AN ELEMENTاضافه

: بگیرید نظر در را زیر ترتیبی لیست

input: 3, 6, 9, 14

.5عنصر کنید اضافه فوق لیست به را

output: 3, 5, 6, 9, 14

Page 9: در مورد ساختمان داده

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

Page 10: در مورد ساختمان داده

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;

Page 11: در مورد ساختمان داده

INSERTION SORT

سایز 1. با .1لیستی بگیرید نظر .“در دهید” قرار لیست داخل را عنصر اولین

شود insertionعمل 2. حفظ ها داده ترتیب بطوریکه کنید تکرار را

Page 12: در مورد ساختمان داده

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

Page 13: در مورد ساختمان داده

INSERTION SORT

For (i=1 ; i<a.length ; i++)

//{insert a[i] into a[0:i-1]

// code to insert comes here

}

Page 14: در مورد ساختمان داده

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;

}

Page 15: در مورد ساختمان داده

COMPLEXITY پیچیدگی یا

/ ای حافظه مکانی پیچیدگی زمانی پیچیدگی

خاص 1. عملگر یک شمارش

مراحل 2. تعداد شمارش

Asymptoticپیچیدگی 3.

Page 16: در مورد ساختمان داده

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;

}

Page 17: در مورد ساختمان داده

COMPRATION COUNT

از کاراکتری نمونه آن nیک در که بگیرید، نظر در می nرا که باشد لیستی طولآن روی خواهیم

Insertion sort. دهیم انجام را

. ؟؟؟؟ بشمارید را کاراکتری نمونه این توابع تعداد و

Determine count as a function of this instance characteristic???.

Page 18: در مورد ساختمان داده

COMPRATION COUNT

For (j=i-1 ; j>=0 && t <a[ j] ;j--)

A[ j+1] = a[ j]; ؟ است شده انجام مقایسه چند

Page 19: در مورد ساختمان داده

COMPRATION COUNT

For (j=i-1 ; j>=0 && t <a[ j] ;j--)

A[ j+1] = a[ j];

به وابسته مقایسات تعداد به tو][ aشمارش توجه iبا

Page 20: در مورد ساختمان داده

COMPRATION COUNT

Worst-case count=maximum count

Best –case count=minimum count

Avarage count

Page 21: در مورد ساختمان داده

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

Page 22: در مورد ساختمان داده

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

Page 23: در مورد ساختمان داده

STEP COUNT

مقادیر به است وابسته محاسبات از مرحله n یک: مثال برای

10 add , 100 subtracts,1000 multiplies

یک میشود .stepفقط محسوب

افزایش با که باشد نمی مفهوم این تعداد nوبه به نیز مرحله اضافه stepیکشود.

Page 24: در مورد ساختمان داده

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}

Page 25: در مورد ساختمان داده

STEP COUNT

s/e باشد 0همیشه نمی یک یا

X=mymath.sum(a,n)

Where n is the instance characteristic has a s/e count of n

Page 26: در مورد ساختمان داده

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

}

Page 27: در مورد ساختمان داده

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)

Page 28: در مورد ساختمان داده

درجی سازی مرتب در پیچیدگی محاسبه

O(n2)

باشد؟ می معنی چه به

Page 29: در مورد ساختمان داده

درجی سازی مرتب در پیچیدگی محاسبه

: حالت Ө(n2)بدترین

: حالت Ө(n)بهترین

که است زمانی حالت بدترین میرود انتظار ) nبنابراین تکرار میشود دوبلمیشود(.

Page 30: در مورد ساختمان داده

درجی سازی مرتب در پیچیدگی محاسبه

آیاO(n2) است؟ زیاد خیلی

( تجربی میباشد؟( practicalالگوریتم چه

Page 31: در مورد ساختمان داده

FASTER COMPUTER VS BETTER ALGORITHM

. است افزار سخت پیشرفت از تر مفید ها الگوریتم پیشرفت

Page 32: در مورد ساختمان داده

داده DATA STRUCTUREساختمان

: داده انواع.) ( ارتباط در گیرند می قرار مجموعه یک در که هایی داده

Ex: integer= {0, +1,-1,+2,-2,….}

days of week = {S,M,T,W,TH,SA}

Page 33: در مورد ساختمان داده

DATA OBJECT

. هستند هم با نامربوط که هایی داده

Example:

MyDataObject={apple, chair, 2,5,red,green ,jack}

Page 34: در مورد ساختمان داده

DATA STRUCTURE

Data oject+

عناصر میان مقایسه برای دارد وجود که روابطی

Ex:369<370

280+4=284

Page 35: در مورد ساختمان داده

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

Page 36: در مورد ساختمان داده

DATA STRUCTURE

می ایجاد داده نمونه چندین روی خاص های عملگر توسط معموال خاص روابط: از عبارتند شود

Add,subtract, predecessor,multiply

جمع ، تفریق ، ضرب

Page 37: در مورد ساختمان داده

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

Page 38: در مورد ساختمان داده

LINEAR (OR ORDERED) LISTS

L= (e0,e1,e2,e3,….,en)

: است قرار بر زیر روابط

: e0“ . میباشد لیست جلوی ”zeroth elementعنصر:en-1“ . میباشد آخرلیست ”last elementsعنصر

:ei+1 بعداز .eiدقیقا گیرد می قرار

Page 39: در مورد ساختمان داده

: خطی های لیست از مثالهایی

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)

Page 40: در مورد ساختمان داده

LINEAR LIST OPRATIONS-SIZE)(

لیست سایز گیری اندازه

Example:

L=(a,b,c,d,e)

Size=5

Page 41: در مورد ساختمان داده

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

Page 42: در مورد ساختمان داده

LINEAR LIST OPRATIONS-INDEXOF (THE ELEMENT)

. گرداند برمی را عنصر هر اندیس

L= (a,b,d,b,a)

Index of(d)=2

Index of(a)=0

Index of(z)=-1

Page 43: در مورد ساختمان داده

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

Page 44: در مورد ساختمان داده

LINEAR LIST OPRATIONS-REMOVE(THE INDEX)

برمی را نظر مورد اندیس محتوای و داده انجام را ف حذگرداند.

L=(a,b,c,d,e,f)

Remove(-1)=>error

Remove(20)=>error

Page 45: در مورد ساختمان داده

DATA STRUCTURE SPECIFICATION

Language independet

Abstract Data Type

Java

Abstaract class

Page 46: در مورد ساختمان داده

LINER LIST ABSTARACT DATA TYPE

AbstractData Type Linear List {instances

Ordered finit collection of zero or more elements ها عملگر

Empty:) (غیرنتیجه : ،در باشد خالی لیست اگر فقط و اگر گرداند می بر را درست نتیجه

false. شد میباSize:) (

. . گرداند می بر را لیست داخل عناصر تعداد بعبارتی گرداند می بر را لیست اندازه

Page 47: در مورد ساختمان داده

DATA REPRESENTATION METHODS

Array ---chapter 5

Linked---chapter 6

Simulated

Page 48: در مورد ساختمان داده

LINEAR LIST ARRAY REPRESENTATION

1 2 3 4 5 6

L=(a,b,c,d,e)

e d c b a

Page 49: در مورد ساختمان داده

RIGHT TO LEFT MAPPING

a b c d e

Page 50: در مورد ساختمان داده

MAPPING THAT SKIP EVERY OTHER POSITION

d c b a

Page 51: در مورد ساختمان داده

WRAP AROUND MAPPING

c b a e d

Page 52: در مورد ساختمان داده

REPRESENTION USED IN TEXT

1 2 3 4 5 6

e d c b a

Page 53: در مورد ساختمان داده

ADD/REMOVE AN ELEMENT _1

Size=5

e d c b a

Page 54: در مورد ساختمان داده

ADD/REMOVE AN ELEMENT_2

Add ( l, g)

size-=6 e d c b g a

Page 55: در مورد ساختمان داده

LENGTH OF ARRAY ELEMENT][

یک باید ،بنابراین داشت خواهد وجود لیست در عنصر تعداد چه دانیم نمی چون . داد افزایش را آن نیاز حسب بر سپس و کرد فرض آن برای اولیه .مقدار

Page 56: در مورد ساختمان داده

LINER LIST ABSTARACT DATA TYPE

Get (index):( مقدار ودرصورتی آن جایگاه طبق بر میباشد عنصر اندیس آن برمی-( 1خروجی را

. نباشد لیست در نظر مورد عنصر که گرداندRemove (index):

. گرداند برمی را عنصر محتوای و کرده حذف را عنصرAdd (index, x):

در xعنصر بقی indexرا ما اندیس شماره آن از پس و کرده اضافه شده داده. میابد افزایش واحد یک جاری موقعیت از عناصر

Output:) (. شود می مرتب راست به چپ از که است لیست خروجی

Page 57: در مورد ساختمان داده

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;)(}

Page 58: در مورد ساختمان داده

LINKED REPRESENTATION

. شوند می نگهداری دلخواه ترتیبی با حافظه در لیست عناصر

explicit information (called a link)

شوند می نامیده لینک که صریح اطالعات

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

Page 59: در مورد ساختمان داده

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)

Page 60: در مورد ساختمان داده

LINKED REPRESENTATION

. باشد می عنصر( e )تهی گر اشاره

:firstNode

. میشود استفاده شروع عنصر به اشاره برای

c a e d b

firstNode

Page 61: در مورد ساختمان داده

NORMAL WAY TO DRAW A LINKED LIST

گر اشاره فیلد

داده فیلد

a b c d enull

firstNode

Page 62: در مورد ساختمان داده

CHAIN

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

. دارد وجود گر اشاره یک دیگر نود به نود یک از

. میباشد تهی لیست آخرین گر اشاره

a b c d enull

firstNode

Page 63: در مورد ساختمان داده

NODE REPRESENTATIONpackage dataStructures;

class ChainNode

{

Object element;

ChainNode next;

}

next

element

Page 64: در مورد ساختمان داده

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;}

Page 65: در مورد ساختمان داده

GET(0)

checkIndex(0);

desiredNode = firstNode ;

return desiredNode.element;

a b c d enull

firstNode

Page 66: در مورد ساختمان داده

GET(1)

checkIndex(1);

desiredNode = firstNode.next ;

return desiredNode.element;

a b c d enull

firstNode

Page 67: در مورد ساختمان داده

GET(2)

checkIndex(2);

desiredNode = firstNode.next.next ;

return desiredNode.element;

a b c d enull

firstNode

Page 68: در مورد ساختمان داده

GET(5)

checkIndex(5); desiredNode = firstNode.next.next.next.next.next;

return desiredNode.element ;

a b c d enull

firstNode

Page 69: در مورد ساختمان داده

NULLPOINTEREXCEPTION

desiredNode = firstNode.next.next.next.next.next.next;

a b c d enull

firstNode

Page 70: در مورد ساختمان داده

REMOVE AN ELEMENT

remove(0)

a b c d enull

firstNode

firstNode = firstNode.next;

Page 71: در مورد ساختمان داده

a b d enull

firstNode

c

REMOVE(2)

کنید انتخاب را شود حذف بخواهد که را نودی از قبل نود ابتدا

"first node" یعنی

cc

beforeNode = firstNode.next;

b

beforeNode

Page 72: در مورد ساختمان داده

REMOVE(2)

. دهید تغییر را گرآن اشاره درbeforeNode اکنون

beforeNode.next = beforeNode.next.next;

beforeNode

a b c d enull

firstNode

Page 73: در مورد ساختمان داده

ADD(0,’F’)

a b c d enull

firstNode

f

newNode

: اول واشاره گام داده فیلد دارای حتما که کنید انتخاب را جدید نود. گرباشد

ChainNode newNode =

new ChainNode)new Character)‘f’(, firstNode(;

Page 74: در مورد ساختمان داده

ADD(0,’F’)

a b c d enull

firstNode

f

newNode

: اول کنید گام انتخاب آغاز نود بعنوان را آن .

firstNode = newNode;

Page 75: در مورد ساختمان داده

ONE-STEP ADD(0,’F’)

a b c d enull

firstNode

f

newNode

firstNode = new ChainNode( new Character(‘f’), firstNode);

Page 76: در مورد ساختمان داده

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;

Page 77: در مورد ساختمان داده

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

Page 78: در مورد ساختمان داده

THE CLASS CHAIN

Page 79: در مورد ساختمان داده

THE CLASS CHAIN

next (datatype ChainNode)

element )datatype Object(

ChainNodeکاربرد

a b c d enull

firstNode

size =

. میباشد لیست تعدادعناصر شمارش

Page 80: در مورد ساختمان داده

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

}

Page 81: در مورد ساختمان داده

CONSTRUCTORS

خالی *//** لیست یک ایجاد

public Chain(int initialCapacity)

{

اولیه// : firstNode and sizeمقادیر

// null and 0

}

public Chain)(

{ this(0)};

Page 82: در مورد ساختمان داده

THE METHOD ISEMPTY

باشد /** خالی لیست اگر وفقط گردانداگر برمی را درست */مقدار public boolean isEmpty)(

{ return size == 0};

Page 83: در مورد ساختمان داده

THE METHOD SIZE)(

میباشد /** لیست داخل عناصر تعداد شمارش آن خروجی/*

public int size)({ return size};

Page 84: در مورد ساختمان داده

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;)}

Page 85: در مورد ساختمان داده

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

Page 86: در مورد ساختمان داده

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;++

}

Page 87: در مورد ساختمان داده

THE METHOD INDEXOFایم // یافته را مربوطه عنصر اینکه از اطمینان

if (currentNode == null)

return -1;

else

return index;

}

Page 88: در مورد ساختمان داده

REMOVING AN ELEMENT

remove(0)

firstNode = firstNode.next;

a b c d enull

firstNode

Page 89: در مورد ساختمان داده

REMOVE AN ELEMENT public Object remove(int index)

{

checkIndex(index);

Object removedElement;

if (index == 0) // کنید حذف را شروع نود

{

removedElement = firstNode.element;

firstNode = firstNode.next;

}

Page 90: در مورد ساختمان داده

REMOVE(2)

دهید تغییر را آن گر اشاره و یافته beforeNodeرا

beforeNode.next = beforeNode.next.next;

beforeNode

a b c d enull

firstNode

Page 91: در مورد ساختمان داده

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;

}

Page 92: در مورد ساختمان داده

ONE-STEP ADD(0,’F’)

a b c d enull

firstNode

f

newNode

firstNode = new ChainNode(‘f’, firstNode);

Page 93: در مورد ساختمان داده

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);

Page 94: در مورد ساختمان داده

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

Page 95: در مورد ساختمان داده

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;++

}

Page 96: در مورد ساختمان داده

CHAIN WITH HEADER NODE

a b c d enull

headerNode

Page 97: در مورد ساختمان داده

EMPTY CHAIN WITH HEADER NODE

headerNode

null

Page 98: در مورد ساختمان داده

CIRCULAR LIST

a b c d e

firstNode

Page 99: در مورد ساختمان داده

DOUBLY LINKED LIST

a b c d enull

firstNode

null

lastNode

Page 100: در مورد ساختمان داده

DOUBLY LINKED CIRCULAR LIST

a b c d e

firstNode

Page 101: در مورد ساختمان داده

DOUBLY LINKED CIRCULAR LIST WITH HEADER NODE

a b c e

headerNode

d

Page 102: در مورد ساختمان داده

EMPTY DOUBLY LINKED CIRCULAR LIST WITH HEADER NODE

headerNode

Page 103: در مورد ساختمان داده

ARRAYS

Page 104: در مورد ساختمان داده

1D ARRAY REPRESENTATION IN C, AND C++

بعدی یک آرایه نمونه x = [a, b, c, d] یک

میگیرند قرار یکدیگر مجاور های خانه ر د

Memory

a b c d

start

• location)x[i]( = start + i

Page 105: در مورد ساختمان داده

SPACE OVERHEAD

space overhead = 4 bytes for start

+ 4 bytes for x.length

= 8 bytes

داریم () نیاز فوق آرایه برای که فضایی میزان

Memory

a b c d

start

Page 106: در مورد ساختمان داده

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]

Page 107: در مورد ساختمان داده

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

Page 108: در مورد ساختمان داده

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

Page 109: در مورد ساختمان داده

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

Page 110: در مورد ساختمان داده

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[]

Page 111: در مورد ساختمان داده

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[]

Page 112: در مورد ساختمان داده

ARRAY REPRESENTATION IN C AND C++

. شود می نامیده ها آرایه آرایه نمایش این

های سایز با ای حافظه نیازبه فوق شکل به توجه ذخیره 4و4و4و3با برای. دارد بعدی یک های آرایه

میباشد سطرها و ستونها سایزتعداد شامل حافظه بلوک یک

a b c d

e f g h

i j k l

x[]

Page 113: در مورد ساختمان داده

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

Page 114: در مورد ساختمان داده

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}

Page 115: در مورد ساختمان داده

SPARSE MATRICES

sparse … باشد می صفر آن عناصر تعدادبیشتر

dense … باشد می صفر آن عناصر تعدادکمتر

Page 116: در مورد ساختمان داده

REPRESENTATION OF UNSTRUCTURED SPARSE MATRICES

داد نشان زیر بصورت میتوان را اسپارس ماتریس در صفری غیر عنصر هر

(row, column, value)

Page 117: در مورد ساختمان داده

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

Page 118: در مورد ساختمان داده

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

Page 119: در مورد ساختمان داده

CHAIN REPRESENTATIONنود ساختار

row col

nextvalue

Page 120: در مورد ساختمان داده

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

Page 121: در مورد ساختمان داده

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(]

Page 122: در مورد ساختمان داده

ARRAY OF ROW CHAINSنود ساختار

next

valuecol

Page 123: در مورد ساختمان داده

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

Page 124: در مورد ساختمان داده

ORTHOGONAL LIST REPRESENTATION

Node structure.

row col

nextdown

value

Page 125: در مورد ساختمان داده

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

Page 126: در مورد ساختمان داده

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

Page 127: در مورد ساختمان داده

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

Page 128: در مورد ساختمان داده

VARIATIONS

May use circular lists instead of chains.

Page 129: در مورد ساختمان داده

STACKS

. میباشد خطی لیست نوعی پشته میگیرد قرار پشته داخل که عنصری bottomاولین

شود می نامیده بگیرد قرار پشته داخل که عنصری نامیده topآخرین

شود می از فقط درج و حذف باشد topعملیات می پذیر امکان

Page 130: در مورد ساختمان داده

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

Page 131: در مورد ساختمان داده

THE INTERFACE STACK

public interface Stack

{

public boolean empty;)(

public Object peek;)(

public void push(Object theObject);

public Object pop;)(

}

Page 132: در مورد ساختمان داده

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

Page 133: در مورد ساختمان داده

PARENTHESES MATCHING

. بخوانید راست به چپ از را عبارت

به پشته Left parenthesisوقتی رادر آن .pushرسید کنید

به پشته right parenthesisوقتی رااز آن .popرسید کنید

Page 134: در مورد ساختمان داده

EXAMPLE

(((a+b)*+ -c d e)/(+f g)-(+h j)*(-k l))(/-m n)

0 1 2

Page 135: در مورد ساختمان داده

EXAMPLE

(((a+b)*+ -c d e)/(+f g)-(+h j)*(-k l))(/-m n)

0 1

)2,6( )1,13(15

Page 136: در مورد ساختمان داده

EXAMPLE

(((a+b)*+ -c d e)/(+f g)-(+h j)*(-k l))(/-m n)

0 1

)2,6( )1,13( )15,19(21

Page 137: در مورد ساختمان داده

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

Page 138: در مورد ساختمان داده

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

Page 139: در مورد ساختمان داده

TOWERS OF HANOI/BRAHMAA B C

1234

64 ستون از طال .Cبه A حلقه شوند می داده انتقال. کند می عمل پشته یک مانند آن در ستون هر. گیرد نمی قرار خودش از کوچکتر روی بزرگی حلقه هیچ و

Page 140: در مورد ساختمان داده

TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma

A B C

123

Page 141: در مورد ساختمان داده

TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma

A B C

12

3

Page 142: در مورد ساختمان داده

TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma

A B C

1 2 3

Page 143: در مورد ساختمان داده

TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma

A B C

1 23

Page 144: در مورد ساختمان داده

TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma

A B C

123

Page 145: در مورد ساختمان داده

TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma

A B C

123

Page 146: در مورد ساختمان داده

TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma

A B C

12

3

Page 147: در مورد ساختمان داده

TOWERS OF HANOI/BRAHMA3-disk Towers Of Hanoi/Brahma

A B C

123

• 7 disk moves

Page 148: در مورد ساختمان داده

RECURSIVE SOLUTIONA B C

1

هانوی با برج مساله از از n > 0 استفاده میتوان را از Cبه Aحلقه استفاده .Bبا کرد منتقل

از استفاده از n-1تعداد Cبا را .Bبه Aحلقه داده انتقال

Page 149: در مورد ساختمان داده

RECURSIVE SOLUTIONA B C

1

ستون اول از Aحلقه .Cبه Aرا دهید انتقال

Page 150: در مورد ساختمان داده

RECURSIVE SOLUTIONA B C

1

n-1 از را .Cبه Bحلقه دهید انتقال

Page 151: در مورد ساختمان داده

RECURSIVE SOLUTIONA B C

1

moves(n) = 0 when n = 0

moves(n) = 2*moves(n-1) + 1 = 2n-1 when n > 0

Page 152: در مورد ساختمان داده

STACKS

public interface Stack

{

public boolean empty;)(

public Object peek;)(

public void push(Object theObject);

public Object pop;)(

}

Page 153: در مورد ساختمان داده

DERIVE FROM A LINEAR LIST CLASS

ArrayLinearList

Chain

Page 154: در مورد ساختمان داده

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

Page 155: در مورد ساختمان داده

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

Page 156: در مورد ساختمان داده

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

Page 157: در مورد ساختمان داده

DERIVE FROM CHAIN

راست ویا ترین چپ معادل پشته باالی عنصر. باشد می آرایه داخل عنصر ترین

empty() => isEmpty)(O(1) time

a b c d enull

firstNode

Page 158: در مورد ساختمان داده

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

Page 159: در مورد ساختمان داده

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

Page 160: در مورد ساختمان داده

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

Page 161: در مورد ساختمان داده

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

Page 162: در مورد ساختمان داده

A FASTER POP)(if (empty())

throw new EmptyStackException;)( return remove(size() - 1);

vs.

try {return remove(size() - 1);}

catch(IndexOutOfBoundsException e)

{ throw new EmptyStackException};)(

Page 163: در مورد ساختمان داده

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

Page 164: در مورد ساختمان داده

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

Page 165: در مورد ساختمان داده

LINKED STACK FROM SCRATCH

See text.

Page 166: در مورد ساختمان داده

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

Page 167: در مورد ساختمان داده

QUEUES

. باشد می خطی لیست یک

صف جلوی .frontعنصر میشود نامیده

لیست انتهای .rearعنصر میشود نامیده

" صف ازانتهای فقط لیست به عنصر .rearافزودن است " پذیر امکان

" صف جلوی از لیست عناصراز کردن .frontحذف است" پذیر امکان

Page 168: در مورد ساختمان داده

BUS STOP QUEUE

Bus Stop

frontrear

rear rear rear rear

Page 169: در مورد ساختمان داده

BUS STOP QUEUE

Bus Stop

frontrear

rear rear

Page 170: در مورد ساختمان داده

BUS STOP QUEUE

Bus Stop

frontrear

rear

Page 171: در مورد ساختمان داده

BUS STOP QUEUE

Bus Stop

frontrear

rear

Page 172: در مورد ساختمان داده

THE INTERFACE QUEUE

public interface Queue

{

public boolean isEmpty;)(

public Object getFrontEelement;)(

public Object getRearEelement;)(

public void put(Object theObject);

public Object remove;)(

}

Page 173: در مورد ساختمان داده

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

Page 174: در مورد ساختمان داده

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

Page 175: در مورد ساختمان داده

DERIVE FROM ARRAYLINEARLIST

با صف در وحذف درج .O(1)عملیات گیرد می صورت

Page 176: در مورد ساختمان داده

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

Page 177: در مورد ساختمان داده

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

Page 178: در مورد ساختمان داده

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

Page 179: در مورد ساختمان داده

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

Page 180: در مورد ساختمان داده

CUSTOM ARRAY QUEUE

صف بعنوان بعدی یک آرایه یک کاربرد

queue[]

حلقوی • صف بعنوان بعدی یک آرایه یک کاربرد

[0]

[1]

[2] [3]

[4]

[5]

Page 181: در مورد ساختمان داده

CUSTOM ARRAY QUEUE

با • حلقوی .3صف است شده پر عنصر

[0]

[1]

[2] [3]

[4]

[5]

A B

C

Page 182: در مورد ساختمان داده

CUSTOM ARRAY QUEUE

گیری • قرار از دیگری لیست 3حالت در حلقویعنصر

[0]

[1]

[2] [3]

[4]

[5]AB

C

Page 183: در مورد ساختمان داده

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

Page 184: در مورد ساختمان داده

ADD AN ELEMENT[0]

[1]

[2] [3]

[4]

[5]

A B

Cfront rear

•rear . کند می حرکت ساعت های عقربه درجهت

Page 185: در مورد ساختمان داده

ADD AN ELEMENT

•rear های عقربه . درجهت دهید حرکت ساعت

[0]

[1]

[2] [3]

[4]

[5]

A B

Cfront

rear

که • مکانی کند rearدر می اشاره آن . را queue[rear]به کنید اضافه

D

Page 186: در مورد ساختمان داده

REMOVE AN ELEMENT[0]

[1]

[2] [3]

[4]

[5]

A B

Cfront rear

•Front . کنید جا جابه واحد یک را

Page 187: در مورد ساختمان داده

REMOVE AN ELEMENT[0]

[1]

[2] [3]

[4]

[5]

A B

C

front

rear

•Front واحد یک .را کنید جا جابه ساعت های عقربه جهت در

محتوای • . queue[front] و کنید حذف صف از را

Page 188: در مورد ساختمان داده

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;

Page 189: در مورد ساختمان داده

EMPTY THAT QUEUE

[0]

[1]

[2] [3]

[4]

[5]AB

Cfront

rear

Page 190: در مورد ساختمان داده

EMPTY THAT QUEUE

[0]

[1]

[2] [3]

[4]

[5]B

C

front

rear

Page 191: در مورد ساختمان داده

EMPTY THAT QUEUE

[0]

[1]

[2] [3]

[4]

[5]

C

front

rear

Page 192: در مورد ساختمان داده

EMPTY THAT QUEUE

: آنگاه شود حذف صف داخل عناصر تمام front = rearزمانی باشد خالی صف front = rear = 0اگر

[0]

[1]

[2] [3]

[4]

[5]front

rear

Page 193: در مورد ساختمان داده

A FULL TANK PLEASE

[0]

[1]

[2] [3]

[4]

[5]AB

Cfront

rear

Page 194: در مورد ساختمان داده

A FULL TANK PLEASE

[0]

[1]

[2] [3]

[4]

[5]AB

Cfront

rearD

Page 195: در مورد ساختمان داده

A FULL TANK PLEASE

[0]

[1]

[2] [3]

[4]

[5]AB

Cfront

rearD E

Page 196: در مورد ساختمان داده

A FULL TANK PLEASE

[0]

[1]

[2] [3]

[4]

[5]AB

Cfront

rear

D E

F

• : شرط به رسیم می نهایت در دهیم ادامه صف کردن پر به front = rearاگرپر • صف که درصورتی باشد می صف بودن خالی شرط همان کنید دقت اگر

است!

Page 197: در مورد ساختمان داده

OUCH!!!!!

حلقوی صف در بودن خالی و پر شرطQueue is empty iff (front == rear) && !lastOperationIsPut

Queue is full iff (front == rear) && lastOperationIsPut

Page 198: در مورد ساختمان داده

OUCH!!!!!

معمولی صف در بودن خالی و پر شرطQueue is empty iff (size == 0)

Queue is full iff (size == queue.length)

Page 199: در مورد ساختمان داده

TREES

Page 200: در مورد ساختمان داده

NATURE LOVER’S VIEW OF A TREE

ریشه

شاخه

ها برگ

Page 201: در مورد ساختمان داده

COMPUTER SCIENTIST’S VIEW

شاخه

ها ریشهبرگ

گره

Page 202: در مورد ساختمان داده

LINEAR LISTS AND TREES

: است ترتیبی های داده برای خطی های لیست کاربردهای

(e0, e1, e2, …, en-1)

هفته روزهای

سال های ماه

کالس یک دانشجویان

: یکسان مراتب سلسله با هایی داده برای درخت کاربرد شرکت یک کارمندان مانند

Page 203: در مورد ساختمان داده

HIERARCHICAL DATA AND TREES

دارد قرار مرتبه باالترین در که نامیده rootعنصری ریشه میشود. یا

Children می قرار ریشه از بعد مراتب در که . عناصری شود می نامیده گیرند

leaves فاقد که هستند .childrenعناصری هستند

Page 204: در مورد ساختمان داده

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

Page 205: در مورد ساختمان داده

DEFINITION

. است شده تشکیل متناهی عناصر مجموعه یک از درخت یک

. شود می نامیده ریشه عنصر اولین

" نامیده درخت عناصرزیر .subtrees of tمابقی شود " می

Page 206: در مورد ساختمان داده

SUBTREES

Object

Number Throwable OutputStream

Integer Double Exception FileOutputStream

RuntimeException

root

Page 207: در مورد ساختمان داده

LEAVES

Object

Number Throwable OutputStream

Integer Double Exception FileOutputStream

RuntimeException

Page 208: در مورد ساختمان داده

PARENT, GRANDPARENT, SIBLINGS, ANCESTORS, DESCENDANTS

Object

Number Throwable OutputStream

Integer Double Exception FileOutputStream

RuntimeException

Page 209: در مورد ساختمان داده

Level 4

Level 3

Level 2

LEVELS

Object

Number Throwable OutputStream

Integer Double Exception FileOutputStream

RuntimeException

Level 1

Page 210: در مورد ساختمان داده

CAUTION

یا هرسطح :Levelبه میدهیم شماره یک درخت در

در . level 0 ریشه دارد قرار

سطح از ریشه های درخت .1زیر شوند می شروع

البتهlevel بنابراین باشد نیز یک سطح از تواند می زیر levelریشه به مربوطسطح ا ریشه های .2درخت میشود شروع

Page 211: در مورد ساختمان داده

HEIGHT = DEPTH = NUMBER OF LEVELS

Level 3

Object

Number Throwable OutputStream

Integer Double Exception FileOutputStream

RuntimeException

Level 4

Level 2

Level 1

Page 212: در مورد ساختمان داده

NODE DEGREE = NUMBER OF CHILDRENObject

Number Throwable OutputStream

Integer Double Exception FileOutputStream

RuntimeException

3

2 1 1

0 0 1 0

0

Page 213: در مورد ساختمان داده

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

Page 214: در مورد ساختمان داده

BINARY TREE

. است شده تشکیل عنصر محدودی تعداد از دودویی درخت. باشد می ریشه آن عنصر اولین یادو باشد صفر یا آن در گره هر درجه که است درختی دودویی .درخت. : میباشد: گره آن های درخت زیر تعداد شامل گره درجه تعریف نامیده راست و چپ های درخت زیر آن درخت زیر دو باشد دو گره درجه اگر

. شوند می

Page 215: در مورد ساختمان داده

DIFFERENCES BETWEEN A TREE & A BINARY TREE

. ندارد دو از بیشتر درجه باینری درخت در گره هر

تواند نمی معمولی درخت اما باشد خالی تواند می دودویی درخت یک. باشد خالی

Page 216: در مورد ساختمان داده

DIFFERENCES BETWEEN A TREE & A BINARY TREE

می ترتیب دارای ها درخت زیر باینری درخت درترتیبی. ها درخت زیر برای معمولی درخت در اما باشند

. نیستیم قائل

a

b

a

b

•: ها درخت زیر ترتیب•. کرد نگاه آنها به باینری دیددرخت به هستنداگر متفاوتکرد • نگاه آنها به معمولی دیددرخت به اگر هستند یکسان

Page 217: در مورد ساختمان داده

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( ( ,).)

Page 218: در مورد ساختمان داده

OPERATOR DEGREE

: ها عملگر انواع. : هستند عملوند دو نیازمند دودویی های عملگر

a + bc / de - f

. : هستند عملوند یک نیازمند یکانی های عملگر +g -h

Page 219: در مورد ساختمان داده

INFIX FORM

. عبارت یک نوشتن برای معمولی روش

. گیرند می قرار عملوند دو میان دودوئی های عملگرa * b

a + b * c

a * b / c

(a + b( * ) + c d + )e – f/g*h + 3.25

Page 220: در مورد ساختمان داده

OPERATOR PRIORITIES

شود؟ می اعمال زودتر عملگر کدامa + b * c

a * b + c / d

شویم می قائل اولویت یا هاترتیب عملگر برایpriority(*) = priority(/) > priority(+) = priority)-(

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

Page 221: در مورد ساختمان داده

TIE BREAKER

از باشند یکسان اولویت دارای گیرند می قرار عبارت در که عملگرهایی اگر. کنید اعمال عملوندها روی را ها عملگر راست به چپ

a + b - c

a * b / c / d

Page 222: در مورد ساختمان داده

INFIX EXPRESSION IS HARD TO PARSE

: داریم محاسباتی عبارت یک نمایش برای روش سه

Infix/ وسط: / بعدعملگردر عملوندچپ ابتدا درآن که

. گیرد می قرار راست ونهایتاعملوند

prefix/ / : بعدعملوندچپ ریشه عملگریا ابتدا درآن که

. گیرد می قرار راست ونهایتاعملوند

postfix / : بعدعملوندراست ریشه عملگریا عملوندچپ ابتدا درآن که. گیرد/ می قرار ریشه ونهایتا

Page 223: در مورد ساختمان داده

POSTFIX FORM

:مثالInfix = a + b

Postfix = ab+

Page 224: در مورد ساختمان داده

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 + /

Page 225: در مورد ساختمان داده

UNARY OPERATORS

Replace with new symbols. +a => a @

+a + b => a @ b+ -a => a? -a-b => a ? b-

Page 226: در مورد ساختمان داده

POSTFIX EVALUATION

بخوانید راست به چپ از را محاسباتی عبارت

هر پشته oprandبه رسیدیددر عملوند .pushیا کنید

پشته از رسیدید عملوند به که .popزمانی کنید اعمال آن روی را وعملگر کنید

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

Page 227: در مورد ساختمان داده

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 + /

Page 228: در مورد ساختمان داده

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 + /

Page 229: در مورد ساختمان داده

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(

Page 230: در مورد ساختمان داده

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 + /

Page 231: در مورد ساختمان داده

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 + /

Page 232: در مورد ساختمان داده

PREFIX FORM

درprefix. آید می راست عموند ونهایتا چپ عملوند سپس و عملگر ابتداInfix = a + b

Postfix = ab+Prefix = +ab

Page 233: در مورد ساختمان داده

BINARY TREE FORM

a + b

+

a b

• - a-

a

Page 234: در مورد ساختمان داده

BINARY TREE FORM

(a + b( * ) – c d( / ) + e f)/

+

a b

-

c d

+

e f

*

/

Page 235: در مورد ساختمان داده

MERITS OF BINARY TREE FORM

. است محاسباتی عبارت از تر بهینه باینری درخت الگوریتم با کار

Binary Tree

+

a b

-

c d

+

e f

*

/

Page 236: در مورد ساختمان داده

BINARY TREE PROPERTIES & REPRESENTATION

Page 237: در مورد ساختمان داده

MINIMUM NUMBER OF NODES

. میباشد آن ارتفاع اندازه به باینری درخت یک های گره تعداد حداقل. باشد می ارتفاع معرف باینری درخت در گره آخرین

درخت در ها گره تعداد حداقلمیباشد. hدودویی

Page 238: در مورد ساختمان داده

MAXIMUM NUMBER OF NODES . : باشد داشته وجود آخرش سطح های گره تمام که درختی کامل درخت برای

: زیر روش هااز گره تعداد حداکثر محاسبه برای

Maximum number of nodes

= 1 + 2 + 4 + 8 + … + 2h-1

= 2h - 1

Page 239: در مورد ساختمان داده

NUMBER OF NODES & HEIGHT

اگرn: آن محدوده باشد باینری درخت یک های گره تعداد

h <= n <= 2h – 1log2(n+1) <= h <= n

Page 240: در مورد ساختمان داده

FULL BINARY TREE

ارتفاع به دودویی درخت یک در ها :hتعدادگره2h – 1 .میباشد

باال کامل درخت در .4ارتفاع میباشد

Page 241: در مورد ساختمان داده

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

Page 242: در مورد ساختمان داده

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

Page 243: در مورد ساختمان داده

NODE NUMBER PROPERTIES

چپ .2iدر iگره میباشد

n باشد درخت یک های آنگاه 2i > nاگر. تعدادگره iباشد

. باشد نمی چپ فرزند دارای

1

2 3

4 5 6 7

8 9 10 11 12 13 14 15

Page 244: در مورد ساختمان داده

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

Page 245: در مورد ساختمان داده

COMPLETE BINARY TREE WITH N NODES

میان ها گره تعداد باینری درخت یک .nتا 1در باشد می

هر شامل درخت سطر , nاگر و گویند کامل درخت درخت آن به آنگاه باشد تا. باشد گرفته قرار راست به ازچپ ها گره و باشد نشده پر کامال آخر

Page 246: در مورد ساختمان داده

EXAMPLE :با را کامل درخت .10مثال بگیرید نظر در گره

1

2 3

4 5 6 7

8 9 10 11 12 13 14 15

Page 247: در مورد ساختمان داده

BINARY TREE REPRESENTATION

. کرد استفاده آرایه از توان می دودویی درخت نمایش برای

پیوندی های لیست از استفاده با نمایش

Page 248: در مورد ساختمان داده

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

Page 249: در مورد ساختمان داده

RIGHT-SKEWED BINARY TREE

سایز با آرایه ازیک استفاه با دودویی درخت یک نمایش تا n+1برای2n. داریم نیاز

a

b

1

3

c7

d15

tree[]0 5 10

a - b - - - c - - - - - - -15d

Page 250: در مورد ساختمان داده

LINKED REPRESENTATION

گر اشاره دو دارای که شود می داده نمایش نود یک صورت به پیوندی نمایش در باینری درخت های گره تمام. دارد چپ به ویکی راست به یکی

برای داریم نیاز که فضایی باینری nکل درخت گره

: پیوندی لیست نمایش جهت

n * (space required by one node).

Page 251: در مورد ساختمان داده

THE CLASS BINARYTREENODE

package dataStructures;

public class BinaryTreeNode

{

Object element;

BinaryTreeNode leftChild ; // چپ درخت زیر

BinaryTreeNode rightChild; //راست درخت زیر

}

Page 252: در مورد ساختمان داده

LINKED REPRESENTATION EXAMPLE

a

cb

d

f

e

g

hleftChildelementrightChild

root

Page 253: در مورد ساختمان داده

BINARY TREE TRAVERSAL METHODS

Preorder

Inorder

Postorder

Level order

Page 254: در مورد ساختمان داده

BINARY TREE TRAVERSAL METHODS

مرتبه یک فقط گره هر باینری درخت پیمایش میشود.visitدر

Page 255: در مورد ساختمان داده

BINARY TREE TRAVERSAL METHODS

Preorder

Inorder

Postorder

Level order

Page 256: در مورد ساختمان داده

PREORDER TRAVERSAL

public static void preOrder(BinaryTreeNode t)

{ if (t != null)

{ visit(t); preOrder(t.leftChild) ; preOrder(t.rightChild) ;}

}

Page 257: در مورد ساختمان داده

PREORDER EXAMPLE (VISIT = PRINT)

a

b c

a b c

Page 258: در مورد ساختمان داده

PREORDER EXAMPLE (VISIT = PRINT)

a

b c

d ef

g h i j

a b d g h e i c f j

Page 259: در مورد ساختمان داده

PREORDER OF EXPRESSION TREE

+

a b

-

c d

+

e f

*

/

!prefixمعادل محاسباتی عبارت در

/ * + a b - c d + e f

Page 260: در مورد ساختمان داده

INORDER TRAVERSAL

public static void inOrder(BinaryTreeNode t)

{ if (t != null)

{ inOrder(t.leftChild); visit(t); inOrder(t.rightChild) ;}

}

Page 261: در مورد ساختمان داده

INORDER EXAMPLE (VISIT = PRINT)

a

b c

b a c

Page 262: در مورد ساختمان داده

INORDER EXAMPLE (VISIT = PRINT)

a

b c

d ef

g h i j

g d h b e i a f j c

Page 263: در مورد ساختمان داده

INORDER BY PROJECTION (SQUISHING)

a

b c

d ef

g h i j

g d h b e i a f j c

Page 264: در مورد ساختمان داده

INORDER OF EXPRESSION TREE

+

a b

-

c d

+

e f

*

/

ea + b * c d / + f-

Page 265: در مورد ساختمان داده

POSTORDER TRAVERSAL

public static void postOrder(BinaryTreeNode t)

{ if (t != null)

{ postOrder(t.leftChild) ; postOrder(t.rightChild); visit(t); }

}

Page 266: در مورد ساختمان داده

POSTORDER EXAMPLE (VISIT = PRINT)

a

b c

b c a

Page 267: در مورد ساختمان داده

POSTORDER EXAMPLE (VISIT = PRINT)

a

b c

d ef

g h i j

g h d i e b j f c a

Page 268: در مورد ساختمان داده

POSTORDER OF EXPRESSION TREE

+

a b

-

c d

+

e f

*

/

!postfixمعادل محاسباتی عبارت در

a b + c d - * e f + /

Page 269: در مورد ساختمان داده

TRAVERSAL APPLICATIONSa

b c

d ef

g h i j

Page 270: در مورد ساختمان داده

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;

}

Page 271: در مورد ساختمان داده

LEVEL-ORDER EXAMPLE (VISIT = PRINT)

a

b c

d ef

g h i j

a b c d e f g h i j

Page 272: در مورد ساختمان داده

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

Page 273: در مورد ساختمان داده

PREORDER AND POSTORDER

preorder = ab a

b

a

bpostorder = ba

Page 274: در مورد ساختمان داده

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

Page 275: در مورد ساختمان داده

INORDER AND PREORDER

preorder = a b d g h e i c f jb / است بعدی درخت gdhریشه زیر

راست eiچپ / درخت زیر

a

gdhbei fjc

a

gdh

fjcb

ei

Page 276: در مورد ساختمان داده

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

Page 277: در مورد ساختمان داده

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 // راست زیردرخت

Page 278: در مورد ساختمان داده

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 //راست زیردرخت

Page 279: در مورد ساختمان داده

PRIORITY QUEUES

: کنیم می تعریف دار اولویت صف دونوع

باال الویت با صف

پایین الویت با صف

Page 280: در مورد ساختمان داده

MIN PRIORITY QUEUE. میباشد عناصر از مجموعه یک

. کنیم می تعریف اولویت کلید یک عنصر هر برای

. داد انجام آن روی توان می را زیر اعمال نه؟ یا است خالی صف اینکه کردن چک

صف اندازه و سایز

لیست به عنصر یک کردن اضافه

اولویت کمترین با عنصر کردن پیدا

اولویت کمترین با عنصری حذف

Page 281: در مورد ساختمان داده

MAX PRIORITY QUEUE. میباشد عناصر از مجموعه یک

. کنیم می تعریف اولویت کلید یک عنصر هر برای

. داد انجام آن روی توان می را زیر اعمال نه؟ یا است خالی صف اینکه کردن چک

صف اندازه و سایز

لیست به عنصر یک کردن اضافه

اولویت بیشترین با عنصر کردن پیدا

اولویت بیشترین با عنصری حذف

Page 282: در مورد ساختمان داده

COMPLEXITY OF OPERATIONS

از توان می خوب نمونه leftistو heaps leftistدوtrees. برد نام

isEmpty, size, and get => O(1) time

put and remove => O(log n) time

آن در باشد nکه می لیست طول

Page 283: در مورد ساختمان داده

APPLICATIONSSorting

. شود می محسوب آن اولویت عنوان به عنصر هر کلید

دهید قرار اولویت لیست در شده مرتب را عناصر

: آن اولویت کلید به توجه با عنصر گزینش صورت به صف باید کنیم انتخاب خواستیم را اولویت کمترین با عنصری اگر

. باشد شده مرتب صعودی

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

Page 284: در مورد ساختمان داده

SORTING EXAMPLE: باشد قرار این به آن های کلید که عنصری کنیدپنج مرتب

6 ,8 ,2 ,4 ,1. کنید استفاده باال الویت با صف از

دهید قرار باال الویت ب صف یک در را عناصر ابتدا می مرتب چپ به راست از عناصر نهایت در دهید انجام را حذف عمل مرتبه پنج

شوند.

Page 285: در مورد ساختمان داده

AFTER PUTTING INTO MAX PRIORITY QUEUE

Sorted Array

68

2

41

باال الویت با صف

Page 286: در مورد ساختمان داده

AFTER FIRST REMOVE MAX OPERATION

Sorted Array

6

2

41

8

باال الویت با صف

Page 287: در مورد ساختمان داده

AFTER SECOND REMOVE MAX OPERATION

Sorted Array

2

41

86

باال الویت با صف

Page 288: در مورد ساختمان داده

AFTER THIRD REMOVE MAX OPERATION

Sorted Array

21

864

با باال صف الویت

Page 289: در مورد ساختمان داده

AFTER FOURTH REMOVE MAX OPERATION

Sorted Array

1

8642

باال الویت با صف

Page 290: در مورد ساختمان داده

AFTER FIFTH REMOVE MAX OPERATION

Sorted Array

86421

باال الویت با صف

Page 291: در مورد ساختمان داده

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)

Page 292: در مورد ساختمان داده

HEAP SORT

در باال الویت با صف .heapکاربرد شود می دیده

با سازی مرتب .O(n)این است انجام قابل

Page 293: در مورد ساختمان داده

MIN TREE DEFINITIONدارای درختی باشد valueهر می مقدار یک یا

Min tree :آن در که است از valueدرختی valueریشه

. باشد کمتر فرزندانش با درختها زیر تمام

Page 294: در مورد ساختمان داده

MIN TREE EXAMPLE

2

4 9 3

4 8 7

9 9

دارد را مقدار کمترین ریشه

Page 295: در مورد ساختمان داده

MAX TREE EXAMPLE

9

4 9 8

4 2 7

3 1

دارد را مقدار بیشترین ریشه

Page 296: در مورد ساختمان داده

MIN HEAP DEFINITION

کامل باینری درخت

min tree

Page 297: در مورد ساختمان داده

MIN HEAP WITH 9 NODES

با کامل گره 9درخت

Page 298: در مورد ساختمان داده

MIN HEAP WITH 9 NODES

با کامل وهمچنین 9درخت min treeگره

2

4

6 7 9 3

8 6

3

Page 299: در مورد ساختمان داده

MAX HEAP WITH 9 NODES

با کامل وهمچنین 9درخت max treeگره

9

8

6 7 2 6

5 1

7

Page 300: در مورد ساختمان داده

HEAP HEIGHT

Heap ان ارتفاع که باشد می کامل log2درختی(n+1).است

Page 301: در مورد ساختمان داده

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

Page 302: در مورد ساختمان داده

MOVING UP AND DOWN A HEAP9

8

6 7 2 6

5 1

7

1

2 3

4 5 6 7

8 9

Page 303: در مورد ساختمان داده

PUTTING AN ELEMENT INTO A MAX HEAP

با کامل گره 10درخت

9

8

6 7 2 6

5 1

7

7

Page 304: در مورد ساختمان داده

PUTTING AN ELEMENT INTO A MAX HEAP

باشد 5 می جدید گره

9

8

6 7 2 6

5 1

7

75

Page 305: در مورد ساختمان داده

PUTTING AN ELEMENT INTO A MAX HEAP

باشد 20 می جدید گره

9

8

6

7

2 6

5 1

7

7

7

Page 306: در مورد ساختمان داده

PUTTING AN ELEMENT INTO A MAX HEAP

باشد 20 می جدید گره

9

8

6

7

2 6

5 1

7

77

Page 307: در مورد ساختمان داده

PUTTING AN ELEMENT INTO A MAX HEAP

باشد 20 می جدید گره

9

86

7

2 6

5 1

7

77

Page 308: در مورد ساختمان داده

PUTTING AN ELEMENT INTO A MAX HEAP

باشد 20 می جدید گره

9

86

7

2 6

5 1

7

77

20

Page 309: در مورد ساختمان داده

PUTTING AN ELEMENT INTO A MAX HEAP

با کامل گره 11درخت

9

86

7

2 6

5 1

7

77

20

Page 310: در مورد ساختمان داده

PUTTING AN ELEMENT INTO A MAX HEAP

باشد 15 می جدید گره

9

86

7

2 6

5 1

7

77

20

Page 311: در مورد ساختمان داده

PUTTING AN ELEMENT INTO A MAX HEAP

باشد 15 می جدید گره

9

8

6

7

2 6

5 1

7

77

20

8

Page 312: در مورد ساختمان داده

PUTTING AN ELEMENT INTO A MAX HEAP

باشد 15 می جدید گره

8

6

7

2 6

5 1

7

77

20

8

9

15

Page 313: در مورد ساختمان داده

COMPLEXITY OF PUT

آن سایز O(log n)پیچیدگی باشد nمقدار heapزمانیکه

8

6

7

2 6

5 1

7

77

20

8

9

15

Page 314: در مورد ساختمان داده

REMOVING THE MAX ELEMENT

. دارد قرار ریشه در مقدلر بزرگترین

8

6

7

2 6

5 1

7

77

20

8

9

15

Page 315: در مورد ساختمان داده

REMOVING THE MAX ELEMENT

شد حذف مقدار بزرگترین آنکه از پس

8

6

7

2 6

5 1

7

77 8

9

15

Page 316: در مورد ساختمان داده

REMOVING THE MAX ELEMENT

.10تعداد heapدر گیرد می قرار عنصر

8

6

7

2 6

5 1

7

77 8

9

15

به 8 .heapرا کنید اضافه

Page 317: در مورد ساختمان داده

REMOVING THE MAX ELEMENT

6

7

2 6

5 1

7

77

9

15

Page 318: در مورد ساختمان داده

REMOVING THE MAX ELEMENT

6

7

2 6

5 1

7

77

9

15

Page 319: در مورد ساختمان داده

REMOVING THE MAX ELEMENT

6

7

2 6

5 1

7

77

9

15

8

Page 320: در مورد ساختمان داده

REMOVING THE MAX ELEMENT

15. گیرد می قرار عنصر بزرگترین

6

7

2 6

5 1

7

77

9

15

8

Page 321: در مورد ساختمان داده

REMOVING THE MAX ELEMENT

شد حذف مقدار بزرگترین آنکه از پس

6

7

2 6

5 1

7

77

9

8

Page 322: در مورد ساختمان داده

REMOVING THE MAX ELEMENT

در .9تعداد heapاکنون گیرد می قرار عنصر

6

7

2 6

5 1

7

77

9

8

Page 323: در مورد ساختمان داده

REMOVING THE MAX ELEMENT

6 2 6

5 1

79

8

Page 324: در مورد ساختمان داده

REMOVING THE MAX ELEMENT

6 2 6

5 1

7

9

8

Page 325: در مورد ساختمان داده

REMOVING THE MAX ELEMENT

6 2 6

5 1

7

9

8

7

Page 326: در مورد ساختمان داده

COMPLEXITY OF REMOVE MAX ELEMENT

O(log n) = پیچیدگی

6 2 6

5 1

7

9

8

7

Page 327: در مورد ساختمان داده

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

Page 328: در مورد ساختمان داده

INITIALIZING A MAX HEAP

موقعیت درخت n/2ابتدا در گره آن از سپس و کرده محاسبه فوق آرایه در راکنید شروع

8

4

7

6 7

8 9

3

710

1

11

5

2

Page 329: در مورد ساختمان داده

INITIALIZING A MAX HEAP

Max heap . درخت در کنید چک درخت در را ریشه max heapبودن محتوای. باشد می بزرگتر آن عناصر کلیه از

8

4

7

6 7

8 9

3

710

1

5

11

2

Page 330: در مورد ساختمان داده

INITIALIZING A MAX HEAP

8

4

7

6 7

8 9

3

710

1

5

11

2

Page 331: در مورد ساختمان داده

INITIALIZING A MAX HEAP

8

9

7

6 7

8 4

3

710

1

5

11

2

Page 332: در مورد ساختمان داده

INITIALIZING A MAX HEAP

8

9

7

6 7

8 4

3

710

1

5

11

2

Page 333: در مورد ساختمان داده

INITIALIZING A MAX HEAP

8

9

7

6 3

8 4

7

710

1

5

11

2

Page 334: در مورد ساختمان داده

INITIALIZING A MAX HEAP

8

9

7

6 3

8 4

7

710

1

5

11

2

Page 335: در مورد ساختمان داده

INITIALIZING A MAX HEAP

8

9

7

6 3

8 4

7

710

1

5

11

.2با 11مکان شود می عوض

Page 336: در مورد ساختمان داده

INITIALIZING A MAX HEAP

8

9

7

6 3

8 4

7

75

1

11

.2با 10مکان شود می عوض

10

Page 337: در مورد ساختمان داده

INITIALIZING A MAX HEAP

8

9

7

6 3

8 4

7

72

1

11

10

5

Page 338: در مورد ساختمان داده

INITIALIZING A MAX HEAP

8

9

7

6 3

8 4

7

72

1

11

10

5

بیابید؟ 1مکان را

Page 339: در مورد ساختمان داده

11

INITIALIZING A MAX HEAP

8

9

7

6 3

8 4

7

72

10

5

مکان 1یافتن

Page 340: در مورد ساختمان داده

INITIALIZING A MAX HEAP

8

9

7

6 3

8 4

7

72

11

10

5

مکان 1یافتن

Page 341: در مورد ساختمان داده

INITIALIZING A MAX HEAP

8

9

7

6 3

8 4

7

72

11

10

5

مکان 1یافتن

Page 342: در مورد ساختمان داده

INITIALIZING A MAX HEAP

8

9

7

6 3

8 4

7

72

11

10

5

. شد انجام

1

Page 343: در مورد ساختمان داده

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= پیچیدگی

Page 344: در مورد ساختمان داده

COMPLEXITYدرخت زیر برای زمانی 2j-1)h-j+1( = t)j( <= jسطح پیچیدگی

= کل )t)1( + t)2( + … + t)h-1( = O)nزمان

Page 345: در مورد ساختمان داده

EXTENDED BINARY TREES

نود یک کنید اضافه بگیریدو نظر در را باینری درخت یک. باشد نداشته درخت زیر جایی هر خارجی

می یافته گسترش باینری درخت آن به دلیل همین بهگویند.

Page 346: در مورد ساختمان داده

A BINARY TREE

Page 347: در مورد ساختمان داده

AN EXTENDED BINARY TREE

خارجی های گره n+1 = تعداد

Page 348: در مورد ساختمان داده

THE FUNCTION S)(گره هر با xبرای یافته گسترش باینری درخت تابع در از استفاده

s(x): قادریم

از مسیر کوتاهترین ریشه xطول های درخت زیر در خارجی گره به. کرد محاسبه

Page 349: در مورد ساختمان داده

S() VALUES EXAMPLE

Page 350: در مورد ساختمان داده

BINARY SEARCH TREES

Dictionary Operations:get(key)put(key, value)remove(key)

Additional operations:ascend)(get(index)( ). گرداند برمی را باینری درخت در گره اندیسremove(index) ) می) حذف را باینری درخت در اندیس محتوای کند

Page 351: در مورد ساختمان داده

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(

Page 352: در مورد ساختمان داده

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

Page 353: در مورد ساختمان داده

DEFINITION OF BINARY SEARCH TREE

باینری درخت یک در

دارای گره .(key, value)هر میباشد

دلخواه گره هر کوچکتر xبرای آن چپ درخت زیر عناصر کلیهمی آن از بزرگتر آن راست درخت زیر عناصر وکلیه آن ازباشد.

Page 354: در مورد ساختمان داده

EXAMPLE BINARY SEARCH TREE20

10

6

2 8

15

40

30

25

. است داده نشان را ها کلید فقط

Page 355: در مورد ساختمان داده

THE OPERATION ASCEND)(20

10

6

2 8

15

40

30

25

با آن میانوندی . )O)nپیمایش است پذیر ن امکا

Page 356: در مورد ساختمان داده

THE OPERATION GET)(20

10

6

2 8

15

40

30

25

(O)height( = O)n = پیچیدگی

Page 357: در مورد ساختمان داده

THE OPERATION PUT)(20

10

6

2 8

15

40

30

25

Put 35.

35

Page 358: در مورد ساختمان داده

THE OPERATION PUT)(

Put 7.

20

10

6

2 8

15

40

30

25 35

7

Page 359: در مورد ساختمان داده

THE OPERATION PUT)(20

10

6

2 8

15

40

30

25

Put 18.

35

7

18

Page 360: در مورد ساختمان داده

THE OPERATION PUT)(20

10

6

2 8

15

40

30

25

.)put)( = O)height => پیچیدگی

35

7

18

Page 361: در مورد ساختمان داده

THE OPERATION REMOVE)( : های وضعیت در گره

باشد برگ گره اگر

. باشد یک درجه از گره اگر

باشد دو درجه از گره اگر

Page 362: در مورد ساختمان داده

REMOVE FROM A LEAF

برگ حذف 7 = گره

20

10

6

2 8

15

40

30

25 35

7

18

Page 363: در مورد ساختمان داده

REMOVE FROM A LEAF (CONTD.)

برگ حذف 35 = گره

20

10

6

2 8

15

40

30

25 35

7

18

Page 364: در مورد ساختمان داده

REMOVE FROM A DEGREE 1 NODE

فرزندی تک گره 40= حذف

20

10

6

2 8

15

40

30

25 35

7

18

Page 365: در مورد ساختمان داده

REMOVE FROM A DEGREE 1 NODE (CONTD.)

فرزندی تک گره 15= حذف

20

10

6

2 8

15

40

30

25 35

7

18

Page 366: در مورد ساختمان داده

REMOVE FROM A DEGREE 2 NODE

فرزندی دو گره 10= حذف

20

10

6

2 8

15

40

30

25 35

7

18

Page 367: در مورد ساختمان داده

REMOVE FROM A DEGREE 2 NODE20

10

6

2 8

15

40

30

25

. راست درخت زیر در کوچکترین با ویا چپ درخت زیر در بزرگترین با کنید جا جابه

35

7

18

Page 368: در مورد ساختمان داده

REMOVE FROM A DEGREE 2 NODE20

10

6

2 8

15

40

30

25

. راست درخت زیر در کوچکترین با ویا چپ درخت زیر در بزرگترین با کنید جا جابه

35

7

18

Page 369: در مورد ساختمان داده

REMOVE FROM A DEGREE 2 NODE20

8

6

2 8

15

40

30

25

. راست درخت زیر در کوچکترین با ویا چپ درخت زیر در بزرگترین با کنید جا جابه

35

7

18

Page 370: در مورد ساختمان داده

REMOVE FROM A DEGREE 2 NODE20

8

6

2 8

15

40

30

25

فرزندی تک گره یا باشد برگ باید یا کلید بزرگترین

35

7

18

Page 371: در مورد ساختمان داده

ANOTHER REMOVE FROM A DEGREE 2 NODE

فرزندی دو گره =20حذف

20

10

6

2 8

15

40

30

25 35

7

18

Page 372: در مورد ساختمان داده

REMOVE FROM A DEGREE 2 NODE20

10

6

2 8

15

40

30

25

چپ درخت زیر در بزرگترین با کنید جا جابه

35

7

18

Page 373: در مورد ساختمان داده

REMOVE FROM A DEGREE 2 NODE20

10

6

2 8

15

40

30

25

چپ درخت زیر در بزرگترین با کنید جا جابه

35

7

18

Page 374: در مورد ساختمان داده

REMOVE FROM A DEGREE 2 NODE18

10

6

2 8

15

40

30

25

چپ درخت زیر در بزرگترین با کنید جا جابه

35

7

18

Page 375: در مورد ساختمان داده

REMOVE FROM A DEGREE 2 NODE18

10

6

2 8

15

40

30

25

.)O)height = پیچیدگی

35

7

Page 376: در مورد ساختمان داده

INDEXED BINARY SEARCH TREE

باینری جستجوی

: دارد وجود اضافی فیلد یک نود هر در

leftSize = درخت چپ های نود تعداد شمارش

Page 377: در مورد ساختمان داده

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

Page 378: در مورد ساختمان داده

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(

Page 379: در مورد ساختمان داده

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]

Page 380: در مورد ساختمان داده

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]

Page 381: در مورد ساختمان داده

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درخت باشد می

Page 382: در مورد ساختمان داده

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]

Page 383: در مورد ساختمان داده

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]

Page 384: در مورد ساختمان داده

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(

Page 385: در مورد ساختمان داده

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(

Page 386: در مورد ساختمان داده

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

Page 387: در مورد ساختمان داده

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