deta structur and alogrihms(ayat)

deta structur and alogrihms(ayat) - ‫ساختمان...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: ‫ساختمان داده‌ها و الگوريتم‬ ‫رشته علوم کامپيوتر‬ ‫ناصر آيت‬ ‫در مورد ساختمان داده‬ ‫‪‬ساختمان داده روشی است برای معرفی و دستکاری داده‬ ‫‪‬و کلیه برنامه های معرفی داده‬ ‫‪‬برای معرفی داده نیازمند یک الگوریتم میباشد.‬ ‫در مورد ساختمان داده‬ ‫روش های طراحی الگوریتم نیازمند پیشرفت برنامه هایی‬ ‫است که برای نگهداری داده است.‬ ‫در علوم کامپیوتر مطالعه ساختمان داده ها مهم وضروری‬ ‫میبا شد.‬ ‫‪‬‬ ‫‪‬‬ Perequisites ++C ‫پیچیدگی‬ Big oh , theta and omega notation ‫‪Sorting‬‬ ‫ترتیب زیر را در نظر بگیرید:‬ ‫1-‪[a[0[,a[1[,…, a[n‬‬ ‫پس از مرتب سازی صعودی داریم:‬ ‫1-‪[a[0[ >=a[1[ >= ….>=a[n‬‬ ‫9,8,6,4,3 <= 3,4,9,6,8:‪example‬‬ Sort metods Insertion sort Bubble sort Selection sort Count sort Shaker sort Shell sort Heap sort Merge sort Quick sort ‫اضافه کردن یک‪insert an‬‬ ‫‪element‬‬ ‫لیست ترتیبی زیر را در نظر بگیرید:‬ ‫41 ,9 ,6 ,3 :‪input‬‬ ‫عنصر 5 را به لیست فوق اضافه کنید.‬ ‫41 ,9 ,6 ,5 ,3 :‪output‬‬ Insert An Element insert 5 14 ,9 ,6 ,3 . ‫عدد 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 در نظر بگیرید.“اولین‬ ‫عنصر را داخل لیست قرار دهید.”‬ ‫عمل ‪ insertion‬را تکرار کنید بطوریکه‬ ‫ترتیب داده ها حفظ شود‬ ‫1.‬ ‫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 here// [int 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‬یا پیچیدگی‬ ‫پیچیدگی مکانی /حافظه ای‬ ‫پیچیدگی زمانی‬ ‫شمارش یک عملگر خاص‬ ‫شمارش تعداد مراحل‬ ‫پیچیدگی ‪Asymptotic‬‬ ‫‪‬‬ ‫‪‬‬ ‫1.‬ ‫2.‬ ‫3.‬ Compration count ‫شمارش مقایسه ای‬ (++For (i=1 ; i>a.length ; i [insert a[i[ into a[0:i-1 //} code to insert comes here// [int 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‬‬ ‫شمارش تعداد مقایسات وابسته به ‪ [[a‬و‪t‬‬ ‫با توجه به ‪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(n/2(= ‫‪Step count‬‬ ‫‪ ‬یک مرحله از محاسبات وابسته است به‬ ‫مقادیر ‪n‬‬ ‫‪ ‬برای مثال :‬ ‫01 ‪add , 100 subtracts,1000 multiplies‬‬ ‫فقط یک ‪ step‬محسوب میشود .‬ ‫‪ ‬وبه این مفهوم نمی باشد که با افزایش ‪n‬‬ ‫یک مرحله نیز به تعداد ‪ step‬اضافه شود.‬ Step count s/e For (i=1 ; i>a.length ; i++( insert a[i[ into a[0:i-1[ code to insert comes here int t =a[ j[ int j; For ( j=i-1 ; j<=0 && t >a[ j[ ; j--( A[ j+1[ = a[ j[ A[ j+1[ = t ; { 1 0 //} 1// 0 1 1 1 0 Step count ‫ همیشه 0 یا یک نمی باشد‬s/e (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++( insert a[i[ into a[0:i-1[ code to insert comes here int t =a[ j[ int j; For ( j=i-1 ; j<=0 && t >a[ j[ ; j--( A[ j+1[ = a[ j[ A[ j+1[ = t ; { 1 0 //} 1// 0 1 1 1 0 i+1 i 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 (n-1(+3(n-1+…+1+2+3(2 (n-1(n +3(n-1(= (n-1((n+3(= ‫محاسبه پیچیدگی در مرتب سازی‬ ‫درجی‬ ‫2‪)O)n‬‬ ‫به چه معنی می باشد؟‬ ‫محاسبه پیچیدگی در مرتب سازی‬ ‫درجی‬ ‫بدترین حالت:2‪)Ө(n‬‬ ‫بهترین حالت: ‪Ө((n‬‬ ‫بنابراین انتظار میرود بدترین حالت زمانی‬ ‫است که ‪ n‬دوبل میشود(تکرار میشود(.‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫محاسبه پیچیدگی در مرتب سازی‬ ‫درجی‬ ‫آیا 2‪)O)n‬خیلی زیاد است؟‬ ‫الگوریتم تجربی(‪ (practical‬چه میباشد؟‬ ‫‪‬‬ ‫‪‬‬ ‫‪Faster Computer Vs Better‬‬ ‫‪Algorithm‬‬ ‫پیشرفت الگوریتم ها مفید تر از پیشرفت‬ ‫سخت افزار است.‬ ‫‪‬‬ ‫‪Data‬‬ ‫ساختمان داده‬ ‫‪Structure‬‬ ‫‪‬‬ ‫‪‬‬ ‫انواع داده :‬ ‫داده هایی که در یک مجموعه قرار می گیرند(در‬ ‫ارتباط(.‬ ‫2-,2+,1-,1+ ,0{ =‪{.…,Ex: integer‬‬ ‫‪{days of week = {S,M,T,W,TH,SA‬‬ Data object .‫داده هایی که نامربوط با هم هستند‬ :Example {MyDataObject={apple, chair, 2,5,red,green ,jack ‫‪Data Structure‬‬ ‫‪+ Data oject‬‬ ‫روابطی که وجود دارد برای مقایسه میان‬ ‫عناصر‬ ‫073>963:‪Ex‬‬ ‫4+082=482‬ Data Structure ‫میان عناصری که مقایسه میشوند در یک‬ :‫مثال‬ 369 is more signification than 6 3 is immediately to the left of 6 3 is immediately to the right of 6 9 ‫‪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‬‬ ‫روابط زیر بر قرار است:‬ ‫: 0‪ e‬عنصر جلوی لیست میباشد. ”‪zeroth‬‬ ‫‪“element‬‬ ‫:1-‪ en‬عنصر آخرلیست میباشد. ”‪“last elements‬‬ ‫: 1+‪ ei‬دقیقا بعدز‪ 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 c (and 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 a 6 5 b 4 c 3 d 2 e 1 (L=(a,b,c,d,e Right to Left Mapping e d c b a Mapping That Skip Every Other position a b c d Wrap Around Mapping d e a b c Represention Used In Text a 6 5 b 4 c 3 d 2 e 1 Add/Remove An Element _1 Size=5 a b c d e Add/Remove An Element_2 (Add ( l, g size-=6 a g b c d e ‫‪[[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 .‫برای نمایش لیت ها از آرایه ها استفاده می شود‬ (L = (a,b,c,d,e ab c de ‫.هرلینک از یک جدول دلخواه استفاده می کند‬ A linked representation uses an arbitrary layout. c a e d b ‫‪Linked Representation‬‬ ‫‪c‬‬ ‫‪a‬‬ ‫‪e‬‬ ‫‪d‬‬ ‫‪b‬‬ ‫‪firstNode‬‬ ‫تهی می باشد. (‪ (e‬اشاره گر عنصر‬ ‫:‪firstNode‬‬ ‫برای اشاره به عنصر شروع استفاده میشود.‬ Normal Way To Draw A Linked List firstNode null a b c d e ‫فیلد اشاره گر‬ ‫فیلد داده‬ ‫‪Chain‬‬ ‫‪firstNode‬‬ ‫‪null‬‬ ‫‪a‬‬ ‫‪b‬‬ ‫‪c‬‬ ‫‪d‬‬ ‫‪e‬‬ ‫دریک زنجیر یا در یک لیست از اشاره گر هاهر نود‬ ‫نشان دهنده یک عنصر می باشد.‬ ‫از یک نود به نود دیگر یک اشاره گر وجود دارد.‬ ‫اشاره گر آخرین لیست تهی میباشد.‬ Node Representation package; dataStructures class ChainNode } ;Object element ;ChainNode next { next element Constructors Of ChainNode null {} ((ChainNode null ChainNode(Object element) {this.element = element;} null element ChainNode(Object element, ChainNode next) {this.element = element; this.next = next;} next element (get(0 firstNode null a b c d e ;(checkIndex(0 ;desiredNode = firstNode ;return desiredNode.element (get(1 firstNode null a b c d e ;(checkIndex(1 ;desiredNode = firstNode.next ;return desiredNode.element (get(2 firstNode null a b c d e ;(checkIndex(2 ;desiredNode = firstNode.next.next ;return desiredNode.element (get(5 firstNode null a b c d e checkIndex(5(; desiredNode = ;firstNode.next.next.next.next.next ;return desiredNode.element NullPointerException firstNode null a b c d e desiredNode = firstNode.next.next.next.next.ne ;xt.next Remove An Element firstNode null a b c d e (remove(0 firstNode = firstNode.next; (remove(2 firstNode a b beforeNode c c null d e ‫ابتدا نود قبل از نودی را که بخواهد حذف شود را‬ ‫انتخاب کنید‬ beforeNode = firstNode.next; first" node" ‫یعنی‬ (remove(2 firstNode null a b beforeNode c d e .‫اکنون اشاره گرآن را تغییر دهید‬ ‫در‬beforeNode beforeNode.next = beforeNode.next.next; (‘add(0,‘f firstNode null f a b c d e newNode ‫نود جدید را انتخاب کنید که حتما دارای فیلد داده واشاره‬ :‫گام اول‬ ‫.گرباشد‬ ChainNode newNode = new ChainNode(new Character(‘f’), firstNode); (‘add(0,‘f firstNode null f a b c d e newNode ‫.گام اول: آن را بعنوان نود آغاز انتخاب کنید‬ firstNode = newNode; (‘One-Step add(0,‘f firstNode null f a b c d e newNode firstNode = new ChainNode( ;(new Character(‘f‘(, firstNode (‘add(3,‘f firstNode newNode f null a b c beforeNode d e .‫گام اول: ابتدا نود با اندیس 2را انتخاب کنید‬ ‫گام دوم: حال نود جدید را ایجاد کرده بطوریکه دارای فیلد داده و فیلد‬ ‫.اشاره گر داشته باشد‬ ChainNode newNode = new ChainNode(new Character(‘f’), beforeNode.next); • finally link beforeNode to newNode beforeNode.next = newNode; (‘Two-Step add(3,‘f firstNode newNode f null a b c beforeNode d e beforeNode = firstNode.next.next; beforeNode.next = new ChainNode(new Character(‘f’), beforeNode.next); The Class Chain The Class Chain firstNode null a b c d e size = .‫تعدادعناصر لیست میباشد‬ ‫شمارش‬ ‫کاربرد‬ChainNode ( next(datatype ChainNode element (datatype Object) The Class Chain /* linked implementation of LinearList **/ package;dataStructures Import c++;// has Iterator public class Chainimplements 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 [email protected] **/ /* index is not between 0 and size - 1 * 0 ‫/**اندیس مربوط به هر عنصر را بر می گرداند و زمانی که‬ ‫یا 1- را برگرداند به این مفهوم است که آن عنصر در‬ /*.‫لیست وجود ندارد‬ void checkIndex(int( index } if( (index > 0 || index <= size throw new IndexOutOfBoundsException ;(index = " + index + " size = " + size"( { firstNode The Method get null a b c d e public Object get(int( index } ;(checkIndex(index ‫// نود دلخواه راتغییر دهید‬ ;ChainNode currentNode = firstNode for (int(++ i = 0; i > index; i ;currentNode = currentNode.next return; currentNode.element { 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 firstNode null a b c d e (remove(0 ;firstNode = firstNode.next Remove An Element public Object remove(int( index } ;(checkIndex(index ;Object removedElement ‫// نود شروع را حذف کنید‬if ( (index == 0 } ;removedElement = firstNode.element ;firstNode = firstNode.next { (remove(2 firstNode null a b beforeNode c d e ‫را یافته و اشاره گر آن را تغییر‬ beforeNode‫دهید‬ beforeNode.next = beforeNode.next.next; 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 firstNode null f a b c d e 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 firstNode newNode f null a b c beforeNode d e beforeNode = firstNode.next.next; beforeNode.next = new ChainNode(‘f’, beforeNode.next); 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 headerNode null a b c d e Empty Chain With Header Node headerNode null Circular List firstNode a b c d e Doubly Linked List firstNode lastNode null null a b c d e Doubly Linked Circular List firstNode a b c d e Doubly Linked Circular List With Header Node headerNode a b c d e Empty Doubly Linked Circular List With Header Node headerNode Arrays ++1D Array Representation In C, and C Memory a b c d start [x = [a, b, c, d ‫یک نمونه آرایه یک بعدی‬ ‫د ر خانه های مجاور یکدیگر قرار میگیرند‬ • location(x[i]) = start + i Space Overhead Memory a b c d start space overhead = 4 bytes forstart x.lengthbytes for 4 + bytes 8 = ( ‫(میزان فضایی که برای آرایه فوق نیاز داریم‬ 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[1[[0[ a[2[[0[ a[0[[1[ a[1[[1[ a[2[[1[ a[0[[2[ a[1[[2[ a[2[[2[ a[0[[3[row 0 a[1[[3[row 1 a[2[[3[row 2 Columns Of A 2D Array [a[0[[0[ [a[1[[0[ [a[2[[0[ a[0[[1[ a[1[[1[ a[2[[1[ a[0[[2[ a[1[[2[ a[2[[2[ a[0[[3 a[1[[3 a[2[[3 column 0 column 1 column 2 column 3 ++2D Array Representation In C and C ‫ آرایه دو بعدی‬x a, b, c, d e, f, g, h i, j, k, l .‫سطر های آرایه دو بعدی ,آرایه های یک بعدی هستند‬ ‫نمایش آرایه های دوبعد با استفاده از آرایه یک بعدی‬ [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 as4 1D arrays ++2D Array Representation In Java, C, and C x a e i b f j c g k d h l x.length = 3 x[0[.length = x[1[.length = x[2[.length = 4 Space Overhead x a e i b f j c g k d h l space overhead = overhead for 4 1D arrays bytes 8 * 4 = bytes 32 = number of rows + 1( x 8 bytes( = ‫‪++Array Representation In C and C‬‬ ‫][‪x‬‬ ‫‪a‬‬ ‫‪e‬‬ ‫‪i‬‬ ‫‪b‬‬ ‫‪f‬‬ ‫‪j‬‬ ‫‪c‬‬ ‫‪g‬‬ ‫‪k‬‬ ‫‪d‬‬ ‫‪h‬‬ ‫‪l‬‬ ‫این نمایش آرایه آرایه ها نامیده می شود.‬ ‫با توجه به شکل فوق نیازبه حافظه ای با سایز های 3و4و4و4 برای‬ ‫ذخیره آرایه های یک بعدی دارد.‬ ‫یک بلوک حافظه شامل سایزتعداد ستونها و سطرها میباشد‬ ‫‪Row-Major Mapping‬‬ ‫‪:Example 3 x 4 array‬‬ ‫‪‬‬ ‫‪abcd‬‬ ‫‪efgh‬‬ ‫‪i jkl‬‬ ‫آرایه فوق در یک آرایه یک بعدی قرار گرفته است بطوریکه هر عنصر‬ ‫آن یک سطر از آرایه فوق است و بعبارتی هر سطر آن یک‬ ‫آرایه یک بعدی می باشد.‬ ‫عناصرداخل هر سطر از چپ به راست مرتب شده اند .‬ ‫سطرها از بال به پایین مرتب شده اند .‬ ‫‪We gety[[ = {{a, b, c, d, e, f, g, h, i, j, k, l‬‬ ‫0 ‪row‬‬ ‫1 ‪row‬‬ ‫2 ‪row‬‬ ‫…‬ ‫‪row i‬‬ ‫‪Column-Major Mapping‬‬ ‫‪abcd‬‬ ‫‪efgh‬‬ ‫‪i jkl‬‬ ‫آرایه فوق در یک آرایه یک بعدی قرار گرفته است بطوریکه هر‬ ‫عنصر آن یک ستون از آرایه فوق است و بعبارتی هر ستون آن‬ ‫یک آرایه یک بعدی می باشد. عناصرداخل هر ستون از بال به‬ ‫پایین مرتب شده اند .‬ ‫ستون هااز چپ به راست مرتب شده اند .‬ ‫‪We gety = {{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 40300 07500 00000 00620 list = row 112244 column 3 5 3 4 2 3 value 3 4 5 7 2 6 Array Linear List Representation row list = value 112244 column 3 5 3 4 2 3 345726 element row column value 0 1 3 3 1 1 5 4 2 2 3 5 3 2 4 7 4 4 2 2 5 4 3 6 Chain Representation ‫ساختار نود‬ row value col next Single Chain row 11224 4 list = column 3 5 3 4 2 3 value 3 4 5 7 2 6 13 3 15 4 23 5 24 7 42 2 43 6 null firstNode One Linear List Per Row 0300 4 7500 0 0000 row1 = [(3, 3), (5,4)] row2 = [(3,5), (4,7)] row3 = row4 = [(2,2), (3,6)] Array Of Row Chains ‫ساختار نود‬ next col value Array Of Row Chains null 3 3 5 null 3 5 4 7 4 0300 4 7500 0 0000 0 0620 null null 2 row 2 3 6 Orthogonal List Representation .Node structure row down col next value Row Lists 133 0300 4 7500 0 0000 0 0620 154 n 247 n 235 null 422 436 n Column Lists 133 40300 235 247 154 n 07500 00000 00620 422 n 436 n Orthogonal Lists 133 0300 4 7500 0 0000 0 0620 154 nn 247 n 235 null 422 n row 436 nn Variations May use circular lists instead of chains. ‫‪Stacks‬‬ ‫پشته نوعی لیست خطی میباشد.‬ ‫اولین عنصری که داخل پشته قرار میگیرد ‪bottom‬‬ ‫نامیده می شود‬ ‫آخرین عنصری که داخل پشته قرار بگیرد ‪ top‬نامیده‬ ‫می شود‬ ‫عملیات حذف و درج فقط از ‪ top‬امکان پذیر می‬ ‫باشد‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ Stack Of Cups top top E D C B F E D C B bottom A bottom A .‫عمل کرد‬top ‫ باید از‬F ‫برای درج وحذف‬ • Stack=LIFO=LAST IN FIRST OUT 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 uis matched with the right .parenthesis at v (34,38( (0,32( (27,31( (21,25( (15,19( (1,13( (2,6( (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 ‫‪Parentheses Matching‬‬ ‫عبارت را از چپ به راست بخوانید.‬ ‫وقتی به ‪ Left parenthesis‬رسید آن رادر پشته‬ ‫‪ push‬کنید.‬ ‫وقتی به ‪ right parenthesis‬رسید آن رااز پشته‬ ‫‪ pop‬کنید.‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ Example a+b(*c+d-e(/(f+g(-(h+j(*(k-l(((/(m-n((( 2 1 0 Example a+b(*c+d-e(/(f+g(-(h+j(*(k-l(((/(m-n((( 15 1 0 (2,6) (1,13) Example a+b(*c+d-e(/(f+g(-(h+j(*(k-l(((/(m-n((( 21 1 0 (2,6) (1,13) (15,19) Example a+b(*c+d-e(/(f+g(-(h+j(*(k-l(((/(m-n((( 27 1 0 (2,6) (1,13) (15,19) (21,25) Example a+b(*c+d-e(/(f+g(-(h+j(*(k-l(((/(m-n((( 1 0 (2,6) (1,13) (15,19) (21,25) (27,31) (0,32) • and so on ‫‪Towers Of Hanoi/Brahma‬‬ ‫4‬ ‫3‬ ‫2‬ ‫1‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫46 حلقه طل از ستون ‪ A‬به‪ C‬انتقال داده می شوند.‬ ‫هر ستون در آن مانند یک پشته عمل می کند.‬ ‫و هیچ حلقه بزرگی روی کوچکتر از خودش قرار نمی گیرد.‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ Towers Of Hanoi/Brahma 3 2 1 A B C disk Towers Of Hanoi/Brahma-3 Towers Of Hanoi/Brahma 2 1 3 A B C disk Towers Of Hanoi/Brahma-3 Towers Of Hanoi/Brahma 1 2 3 A B C disk Towers Of Hanoi/Brahma-3 Towers Of Hanoi/Brahma 1 3 2 A B C disk Towers Of Hanoi/Brahma-3 Towers Of Hanoi/Brahma 3 2 1 A B C disk Towers Of Hanoi/Brahma-3 Towers Of Hanoi/Brahma 3 2 1 A B C disk Towers Of Hanoi/Brahma-3 Towers Of Hanoi/Brahma 3 2 1 A B C disk Towers Of Hanoi/Brahma-3 Towers Of Hanoi/Brahma 3 2 1 A B C disk Towers Of Hanoi/Brahma-3 • 7 disk moves ‫‪Recursive Solution‬‬ ‫1‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪‬‬ ‫‪‬‬ ‫با استفاده از مساله برج هانوی 0 < ‪ n‬حلقه را میتوان از ‪ A‬به ‪ Cبا استفاده از ‪B‬‬ ‫منتقل کرد.‬ ‫با استفاده از ‪ C‬تعداد 1-‪ n‬حلقه را از ‪ A‬به ‪ B‬انتقال داده.‬ ‫‪Recursive Solution‬‬ ‫1‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪‬‬ ‫حلقه اول ستون ‪A‬را از ‪A‬به ‪ C‬انتقال دهید.‬ Recursive Solution 1 A B C .‫ انتقال دهید‬C ‫ به‬B ‫حلقه را از‬n-1 Recursive Solution 1 A B C moves(n( = 0 whenn = 0 moves(n( = 2*moves(n-1( + 1 = 2n -1 whenn < 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 a 0 b 1 c 2 d e 56 34 ‫عنصر بالی پشته معادل چپ ترین ویا راست‬ .‫ترین عنصر داخل آرایه می باشد‬ empty((=<(( isEmpty O(1( time peek(( =<get(0( or (get(size(( - 1 O(1(time Derive From ArrayLinearList a 0 b 1 c 2 d e 56 34 ‫ در موقعیت چپ ترین عنصر آرایه‬top ‫وقتی که‬ ‫قراردارد‬ push(theObject(=<( add(0, theObject O(size(time pop((=<( remove(0 O(size(time Derive From ArrayLinearList a 0 b 1 c 2 d e 56 34 ‫ در موقعیت راست ترین عنصر آرایه‬top ‫وقتی که‬ push(theObject(=< add(size((, ‫قراردارد‬ (theObject O(1(time pop((=<( remove(size((-1 O(1(time use right end of list as top of stack Derive From Chain firstNode null a b c d e ‫عنصر بالی پشته معادل چپ ترین ویا راست‬ .‫ترین عنصر داخل آرایه می باشد‬ empty((=<(( isEmpty O(1( time Derive From Chain firstNode null a b c d e ‫ در موقعیت چپ ترین عنصر آرایه‬top ‫–وقتی که‬ ‫قراردارد‬ peek() => get(0) O(1) time push(theObject) => add(0, theObject) O(1) time pop() => remove(0) Derive From Chain firstNode null a b c d e ‫ در موقعیت راست ترین عنصر آرایه‬top ‫–وقتی که‬ ‫قراردارد‬ • peek() => get(size() - 1) • O(size) time • push(theObject) => add(size(), theObject) • O(size) time • pop() => remove(size()-1) • O(size) time ((empty(( And peek a 0 b 1 c 2 d e 56 34 public boolean(( empty return{;(( isEmpty} public(( Object peek } if((( (empty throw new;(( EmptyStackException return( get(size(( - 1 { ((push(theObject( And pop a 0 bc 1 2 de 34 56 public void( push(Object theElement {;(add(size((, theElement} public((Object pop } if((( (empty throw new;(( EmptyStackException return;( remove(size(( - 1 { ((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 a 0 b 1 c 2 d e 34 top 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 ((pop a 0 b 1 c 2 d e 34 top public(( Object pop } if((( (empty ;((throw new EmptyStackException ;[Object topElement = stack[top stack[top--[ = null;// enable garbage collection return; topElement { Linked Stack From Scratch .See text Performance 500,000pop ,push, and peekoperations 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 ‫‪Queues‬‬ ‫یک لیست خطی می باشد.‬ ‫عنصر جلوی صف ‪ front‬نامیده میشود.‬ ‫عنصر انتهای لیست ‪ rear‬نامیده میشود.‬ ‫افزودن عنصر به لیست فقط ازانتهای صف"‬ ‫‪ " rear‬امکان پذیر است.‬ ‫حذف کردن عناصراز لیست از جلوی‬ ‫صف"‪ "front‬امکان پذیر است.‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ Bus Stop Queue Bus Stop front rear rear rear rear rear Bus Stop Queue Bus Stop front rear rear rear Bus Stop Queue Bus Stop front rear rear Bus Stop Queue Bus Stop front rear 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 a 0 b 1 c 2 d e 56 34 ‫ در راست لیست‬rear ‫ چپ لیست و‬front‫زمانی که‬ .‫باشد‬ ((Queue.isEmpty(( =< super.isEmpty O(1( time (getFrontElement(( =< get(0 O(1(time (getRearElement(( =< get(size(( - 1 O(1(time put(theObject(=<( add(size((, theObject O(1(time remove((=<( remove(0 Derive From ArrayLinearList e 0 d 1 c 2 b a 56 34 ‫ درچپ لیست‬rear ‫ راست لیست و‬front‫زمانی که‬ .‫باشد‬ ((Queue.isEmpty(( =< super.isEmpty O(1( time (getFrontElement(( =< get(size(( - 1 O(1(time (getRearElement(( =< get(0 O(1(time put(theObject(=<( add(0, theObject O(size(time remove((=<( remove(size(( - 1 ‫‪Derive From ArrayLinearList‬‬ ‫عملیات درج وحذف در صف با (1(‪ O‬صورت می گیرد.‬ ‫‪‬‬ Derive From ExtendedChain firstNode lastNode null a b c d e front rear ‫راست لیست قرار‬rear ‫ چپ لیست و‬front ‫ وقتی که‬ ‫دارد‬ • Queue.isEmpty() => super.isEmpty() – O(1) time • getFrontElement() => get(0) Derive From ExtendedChain firstNode lastNode null a b c d e 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 firstNode lastNode null e d c b a rear front ‫چپ لیست‬rear ‫ راست لیست و‬front ‫ وقتی که‬ ‫قرار دارد‬ Queue.isEmpty()=>() super.isEmpty – O(1) time • getFrontElement() => getLast() Derive From ExtendedChain firstNode lastNode null a b c d e rear • getRearElement() => get(0) – O(1) time • put(theObject) => add(0, theObject) – O(1) time • remove() => remove(size-1) – O(size) time front ‫‪Custom Array Queue‬‬ ‫کاربرد یک آرایه یک بعدی بعنوان صف‬ ‫][‪queue‬‬ ‫‪‬‬ ‫• کاربرد یک آرایه یک بعدی بعنوان صف حلقوی‬ ‫]2[‬ ‫]3[‬ ‫]1[‬ ‫]0[‬ ‫]5[‬ ‫]4[‬ ‫‪Custom Array Queue‬‬ ‫• صف حلقوی با 3 عنصر پر شده است.‬ ‫]2[‬ ‫‪A‬‬ ‫]1[‬ ‫]0[‬ ‫‪B‬‬ ‫‪C‬‬ ‫]5[‬ ‫]4[‬ ‫]3[‬ ‫‪Custom Array Queue‬‬ ‫• حالت دیگری از قرار گیری 3 عنصر در لیست‬ ‫حلقوی‬ ‫]2[‬ ‫‪[1] C‬‬ ‫]0[‬ ‫‪B‬‬ ‫‪A‬‬ ‫]5[‬ ‫]3[‬ ‫]4[‬ ‫‪Custom Array Queue‬‬ ‫• کاربرد ‪ front andrear‬در لیست حلقوی‬ ‫– ‪ front‬مکانی است که ب ابتدای لیست‬ ‫اشاره می کند.‬ ‫– ‪ Rear‬مکانی است که به انتهای لیست‬ ‫]3[ اشاره ]2[ کند.‬ ‫می‬ ‫]3[‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫]0[‬ ‫]5[‬ ‫]4[‬ ‫‪rear‬‬ ‫‪rear‬‬ ‫‪[1] C‬‬ ‫]0[‬ ‫‪B‬‬ ‫‪A‬‬ ‫]5[‬ ‫‪front‬‬ ‫]4[‬ ‫]2[‬ ‫‪front‬‬ ‫]1[‬ Add An Element .‫ درجهت عقربه های ساعت حرکت می کند‬rear • [2] front [1] [0] A B [3] rear C [5] [4] ‫‪Add An Element‬‬ ‫• ‪ rear‬درجهت عقربه های ساعت حرکت دهید.‬ ‫• در مکانی که ‪ rear‬به آن اشاره می کند‬ ‫‪ [queue[rear‬را اضافه کنید.‬ ‫]2[‬ ‫‪front‬‬ ‫]1[‬ ‫]0[‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫]5[‬ ‫]4[‬ ‫]3[‬ ‫‪rear‬‬ Remove An Element .‫ را یک واحد جابه جا کنید‬Front • [2] front [1] [0] A B [3] rear C [5] [4] ‫‪Remove An Element‬‬ ‫• ‪ Front‬را یک واحددر جهت عقربه های ساعت‬ ‫جابه جا کنید.‬ ‫• و محتوای ‪ [queue[front‬را از صف حذف کنید.‬ ‫‪front‬‬ ‫]1[‬ ‫]0[‬ ‫]2[‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫]5[‬ ‫]4[‬ ‫]3[‬ ‫‪rear‬‬ Moving rear Clockwise • rear++; if (rear = = queue.length) rear = 0; [2] front [1] [0] A B C [5] [3] rear [4] • rear = (rear + 1) % queue.length; Empty That Queue [2] rear [1] C [0] B A [5] [3] front [4] Empty That Queue [2] rear [1] C [0] B [5] front [4] [3] Empty That Queue [2] rear [1] C [0] front [5] [4] [3] ‫‪Empty That Queue‬‬ ‫]2[‬ ‫‪rear‬‬ ‫]1[‬ ‫‪front‬‬ ‫]0[‬ ‫]5[‬ ‫‪‬‬ ‫‪‬‬ ‫]3[‬ ‫]4[‬ ‫زمانی تمام عناصر داخل صف حذف شود آنگاه:‬ ‫‪front = rear‬‬ ‫اگر صف خالی باشد 0 = ‪front = rear‬‬ A Full Tank Please [2] rear [1] C [0] B A [5] [3] front [4] A Full Tank Please rear [2] D front [4] B A [5] [3] [1] C [0] A Full Tank Please [2] D [1] C [0] B A [5] E front [4] [3] rear ‫‪A Full Tank Please‬‬ ‫]2[‬ ‫‪D‬‬ ‫‪[1] C‬‬ ‫]0[‬ ‫‪B‬‬ ‫‪A‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫]5[‬ ‫‪front‬‬ ‫]4[‬ ‫‪rear‬‬ ‫]3[‬ ‫• اگر به پر کردن صف ادامه دهیم در نهایت‬ ‫می رسیم به شرط: ‪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‬‬ ‫کاربردهای لیست های خطی :برای داده های‬ ‫ترتیبی است‬ ‫(‪(0, e1, e2, …, en-1e‬‬ ‫روزهای هفته‬ ‫ماه های سال‬ ‫دانشجویان یک کلس‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫کاربرد درخت:برای داده هایی با سلسله مراتب‬ ‫یکسان‬ ‫مانند کارمندان یک شرکت‬ ‫‪‬‬ ‫‪‬‬ ‫‪Hierarchical Data And Trees‬‬ ‫عنصری که در بالترین مرتبه قرار دارد ‪root‬یا‬ ‫ریشه نامیده میشود.‬ ‫‪Children‬عناصری که در مراتب بعد از ریشه‬ ‫قرار می گیرند نامیده می شود.‬ ‫‪ leaves‬عناصری هستند که فاقد‪children‬‬ ‫هستند.‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ (Classes (Part Of Figure 1.1 Object root children of root Number Throwable OutputStream Integer Double Exception FileOutputStream grand children of root RuntimeException great grand child of root ‫‪Definition‬‬ ‫یک درخت از یک مجموعه عناصر متناهی‬ ‫تشکیل شده است.‬ ‫اولین عنصر ریشه نامیده می شود.‬ ‫مابقی عناصرزیر درخت نامیده " ‪subtrees‬‬ ‫‪" oft‬می شود.‬ ‫‪‬‬ ‪‬‬ ‫‪‬‬ Subtrees Object root OutputStream Number Throwable Integer Double Exception FileOutputStream RuntimeException Leaves Object Number Throwable OutputStream Integer Double Exception FileOutputStream RuntimeException Parent, Grandparent, Siblings, Ancestors, Descendants Object Number Throwable OutputStream Integer Double Exception FileOutputStream RuntimeException Levels Object Level 1 Level 2 Number Throwable OutputStream Integer Double Exception FileOutputStream Level 3 RuntimeException Level 4 ‫‪Caution‬‬ ‫به هرسطح یا ‪ Level‬در درخت یک شماره‬ ‫میدهیم:‬ ‫ریشه در 0‪ level‬قرار دارد.‬ ‫زیر درخت های ریشه از سطح 1شروع می‬ ‫شوند.‬ ‫البته‪ level‬ریشه می تواند از سطح یک نیز باشد‬ ‫بنابراین ‪ level‬مربوط به زیر درخت های ریشه ا‬ ‫سطح 2 شروع میشود.‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ height = depth = number of levels Object Level 1 Level 2 Number Throwable OutputStream Integer Double Exception FileOutputStream Level 3 RuntimeException Level 4 Node Degree = Number Of Children Object 3 1 OutputStream 0 FileOutputStream 2 0 Number 1 0 Throwable 1 Exception Integer Double RuntimeException 0 Tree Degree = Max Node Degree Object 3 1 OutputStream 0 FileOutputStream 2 0 Number 1 0 Throwable 1 Exception Integer Double RuntimeException 0 Degree of tree = 3. ‫‪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+b‬‬ ‫‪c/d‬‬ ‫‪e-f‬‬ ‫+‪g‬‬ ‫‪h‬‬‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫عملگر های یکانی:نیازمند یک عملوند هستند.‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪Infix Form‬‬ ‫روش معمولی برای نوشتن یک عبارت.‬ ‫عملگر های دودوئی میان دو عملوند قرار می‬ ‫گیرند.‬ ‫‪a*b‬‬ ‫‪a+b*c‬‬ ‫‪a*b/c‬‬ ‫(52.3 + ‪a + b( * (c + d( + e – f/g*h‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪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 Infix = a + b * c Postfix Examples ac = Postfixb * + • 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 /+ab+cd-*ef • a ba/ c db + e fd+- /* e f ++ -* c • ab+cd-*ef+/ b a stack Postfix Evaluation a + b( * (c – d( / (e +( (f /+ab+cd-*ef • a ba/ c db + e fd+- /* e f ++ -* c • ab+cd-*ef+/ • ab+cd-*ef+/ • ab+cd-*ef+/ • ab+cd-*ef+/ d c (a + b) stack Postfix Evaluation a + b( * (c – d( / (e +( (f • a ba b + - * e-/ + /* e f +cdcd f+ (c – d) (a + b) stack Postfix Evaluation a + b( * (c – d( / (e +( (f a ba b + - * e-/ + /* e f +cdcd f+ ab+cd-*ef+/ ab+cd-*ef+/ ab+cd-*ef+/ • • • • f e (a + b)*(c – d) stack Postfix Evaluation a + b( * (c – d( / (e +( (f a ba b + - * e-/ + /* e f +cdcd f+ ab+cd-*ef+/ ab+cd-*ef+/ ab+cd-*ef+/ ab+cd-*ef+/ • • • • • (e + f) (a + b)*(c – d) stack ‫‪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 ‫کار با الگوریتم درخت باینری بهینه تر از عبارت‬ ‫محاسباتی است.‬ ‫‪Binary Tree‬‬ ‫/‬ ‫*‬ ‫+‬ ‫‪a‬‬ ‫‪b‬‬ ‫‪c‬‬ ‫‬‫‪d‬‬ ‫‪e‬‬ ‫+‬ ‫‪f‬‬ ‫‪Merits Of Binary Tree Form‬‬ ‫‪‬‬ ‫‪‬‬ Binary Tree Properties & Representation ‫حداقل تعداد گره های یک درخت باینری به‬ ‫اندازه ارتفاع آن میباشد.‬ ‫آخرین گره در درخت باینری معرف ارتفاع‬ ‫می باشد.‬ ‫‪Minimum Number Of Nodes‬‬ ‫‪‬‬ ‫‪‬‬ ‫حداقل تعداد گره ها‬ ‫در درخت دودویی‪h‬‬ ‫میباشد.‬ ‫‪Maximum Number Of Nodes‬‬ ‫برای درخت کامل:درختی که تمام گره های سطح آخرش وجود داشته باشد.‬ ‫برای محاسبه حداکثر تعداد گره هااز روش زیر:‬ ‫‪‬‬ ‫‪Maximum number of nodes‬‬ ‫1-‪= 1 + 2 + 4 + 8 + … + 2h‬‬ ‫1 - ‪= 2h‬‬ ‫‪Number Of Nodes & Height‬‬ ‫اگر ‪ n‬تعداد گره های یک درخت باینری‬ ‫باشد محدوده آن :‬ ‫1 – ‪h >= n >=2h‬‬ ‫‪log2(n+1( >= h >= n‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪Full Binary Tree‬‬ ‫‪ ‬تعدادگره ها در یک درخت دودویی به ارتفاع ‪:h‬‬ ‫1 – ‪ 2h‬میباشد.‬ ‫ارتفاع در درخت کامل بال 4 میباشد.‬ ‫‪Numbering Nodes In A Full Binary‬‬ ‫‪Tree‬‬ ‫تعداد نودهادر درخت باینری از 1 تا 1 – ‪ 2h‬متغیر‬ ‫است.‬ ‫شمارش سطوح از بال به پایین می باشد.‬ ‫در هر سطح شمارش گره ها از چپ به راست می‬ ‫1‬ ‫باشد.‬ ‫2‬ ‫4‬ ‫8‬ ‫9‬ ‫01‬ ‫5‬ ‫11‬ ‫21‬ ‫6‬ ‫31‬ ‫41‬ ‫3‬ ‫7‬ ‫51‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪Node Number Properties‬‬ ‫1‬ ‫2‬ ‫4‬ ‫8‬ ‫9‬ ‫01‬ ‫5‬ ‫11‬ ‫21‬ ‫6‬ ‫31‬ ‫41‬ ‫3‬ ‫7‬ ‫51‬ ‫‪‬‬ ‫والد هر گره مثل ‪ i‬درگره 2 / ‪ i‬آن میباشد ,البته‬ ‫به استثنای 1 = ‪ .i‬زیرا:‬ ‫1 = ‪ i‬ریشه میباشد وریشه والد ندارد .‬ ‫‪‬‬ ‫‪Node Number Properties‬‬ ‫1‬ ‫2‬ ‫4‬ ‫8‬ ‫9‬ ‫01‬ ‫5‬ ‫11‬ ‫21‬ ‫6‬ ‫31‬ ‫41‬ ‫3‬ ‫7‬ ‫51‬ ‫‪ ‬گره چپ ‪ i‬در ‪ 2i‬میباشد.‬ ‫‪ n ‬تعدادگره های یک درخت باشد . اگر ‪2i < n‬‬ ‫باشد آنگاه ‪i‬‬ ‫دارای فرزند چپ نمی باشد.‬ ‫‪Node Number Properties‬‬ ‫1‬ ‫2‬ ‫4‬ ‫8‬ ‫9‬ ‫01‬ ‫5‬ ‫11‬ ‫21‬ ‫6‬ ‫31‬ ‫41‬ ‫3‬ ‫7‬ ‫51‬ ‫‪ ‬گره راست ‪ i‬در 1+‪ 2i‬میباشد.‬ ‫‪ n ‬تعدادگره های یک درخت باشد . اگر ‪ 2i+1 < n‬باشد‬ ‫آنگاه ‪i‬‬ ‫دارای فرزند راست نمی باشد.‬ ‫‪Complete Binary Tree With n Nodes‬‬ ‫در یک درخت باینری تعداد گره ها میان1‬ ‫تا ‪ n‬می باشد.‬ ‫اگر درخت شامل هر ‪ n‬تا باشد آنگاه به آن‬ ‫درخت ,درخت کامل گویند و سطر آخر‬ ‫کامل پر نشده باشد و گره ها ازچپ به‬ ‫راست قرار گرفته باشد.‬ ‫‪‬‬ ‫‪‬‬ ‫‪Example‬‬ ‫2‬ ‫4‬ ‫8‬ ‫9‬ ‫01‬ ‫5‬ ‫11‬ ‫1‬ ‫3‬ ‫6‬ ‫21‬ ‫31‬ ‫41‬ ‫7‬ ‫51‬ ‫مثال:درخت کامل را با 01 گره در نظر‬ ‫بگیرید.‬ ‫‪‬‬ ‫‪Binary Tree Representation‬‬ ‫برای نمایش درخت دودویی می توان از‬ ‫آرایه استفاده کرد.‬ ‫نمایش با استفاده از لیست های پیوندی‬ ‫‪‬‬ ‫‪‬‬ ‫‪Array Representation‬‬ ‫ابتداگره های یک درخت را به صورت سطحی‪Level‬‬ ‫‪ Order‬از چپ به راست شماره گذاری کرده سپس‬ ‫درخت را سطحی پیمایش کرده به این صورت که گره‬ ‫د‬ ‫‪ i‬در ‪ [tree[i‬قرار می گیر 1.‪a‬‬ ‫2‬ ‫4‬ ‫8‬ ‫‪h‬‬ ‫‪b‬‬ ‫‪e‬‬ ‫‪i‬‬ ‫9‬ ‫01‬ ‫‪j‬‬ ‫5‬ ‫6‬ ‫‪f‬‬ ‫‪c‬‬ ‫3‬ ‫7‬ ‫‪g‬‬ ‫‪‬‬ ‫‪d‬‬ ‫][‪tree‬‬ ‫‪a bcdefghi j‬‬ ‫0‬ ‫5‬ ‫01‬ ‫‪Right-Skewed 1Binary Tree‬‬ ‫‪a‬‬ ‫3‪b‬‬ ‫‪c‬‬ ‫7‬ ‫‪d‬‬ ‫51‬ ‫][‪tree‬‬ ‫‪a‬‬‫0‬ ‫‪b---c-- - ----d‬‬ ‫5‬ ‫01‬ ‫51‬ ‫برای نمایش یک درخت دودویی با استفاه‬ ‫ازیک آرایه با سایز1+‪ n‬تا ‪2n‬نیاز داریم.‬ ‫‪‬‬ ‫‪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 root a b c e g leftChild element rightChild h d f 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 abc Preorder Example (visit = (print a b d g h e i f j c abdghei cf j Preorder Of Expression Tree / * + a b c e d + f / * +a b - c d +e f ‫ در عبارت‬prefix ‫معادل‬ 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 bac (Inorder Example (visit = print a b d g h e i f j c gdhbei af j c (Inorder By Projection (Squishing a b d g h e i f j c gdh b e ia f jc Inorder Of Expression Tree / * + a b c e d e+ f + f a+b * c - d/ 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 bca Postorder Example (visit = (print a b d g h e i f j c ghdi ebj f ca Postorder Of Expression Tree / * + a b c e d + f a b +c d - * e f + / ‫ در عبارت‬postfix ‫معادل‬ Traversal Applications a b d g h e i f j c Level Order Lett. be the tree root (while (t != null } visitt and put its children on a FIFO ;queue remove a node from the FIFO queue ; and call itt { (Level-Order Example (visit = print a b d g h e i f j c abcdef ghi j Some Examples preorde r= ab inorder = ab postorder = ab level order = ab a b b a b a a b a b b a a b a b Preorder And Postorder preorder= ab postorder = ba a b a b 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 a gdhbei fjc preorder =a b d g h e i c f j ‫ زیر درخت‬gdh /‫ ریشه بعدی است‬b ‫ زیر درخت راست‬ei / ‫چپ‬ a b gdh ei fjc Inorder And Preorder a b gdh ei fjc preorder =a b d g h e i c f j ‫ زیر درخت‬g/.‫ ریشه بعدی می باشد‬d .‫زیر درخت راست می باشد‬h‫چپ/و‬ a b d g h ei fjc 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 isa ‫ // زیر درخت چپ‬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 j ; Tree root isa ‫ // زیر درخت چپ‬gdhbei ‫ // زیردرخت راست‬fjc ‫‪Priority Queues‬‬ ‫دونوع صف اولویت دار تعریف می کنیم:‬ ‫صف با الویت بال‬ ‫صف با الویت پایین‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪Min Priority Queue‬‬ ‫یک مجموعه از عناصر میباشد.‬ ‫برای هر عنصر یک کلید اولویت تعریف می‬ ‫کنیم.‬ ‫اعمال زیر را می توان روی آن انجام داد.‬ ‫چک کردن اینکه صف خالی است یا نه؟‬ ‫سایز و اندازه صف‬ ‫اضافه کردن یک عنصر به لیست‬ ‫پیدا کردن عنصر با کمترین اولویت‬ ‫حذف عنصری با کمترین اولویت‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪Max Priority Queue‬‬ ‫یک مجموعه از عناصر میباشد.‬ ‫برای هر عنصر یک کلید اولویت تعریف می‬ ‫کنیم.‬ ‫اعمال زیر را می توان روی آن انجام داد.‬ ‫چک کردن اینکه صف خالی است یا نه؟‬ ‫سایز و اندازه صف‬ ‫اضافه کردن یک عنصر به لیست‬ ‫پیدا کردن عنصر با بیشترین اولویت‬ ‫حذف عنصری با بیشترین اولویت‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ Complexity Of Operations heaps ‫دو نمونه خوب می توان از‬ .‫ نام برد‬leftist trees ‫ و‬leftist isEmpty, size, and get=< O(1( time put and remove =< O(log n( time ‫ طول لیست می باشد‬n ‫که در آن‬ ‫‪Applications‬‬ ‫‪Sorting‬‬ ‫کلید هر عنصر به عنوان اولویت آن محسوب‬ ‫می شود.‬ ‫عناصر را مرتب شده در لیست اولویت قرار‬ ‫دهید‬ ‫گزینش عنصر با توجه به کلید اولویت آن:‬ ‫اگر عنصری با کمترین اولویت را خواستیم انتخاب‬ ‫کنیم باید صف به صورت صعودی مرتب شده باشد.‬ ‫اگر عنصری با بیشترین اولویت را خواستیم انتخاب‬ ‫کنیم باید صف به صورت نزولی مرتب شده باشد.‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪Sorting Example‬‬ ‫مرتب کنیدپنج عنصری که کلید های آن به این‬ ‫قرار باشد:‬ ‫6, 8, 2, 4, 1‬ ‫‪ ‬از صف با الویت بال استفاده کنید.‬ ‫ابتدا عناصر را در یک صف ب الویت بال قرار دهید‬ ‫پنج مرتبه عمل حذف را انجام دهید در نهایت‬ ‫عناصر از راست به چپ مرتب می شوند.‬ ‫‪‬‬ ‫‪‬‬ After Putting Into Max Priority Queue 8 1 4 2 6 ‫صف با‬ ‫الویت بال‬ Sorted Array After First Remove Max Operation 4 1 2 6 ‫صف با‬ ‫الویت بال‬ 8 Sorted Array After Second Remove Max Operation 4 1 2 ‫صف با‬ ‫الویت بال‬ 6 8 Sorted Array After Third Remove Max Operation 1 2 ‫صف با‬ ‫الویت بال‬ 6 8 4 Sorted Array After Fourth Remove Max Operation 1 ‫صف با الویت بال‬ 2 4 6 8 Sorted Array After Fifth Remove Max Operation ‫صف با الویت بال‬ 1 2 4 6 8 Sorted Array 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 withO(n2 ‫‪Heap Sort‬‬ ‫کاربرد صف با الویت بال در ‪ heap‬دیده می‬ ‫شود.‬ ‫این مرتب سازی با ‪ (O(n‬قابل انجام است.‬ ‫‪Min Tree Definition‬‬ ‫هر درختی دارای ‪ value‬یا یک مقدار می باشد‬ ‫‪:Min tree‬درختی است که در آن ‪value‬ریشه از‬ ‫‪value‬‬ ‫تمام زیر درختها با فرزندانش کمتر باشد.‬ ‫‪Min Tree Example‬‬ ‫2‬ ‫4‬ ‫4‬ ‫8‬ ‫9‬ ‫9‬ ‫3‬ ‫7‬ ‫9‬ ‫ریشه کمترین مقدار را دارد‬ ‫‪Max Tree Example‬‬ ‫9‬ ‫4‬ ‫4‬ ‫2‬ ‫3‬ ‫9‬ ‫8‬ ‫7‬ ‫1‬ ‫ریشه بیشترین مقدار را دارد‬ Min Heap Definition ‫درخت باینری کامل‬ min tree Min Heap With 9 Nodes ‫درخت کامل با 9 گره‬ Min Heap With 9 Nodes 2 4 6 7 9 3 3 8 6 ‫درخت کامل با 9 گره وهمچنین‬ min tree Max Heap With 9 Nodes 9 8 6 7 2 7 6 5 1 ‫درخت کامل با 9 گره وهمچنین‬ max tree ‫‪Heap Height‬‬ ‫‪ Heap‬درختی کامل می باشد که‬ ‫ارتفاع ان 1+‪.log2( (n‬است‬ A Heap Is Efficiently Represented As An Array 9 8 6 7 2 7 6 5 1 9 0 1 8 2 7 3 6 4 7 5 2 6 6 7 5 8 1 9 10 Moving Up And Down A Heap 1 9 2 8 4 6 7 5 6 2 6 3 7 7 5 8 1 9 Putting An Element Into A Max Heap 9 8 6 7 2 7 6 5 1 7 ‫درخت کامل با 01 گره‬ Putting An Element Into A Max Heap 9 8 6 7 2 7 6 5 1 5 7 ‫5گره جدید می باشد‬ Putting An Element Into A Max Heap 9 8 6 7 2 7 6 5 1 7 ‫02 گره جدید می باشد‬ Putting An Element Into A Max Heap 9 8 6 2 7 6 5 1 7 ‫02 گره جدید می باشد‬ Putting An Element Into A Max Heap 9 7 6 8 2 6 5 1 7 ‫02 گره جدید می باشد‬ Putting An Element Into A Max Heap 20 9 6 8 2 7 6 5 1 7 ‫02 گره جدید می باشد‬ Putting An Element Into A Max Heap 20 9 6 8 2 7 6 5 1 7 ‫درخت کامل با 11 گره‬ Putting An Element Into A Max Heap 20 9 6 8 2 7 6 5 1 7 ‫51 گره جدید می باشد‬ Putting An Element Into A Max Heap 20 9 6 2 7 6 5 1 7 8 ‫51 گره جدید می باشد‬ Putting An Element Into A Max Heap 20 15 6 9 2 7 6 5 1 7 8 ‫51 گره جدید می باشد‬ ‫‪Complexity Of Put‬‬ ‫02‬ ‫51‬ ‫6‬ ‫9‬ ‫2‬ ‫7‬ ‫6‬ ‫5‬ ‫1‬ ‫7‬ ‫8‬ ‫پیچیدگی آن ‪ (O(log n‬زمانیکه‬ ‫سایز ‪ heap‬مقدار ‪ n‬باشد‬ ‫‪Removing The Max Element‬‬ ‫02‬ ‫51‬ ‫6‬ ‫9‬ ‫2‬ ‫7‬ ‫6‬ ‫5‬ ‫1‬ ‫7‬ ‫8‬ ‫بزرگترین مقدلر در ریشه قرار‬ ‫دارد.‬ ‫‪Removing The Max Element‬‬ ‫51‬ ‫6‬ ‫9‬ ‫2‬ ‫7‬ ‫6‬ ‫5‬ ‫1‬ ‫7‬ ‫8‬ ‫پس از آنکه بزرگترین مقدار‬ ‫حذف شد‬ ‫‪Removing The Max Element‬‬ ‫51‬ ‫6‬ ‫9‬ ‫2‬ ‫7‬ ‫6‬ ‫5‬ ‫1‬ ‫7‬ ‫8‬ ‫در ‪ heap‬تعداد01 عنصر قرار می‬ ‫8 گیرد.‪ heap‬اضافه کنید.‬ ‫را به‬ Removing The Max Element 15 6 9 2 7 6 5 1 7 Removing The Max Element 15 7 6 9 2 6 5 1 7 Removing The Max Element 15 9 6 8 2 7 6 5 1 7 ‫‪Removing The Max Element‬‬ ‫51‬ ‫9‬ ‫6‬ ‫8‬ ‫2‬ ‫7‬ ‫6‬ ‫5‬ ‫1‬ ‫7‬ ‫51 بزرگترین عنصر قرار می‬ ‫یرد.‬ ‫‪Removing The Max Element‬‬ ‫9‬ ‫6‬ ‫8‬ ‫2‬ ‫7‬ ‫6‬ ‫5‬ ‫1‬ ‫7‬ ‫پس از آنکه بزرگترین مقدار‬ ‫حذف شد‬ ‫‪Removing The Max Element‬‬ ‫9‬ ‫6‬ ‫8‬ ‫2‬ ‫7‬ ‫6‬ ‫5‬ ‫1‬ ‫7‬ ‫اکنون در ‪ heap‬تعداد9 عنصر‬ ‫قرار می گیرد.‬ Removing The Max Element 9 6 8 2 7 6 5 1 Removing The Max Element 9 7 6 8 2 6 5 1 Removing The Max Element 9 8 6 7 2 7 6 5 1 Complexity Of Remove Max Element 9 8 6 7 2 7 6 5 1 (O(log n = ‫پیچیدگی‬ Initializing A Max Heap 1 2 4 5 6 3 7 8 9 7 10 11 8 input array =[[-, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ‫‪Initializing A Max Heap‬‬ ‫1‬ ‫2‬ ‫4‬ ‫5‬ ‫6‬ ‫3‬ ‫7‬ ‫8‬ ‫9‬ ‫7‬ ‫01‬ ‫11‬ ‫8‬ ‫ابتدا موقعیت 2/‪ n‬را در آرایه فوق محاسبه کرده و‬ ‫سپس از آن گره در درخت شروع کنید‬ ‫‪Initializing A Max Heap‬‬ ‫1‬ ‫2‬ ‫4‬ ‫11‬ ‫6‬ ‫3‬ ‫7‬ ‫8‬ ‫9‬ ‫7‬ ‫01‬ ‫8‬ ‫5‬ ‫‪ Max heap‬بودن را در درخت چک کنید.در درخت‬ ‫‪max heap‬محتوای ریشه از کلیه عناصر آن‬ ‫بزرگتر می باشد.‬ Initializing A Max Heap 1 2 4 11 6 3 7 8 9 7 10 8 5 Initializing A Max Heap 1 2 9 11 6 3 7 8 4 7 10 8 5 Initializing A Max Heap 1 2 9 11 6 3 7 8 4 7 10 8 5 Initializing A Max Heap 1 2 9 11 6 7 3 8 4 7 10 8 5 Initializing A Max Heap 1 2 9 11 6 7 3 8 4 7 10 8 5 Initializing A Max Heap 1 11 9 6 7 3 8 4 7 10 8 5 .‫مکان 11 با 2 عوض می شود‬ Initializing A Max Heap 1 11 9 10 6 7 3 8 4 8 7 5 .‫مکان 01 با 2 عوض می شود‬ Initializing A Max Heap 1 11 9 10 6 7 3 8 4 7 2 5 8 Initializing A Max Heap 1 11 9 10 6 7 3 8 4 2 7 5 8 ‫مکان 1را بیابید؟‬ Initializing A Max Heap 11 7 9 10 6 3 8 4 2 7 5 8 1 ‫یافتن مکان‬ Initializing A Max Heap 11 10 9 6 7 3 8 4 2 7 5 8 1 ‫یافتن مکان‬ Initializing A Max Heap 11 10 9 5 6 7 3 8 4 2 7 8 1 ‫یافتن مکان‬ Initializing A Max Heap 11 10 9 5 6 7 3 8 4 2 7 1 8 .‫انجام شد‬ ‫‪Time Complexity‬‬ ‫11‬ ‫9‬ ‫8‬ ‫5‬ ‫6‬ ‫7‬ ‫3‬ ‫1‬ ‫4‬ ‫7‬ ‫01‬ ‫2‬ ‫8‬ ‫ارتفاع درخت ‪heap= h‬‬ ‫‪=level‬‬ ‫‪j‬‬ ‫تعداد زیر درخت ها با ریشه در 1-‪2j‬‬ ‫پیچیدگی زمانی برای هر زیر درخت = 1+‪(O(h-j‬‬ ‫‪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 ((ascend ‫( (اندیس گره در درخت باینری را برمی‬get(index (.‫گرداند‬ ‫( (کند محتوای اندیس در درخت باینری را‬remove(index (‫حذف می‬ :Additional operations Complexity Of Dictionary Operations ((get((, put(( and remove Data Structure Worst Case Hash Table O(n) Expected O(1) O(log n) O(log n) Binary Search O(n) Tree Balanced O(log n) Binary Search Tree Complexity Of Other Operations ascend((, get(index(, (remove(index Data Structure ascend Hash Table get and remove O(D + n log n) O(D + n log n) O(n) O(log n) Indexed BST O(n) Indexed O(n) Balanced BST D is number of buckets ‫‪Definition Of Binary Search Tree‬‬ ‫در یک درخت باینری‬ ‫هر گره دارای (‪ (key, value‬میباشد.‬ ‫برای هر گره دلخواه ‪ x‬کلیه عناصر زیر‬ ‫درخت چپ آن کوچکتر از آن وکلیه‬ ‫عناصر زیر درخت راست آن بزرگتر از‬ ‫آن می باشد.‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬ Example Binary Search Tree 20 10 6 15 30 40 2 8 25 .‫فقط کلید ها را نشان داده است‬ ‫‪((The Operation ascend‬‬ ‫02‬ ‫01‬ ‫6‬ ‫51‬ ‫03‬ ‫04‬ ‫2‬ ‫8‬ ‫52‬ ‫پیمایش میانوندی آن با ‪ (O(n‬امکا ن پذیر است.‬ ((The Operation get 20 10 6 15 30 40 2 8 25 ‫ = پیچیدگی‬O(height) = O(n( ((The Operation put 20 10 6 15 30 40 2 8 25 35 Put 35. ((The Operation put 20 10 6 15 30 40 2 7 8 25 35 Put 7. ((The Operation put 20 10 6 15 18 30 40 2 7 8 25 35 Put 18. ((The Operation put 20 10 6 15 18 30 40 2 7 8 25 35 ‫ => پیچیدگی‬put() = O(height). ‫‪((The Operation remove‬‬ ‫گره در وضعیت های:‬ ‫‪ ‬اگر گره برگ باشد‬ ‫‪‬اگر گره از درجه یک باشد.‬ ‫‪‬اگر گره از درجه دو باشد‬ Remove From A Leaf 20 10 6 15 18 30 40 2 7 8 25 35 7 = ‫گره برگ‬ ‫حذف‬ (.Remove From A Leaf (contd 20 10 6 15 18 30 40 2 7 8 25 35 35 = ‫حذف گره برگ‬ Remove From A Degree 1 Node 20 10 6 15 18 30 40 2 7 8 25 35 40 = ‫حذف گره تک فرزندی‬ (.Remove From A Degree 1 Node (contd 20 10 6 15 18 30 40 2 7 8 25 35 15 = ‫حذف گره تک فرزندی‬ Remove From A Degree 2 Node 20 10 6 15 18 30 40 2 7 8 25 35 10 = ‫حذف گره دو فرزندی‬ ‫‪Remove From A Degree 2 Node‬‬ ‫02‬ ‫01‬ ‫6‬ ‫51‬ ‫81‬ ‫03‬ ‫04‬ ‫2‬ ‫7‬ ‫8‬ ‫52‬ ‫53‬ ‫جابه جا کنید با بزرگترین در زیر درخت چپ ویا با‬ ‫کوچکترین در زیر درخت راست.‬ ‫‪Remove From A Degree 2 Node‬‬ ‫02‬ ‫01‬ ‫6‬ ‫51‬ ‫81‬ ‫03‬ ‫04‬ ‫2‬ ‫7‬ ‫8‬ ‫52‬ ‫53‬ ‫جابه جا کنید با بزرگترین در زیر درخت چپ ویا با‬ ‫کوچکترین در زیر درخت راست.‬ ‫‪Remove From A Degree 2 Node‬‬ ‫02‬ ‫8‬ ‫6‬ ‫51‬ ‫81‬ ‫03‬ ‫04‬ ‫2‬ ‫7‬ ‫8‬ ‫52‬ ‫53‬ ‫جابه جا کنید با بزرگترین در زیر درخت چپ ویا با‬ ‫کوچکترین در زیر درخت راست.‬ ‫‪Remove From A Degree 2 Node‬‬ ‫02‬ ‫8‬ ‫6‬ ‫51‬ ‫81‬ ‫03‬ ‫04‬ ‫2‬ ‫7‬ ‫8‬ ‫52‬ ‫53‬ ‫بزرگترین کلید یا باید برگ باشد یا گره تک‬ ‫فرزندی‬ Another Remove From A Degree 2 Node 20 10 6 15 18 30 40 2 7 8 25 35 = 20 ‫حذف گره دو فرزندی‬ ‫‪Remove From A Degree 2 Node‬‬ ‫02‬ ‫01‬ ‫6‬ ‫51‬ ‫81‬ ‫03‬ ‫04‬ ‫2‬ ‫7‬ ‫8‬ ‫52‬ ‫53‬ ‫جابه جا کنید با بزرگترین در زیر درخت چپ‬ ‫‪Remove From A Degree 2 Node‬‬ ‫02‬ ‫01‬ ‫6‬ ‫51‬ ‫81‬ ‫03‬ ‫04‬ ‫2‬ ‫7‬ ‫8‬ ‫52‬ ‫53‬ ‫جابه جا کنید با بزرگترین در زیر درخت چپ‬ ‫‪Remove From A Degree 2 Node‬‬ ‫81‬ ‫01‬ ‫6‬ ‫51‬ ‫81‬ ‫03‬ ‫04‬ ‫2‬ ‫7‬ ‫8‬ ‫52‬ ‫53‬ ‫جابه جا کنید با بزرگترین در زیر درخت چپ‬ Remove From A Degree 2 Node 18 10 6 15 30 40 2 7 8 25 35 ‫ = پیچیدگی‬O(height). ‫‪Indexed Binary Search Tree‬‬ ‫جستجوی باینری‬ ‫در هر نود یک فیلد اضافی وجود دارد:‬ ‫‪ =leftSize ‬شمارش تعداد نود های چپ‬ ‫درخت‬ ‫‪‬‬ ‫‪‬‬ Example Indexed Binary Search Tree 7 4 10 20 3 40 1 6 0 15 1 0 18 30 0 2 8 1 0 7 0 25 0 35 leftSize =red leftSize And Rank inorder ‫ =موقعیت عناصر در‬Rank (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 Rank 7 4 10 20 3 40 1 6 0 15 1 0 18 30 0 2 8 1 0 7 0 25 0 35 sorted list = [2,6,7,8,10,15,18,20,25,30,35,40] (get(index( And remove(index 7 4 10 20 3 40 1 6 0 15 1 0 18 30 0 2 8 1 0 7 0 25 0 35 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 ‫زیر درخت چپ‬ ifindex < x.leftSize index -( ‫عنصری انتخاب می شودکه محتوای‬ ‫می‬x ‫( آن در زیر درخت راست‬x.leftSize-1 .‫باشد‬ Linear List As Indexed Binary Tree 7 4 e l h 3 0 1 0 g 1 b f j 0 a d 1 0 c 0 i k 0 list = [a,b,c,d,e,f,g,h,i,j,k,l] (‘add(5,‘m 7 4 e l h 3 0 1 0 g 1 b f j 0 a d 1 0 c 0 i k 0 list = [a,b,c,d,e,f,g,h,i,j,k,l] (‘add(5,‘m 7 4 e l h 3 0 1 0 g 1 b f j 0 a d 1 0 c 0 i k 0 list = [a,b,c,d,e, m,f,g,h,i,j,k,l] find node with element 4 (e) (‘add(5,‘m 7 4 e l h 3 0 1 0 g 1 b f j 0 a d 1 0 c 0 i k 0 list = [a,b,c,d,e, m,f,g,h,i,j,k,l] find node with element 4 (e) ‫‪(‘add(5,‘m‬‬ ‫7‬ ‫4‬ ‫‪e‬‬ ‫‪l‬‬ ‫‪m‬‬ ‫‪b‬‬ ‫‪f‬‬ ‫‪h‬‬ ‫3‬ ‫0‬ ‫0‬ ‫‪g‬‬ ‫1‬ ‫0‬ ‫‪a‬‬ ‫‪d‬‬ ‫1‬ ‫0‬ ‫‪i‬‬ ‫‪j‬‬ ‫1‬ ‫0‬ ‫‪c‬‬ ‫0‬ ‫‪k‬‬ ‫‪ m‬را به راست گره ‪ e‬اضافه کرده است‬ ‫در نتیجه زیر درخت راست ‪ e‬به عنوان زیر درخت‬ ‫راست ‪m‬قرار می گیرد.‬ ‫‪(‘add(5,‘m‬‬ ‫7‬ ‫4‬ ‫‪e‬‬ ‫‪l‬‬ ‫‪h‬‬ ‫3‬ ‫0‬ ‫1‬ ‫0‬ ‫‪m‬‬ ‫‪g‬‬ ‫1‬ ‫‪b‬‬ ‫‪f‬‬ ‫‪j‬‬ ‫0‬ ‫‪a‬‬ ‫‪d‬‬ ‫1‬ ‫0‬ ‫‪c‬‬ ‫0‬ ‫‪i‬‬ ‫‪k‬‬ ‫0‬ ‫‪m‬را بعنوان فرزند چپ در زیر درخت‬ ‫راست گره ‪ e‬قرار دهید.‬ (‘add(5,‘m (O(height = ‫پیچیدگی‬ ...
View Full Document

{[ snackBarMessage ]}

Ask a homework question - tutors are online