מבנה נתונים או טיפוס נתונים מופשט חלק ב – פעולות על רשימה הוכן ע " י ולרי פקר דצמבר 2015.

Slides:



Advertisements
Similar presentations
Lists, Stacks, Queues Svetlin Nakov Telerik Corporation
Advertisements

The ArrayList Class and the enum Keyword
Generics, Lists, Interfaces
CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics C# Language &.NET Platform 12 th -13 th Lecture Pavel Ježek.
Object Oriented 33 MCSD DORON AMIR
ממיבחניםC שאלות ++.
תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
האוניברסיטה העברית בירושלים
©Silberschatz, Korth and Sudarshan4.1Database System Concepts סכימה לדוגמא.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
רשימה מקושרת Linked Lists. דוגמא STRING איך עושים Dim x as String בלי לדעת מראש את הגודל !
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
Collections. 2 Objectives Explore collections in System.Collections namespace –memory management –containment testing –sorting –traversal.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
מערכות הפעלה ( אביב 2009) חגית עטיה ©1 מערכת קבצים log-structured  ה log הוא העותק היחיד של הנתונים  כאשר משנים בלוק (data, header) פשוט כותבים את הבלוק.
Iterators Chapter 7. Chapter Contents What is an Iterator? A Basic Iterator Visits every item in a collection Knows if it has visited all items Doesn’t.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
Stacks and Queues. Stack ADT סוג של מערך מוגבל מהר מאוד ולוקחים מעט זכרון שימוש ב LIFO – LIFO (Last In, First Out) lists. –אפשר להוסיף רק בסוף הרשימה.
Lists in Java Part of the Collections Framework. Kinds of Collections Collection --a group of objects, called elements –Set-- An unordered collection.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
תרגול 12: ומחסניתIteratorרשימה מקושרת, תור, 1. רשימה מקושרת (Linked List) רשימה מקושרת הינה קבוצה סדורה של אובייקטים, כאשר כל אובייקט ברשימה מכיל הצבעה.
Markov Decision Processes (MDP) תומר באום Based on ch. 14 in “Probabilistic Robotics” By Thrun et al. ב"הב"ה.
12-Jul-15 Lists in Java Part of the Collections Framework.
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 10. אג'נדה שאלות מבחינות חזרה על מימוש stream אפשרי 2.
ומחסניתIteratorרשימה מקושרת, תור,
CS-2851 Dr. Mark L. Hornick 1 Tree Maps and Tree Sets The JCF Binary Tree classes.
Arrays, Lists, Stacks, Queues Static and Dynamic Implementation Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Collections in Java. Kinds of Collections Collection --a group of objects, called elements –Set-- An unordered collection with no duplicates SortedSet.
04/29/ Introduction to Vectors?... A vector is a dynamic array. - It can be expanded and shrunk as required - A Component of a vector can be accessed.
תוכנה 1 תרגול מס ' 3 מערכים ומבני בקרה. 2 מערכים Array: A fixed-length data structure for storing multiple values of the same type Example: An array of.
Generics Collections. Why do we need Generics? Another method of software re-use. When we implement an algorithm, we want to re-use it for different types.
בתרגול הקודם כללי הרשאות (Visibility modifiers) בהורשה – Public – Protected – private חוקי גישה לשדות ושיטות בהורשה ב -Java מחלקות אבסטרקטיות –המילה השמורה.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
1 מבוא למדעי המחשב הרצאה 21: Queue, Iterator & Iterable.
Generic Programming  Object Type  Autoboxing  Bag of Objects  JCL Collections  Nodes of Objects  Iterators.
תרגול 12: Iterator מחסנית תור 1. מחסנית (stack) מחסנית (stack) היא מבנה נתונים שמזכיר מחסנית של רובה : האיבר שנכנס ראשון למחסנית יוצא ממנה אחרון (LIFO.
(c) University of Washington16-1 CSC 143 Java Linked Lists Reading: Ch. 20.
(c) University of Washington16-1 CSC 143 Java Lists via Links Reading: Ch. 23.
Practice session 5 טיפוסים מורכבים Abstract Data Types הכנה לעבודה 3.
U n i v e r s i t y o f H a i l 1 ICS 202  2011 spring  Data Structures and Algorithms 
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים פולימורפיזם מתקדם ממשקים בג ' אווה 1.
קורס תכנות שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
Generics & Collection Classes Version 1.0. Topics Generic Methods and Classes Generic Collection Classes List Enumerators Queue Stack LinkedList.
1 תרגול 11: Design Patterns ומחלקות פנימיות אסף זריצקי ומתי שמרת 1 תוכנה 1.
1 נתבונן בפונקציה הבאה public static int min(int[] a,int n) { int min = a[0]; for (int i = 1; (i < n ) && (i < a.length) ; i++) if (min > a[i]) min = a[i];
1 Example: LinkedStack LinkedStack UML Class Diagram LinkedStack Class LinkedStack Attributes/Constructor LinkedStack Methods LinkedStack iterator method.
Chapter  Array-like data structures  ArrayList  Queue  Stack  Hashtable  SortedList  Offer programming convenience for specific access.
Iterators. Iterator  An iterator is any object that allows one to step through each element in a list (or, more generally, some collection).
מחרוזות – הטיפוס String
האוניברסיטה העברית בירושלים
Programming Arrays.
מבני נתונים רשימה מקושרת, מחסנית ותור
Collections 24: Collections Programming C# © 2003 DevelopMentor, Inc.
CS313D: Advanced Programming Language
Exams questions examples
תירגול 14: מבני נתונים דינאמיים
הרצאה 06 רשימות מקושרות קרן כליף.
ממשקים - interfaces איך לאפשר "הורשה מרובה".
בניית מחסנית סטטית Static Stack Implementation מורים מובילים תשע"ה
תכנות מכוון עצמים ושפת JAVA
Linked Lists [AJ 15].
מבוא לתכנות ב- Java תרגול 10 - רשימות מקושרות.
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
Example: LinkedSet<T>
Presentation transcript:

מבנה נתונים או טיפוס נתונים מופשט חלק ב – פעולות על רשימה הוכן ע " י ולרי פקר דצמבר 2015

" מקום ברשימה " הפניה לחוליה ─ חושף ייצוג ומימוש ( אינה טיפוס נתונים מופשט ) הכנסה בסדר גודל O(1) הוצאה בסדר גודל O(1) ( ברשימה דו - כוונית ) תנועה קדימה בסדר גודל O(1) ( גם אחורה ברשימה דו - כוונית ) גישה למקום ברשימה בסדר גודל O(1) ביצוע הכנסה, הוצאה, תנועה וגישה ברשימה שבה מקום = הפניה לחוליה יעיל ביצוע הכנסה, הוצאה, תנועה וגישה ברשימה שבה מקום = הפניה לחוליה יעיל 1 הפניה לחוליה

הפניה לחוליה מחלקת הרשימה פותרת חלק מהבעיות : יש רשימה ריקה יש הכנסה והוצאה במקום הראשון ביצוע הכנסה, הוצאה, תנועה וגישה ברשימה שבה מקום = הפניה לחוליה יעיל אבל – דורשת שימוש במחלקה Node לפעילות שוטפת – אינה טיפוס נתונים מופשט לכן, ניתנת לקלקול – הפתרון לא מקובל !! " מקום ברשימה " 1 הפניה לחוליה

" מקום ברשימה " 2 הפניה לחוליה משופרת לחוליה המשופרת יש שני מצבים : חוליה במצב בידוד חוליה בתוך רשימה נמלה בודדת נמלים הן חרקים חברותיים

נמלה בודדת toList = null next = null prev = null first null 4 last count prevnext toList toList != null next != null prev = null toList != null next != null prev != null toList != null next != null prev != null toList != null next = null prev != null " מקום ברשימה " 2 הפניה לחוליה משופרת

כל חוליה שייכת לרשימה. הרשימה מורכבת מהחוליות. חוליות ברשימה הן לא חוליות בודדות. הרשימה נעזרת בחוליות שאינן בודדות. first null 4 last count " מקום ברשימה " 2 הפניה לחוליה משופרת

prevnext value toList public class Node { internal T value; internal Node next; internal Node prev; internal ListLinked toList; public Node(T value) { this.value = value; this.next = null; this.prev = null; this.toList = null; } toList = null next = null prev = null " מקום ברשימה " 2 הפניה לחוליה משופרת הרשאה internal: מותרת גישה מכל מקום בתוך האסמבלי של הקובץ EXE, DLL וכו'. הרשאה internal: מותרת גישה מכל מקום בתוך האסמבלי של הקובץ EXE, DLL וכו'.

public T GetValue() { return this.value; } public void SetValue(T value){ this.value = value; } public ListLinked GetList(){ return this.toList; } אין פעולות: SetNext, SetToList ו-SetPrevious אין פעולות: SetNext, SetToList ו-SetPrevious " מקום ברשימה " 2 הפניה לחוליה משופרת prevnext value toList toList = null next = null prev = null

public class ListLinked { private Node first; private Node last; private int count; public ListLinked() { this.first = null; this.last = null; this.count = 0; }  } public class Node { internal T value; internal Node next; internal Node prev; internal ListLinked toList; public Node(T value) { this.value = value; this.next = null; this.prev = null; this.toList = null; }  } שתי המחלקות נמצאות באותו מרחב השמות!!! באותו הקובץ DLL שתי המחלקות נמצאות באותו מרחב השמות!!! באותו הקובץ DLL " מקום ברשימה " 2 הפניה לחוליה משופרת

List - Node first - Node last - int count Node ~ T value ~ Node next ~ Node prev ~ List toList " מקום ברשימה " 2 הפניה לחוליה משופרת ניתן להתייחס אל המחלקה Node כאל מחלקת עזר, שהשימוש המתוכנן בה נעשה על ידי המחלקה List ואין שום כוונה לנצל אותה מעבר לכך. בתוך המחלקה List עצמה ניתן לפנות לתכונות פנימיות של המחלקה Node שהוגדרו כ -internal. התכונות next, prev ו -toList של המחלקה Node מוסתרות כלפי חוץ ואין פעולות שמאפשרות לשנות אותן. התכונות next, prev ו -toList מוכרות בתוך המחלקה List וניתן לשנות אותן בצורה מבוקרת.

" מקום ברשימה " 2 הפניה לחוליה משופרת פעולת הכנסה פעולה המכניסה לרשימה חוליה q רק במצב בודד אחרי המקום ברשימה p. אחרי הכנסת החוליה, היא הופכת לחלק מהרשימה. p first null 5 last count q p first null 4 last count null q

" מקום ברשימה " 2 הפניה לחוליה משופרת פעולת הוצאה פעולה המוציאה מן הרשימה את החוליה הנמצאת בה במקום p. הפעולה מבודדת את החוליה p. first null 4 last count null p p first null 5 last count

" מקום ברשימה " 2 הפניה לחוליה משופרת פעולת הוצאה ופעולת הכנסה את הצלחת או אי הצלחת הפעולות אפשר לבדוק בעזרת כמות החוליות הנמצאות ברשימה לפני ואחרי הפעולה. p first null 5 last count q p first null 4 last count null q

first null 5 last count q p first null 4 last count (p.GetList() == q.GetList()) " מקום ברשימה " 2 הפניה לחוליה משופרת המערכת מאפשרת לזהות חוליה ידידותית, זרה או בודדת.

מחלקת הרשימה היא טיפוס נתונים מופשט. יש רשימה ריקה יש הכנסה והוצאה במקום הראשון ביצוע הכנסה, הוצאה, תנועה וגישה ברשימה שבה מקום = הפניה לחוליה יעיל אבל – דורשת שימוש במחלקה Node לפעילות שוטפת. – מימוש המחלקה Node דורש הרשאת הגישה internal. – המחלקה Node ניתנת לשימוש רק כחלק אינטגראלי של המחלקה רשימה !! – מימוש בשפת Java? " מקום ברשימה " 2 הפניה לחוליה משופרת

ייצוג ומימוש מוסתרים, אבל for (int i=0; i< lst.GetSize(); i++) { lst.GetValue(i)..... } lst.GetSize() = n n = (1+n)*n/2 O(n 2 ) אי-אפשר לשפר יעילות, כי זה יישום נפוץ O(n) ? " מקום ברשימה " 3 אינדקס מספרי T GetValue(int at) void SetValue(int at,T x)

" מקום ברשימה " 3 אינדקס מספרי List sortedLst = new List (); int x, y, i, j; for (i=0; i< lst.GetSize(); i++) { x = lst.GetValue(i); for (j = 0; j < i - 1; j++){ y = sortedLst.GetValue(j); if (y >= x) break; } sortedLst.Insert(j, x); } lst.GetSize() = n 2(  +n) + (n + 2(n-1) + 3(n-2) +  n(n - (n -1)) = = 2(  +n) + (n + 2n + 3n +  +n 2 ) – (  + n – 1) = = (  + n) + n(  + n) = O(n 3 ) O(n 2 ) ?

" מקום ברשימה " אינדקס מספרי הייצוג והמימוש מוסתרים ( טיפוס נתונים מופשט ) ─ הכנסה בסדר גודל O(n) ─ הוצאה בסדר גודל O(n) ─ תנועה קדימה בסדר גודל O(n) ─ גישה למקום ברשימה בסדר גודל (n)O ─ סריקה בסדר גודל O(n) ─ מיון בסדר גודל O(n 3 ) ביצוע הכנסה, הוצאה, תנועה וגישה, סריקה מיון ברשימה שבה מקום = אינדקס מספרי לא יעיל ביצוע הכנסה, הוצאה, תנועה וגישה, סריקה מיון ברשימה שבה מקום = אינדקס מספרי לא יעיל 3 אינדקס מספרי

19 public class List { private Node first; public List(){ this.first = null; } public List(T value){ this.first = new Node(value, null); } public GetFirst(){ return this.first; }... } מקום הוא אינדקס מספרי הרשימה היא טיפוס נתונים מופשט עוטפת את המחלקה Node מקום ברשימה הוא אינדקס " מקום ברשימה " 3 אינדקס מספרי

ייצוג ומימוש מוסתרים while (lst.MoveNext()) { lst.GetValue()..... } O(n) " מקום ברשימה " 3 מקום נוכחי ברשימה T GetValue( ) void SetValue(T x)

" מקום ברשימה " מקום הוא הפניה נוכחית ייצוג ומימוש מוסתרים ( טיפוס נתונים מופשט ) הכנסה בסדר גודל O(1) הוצאה בסדר גודל O(1) ( ברשימה דו - כוונית ) תנועה קדימה בסדר גודל O(1) ( גם אחורה ברשימה דו - כוונית ) גישה למקום נוכחי ברשימה בסדר גודל O(1) ביצוע הכנסה, הוצאה, תנועה וגישה ברשימה שבה מקום = מקום נוכחי ברשימה יעיל ביצוע הכנסה, הוצאה, תנועה וגישה ברשימה שבה מקום = מקום נוכחי ברשימה יעיל 4 מקום נוכחי ברשימה

22 public class List { private Node first; private Node currPos; public List(){ this.first = null; this.currPos = null; } public List(T value){ this.first = new Node(value, null); this.currPos = null; }... } מקום הוא הפניה נוכחית הרשימה היא טיפוס נתונים מופשט עוטפת את המחלקה Node מקום ברשימה הוא מקום נוכחי " מקום ברשימה " 4 מקום נוכחי ברשימה

" מקום ברשימה " מקום הוא הפניה נוכחית ייצוג ומימוש מוסתרים ( טיפוס נתונים מופשט ) הכנסה בסדר גודל O(1) הוצאה בסדר גודל O(1) ( ברשימה דו - כוונית ) תנועה קדימה בסדר גודל O(1) ( גם אחורה ברשימה דו - כוונית ) גישה למקום ברשימה בסדר גודל O(1) ─ אפשר להחזיק רק מקום נוכחי אחד בלבד. 4 מקום נוכחי ברשימה

Enumerator 24 " מקום ברשימה " 5 דרך אלטרנטיבית מאפשר לבצע כמה סריקות במקביל על הרשימה מאפשר לבצע כמה סריקות במקביל על הרשימה

25 enumC 3 enumB enumA ייצוג ומימוש מוסתרים enum = lst.GetEnumerator(); while (enum.MoveNext()) { enum.GetValue()..... } O(n) " מקום ברשימה " 5 Enumerator

ListEnumerator currentPos lst 26 " מקום ברשימה " 5 Enumerator ListEnumerator currentPos lst first null value

פעולה שבה מוחזר ערך בעזרת האופרטור yield, נקראת פעולה מחוללת Enumerator. קריאה אליה מחזירה עצם המשמש Enumerator. בקריאה ראשונה לעצם מוחזר הערך, שמופיע בהוראה שמחזירה ערך, בעזרת האופרטור yield. ובכל קריאה נוספת הפעולה ממשיכה מהמקום בו היא הפסיקה בקריאה הקודמת, על ערכים מוחזרים !! אופרטור yield 5 Enumerator מאפשר לבצע סריקות על ערכים המחזירים מאפשר לבצע סריקות על ערכים המחזירים

אובייקט זה יעבור על אוסף הנתונים פריט אחר פריט, לפי סדר מסוים. ב -C# מוגדר ממשק לעבודה עם אובייקט כזה : 28 " מקום ברשימה " 5 Enumerator IEnumerator

public interface IEnumerator : IDisposable, IEnumerator { /// Advances the enumerator to the next /// element of the collection. /// true if the enumerator was successfully ///advanced to the next element; false if the enumerator /// has passed the end of the collection. bool MoveNext(); /// Return element in the collection at the /// current position of the enumerator. /// element in the collection T IEnumerator.Current; /// Sets the enumerator to its initial position, /// which is before the first element in the collection. /// void Reset(); } " מקום ברשימה "

5 Enumerator שימוש יהיה משותף לאוספים רבים, למשל לרשימה. ב -C# מוגדר ממשק IEnumerable. כל אוסף שיממש את הממשק הוא אוסף ניתן למעבר פריט - אחר - פריט, ובאנגלית : Enumerable. public interface IEnumerable : IEnumerable { /// /// Returns an Enumerator over a set of elements. /// /// IEnumerator IEnumerator GetEnumerator(); }

עכשיו כל מה שנותר לעשות הוא לממש את המחלקה ListEnumerator. המחלקה ListEnumerator מממשת את הממשק IEnumerator. public class List : IEnumerable { private Node first ; public List (){ this. first = null; } … // כל שאר הפעולות יישארו ללא שינוי public IEnumerator GetEnumerator(){ return new ListEnumerator (this); } 31 " מקום ברשימה " 5 Enumerator

32 public interface Iterable { /** * Returns an iterator over a set of elements. * an Iterator. */ Iterator iterator(); } " מקום ברשימה בשפת Java" Iterator

public interface Iterator { /** * Returns true if the iteration has more elements. true if the iterator has more elements. */ boolean hasNext(); /** * Returns the next element in the iteration. the next element in the iteration. */ Object next(); /** * Removes from the underlying collection the last element returned by the * iterator (optional operation) UnsupportedOperationException if the "remove" * operation is not supported by this Iterator. * IllegalStateException if the "next" method has not * yet been called, or the "remove" method has already * been called after the last call to the "next" * method. */ void remove(); } 33 " מקום ברשימה בשפת Java" Iterator

רשימה C# – רשימה ממומשת על - ידי מערך פנימי. – אפשר להתייחס למקום ברשימה כאינדקס לא דומה ל -Java. – בעת הוספת פריט לרשימה, המערך הפנימי שלה, המנוהל על ידי רשימה, יגדל במידת צורך כדי להתאים את הפריט החדש. – ממשק מסובך.

Constructors for List Constructors for List

תכונות

פעולות NameDescription AddAdds an object to the end of the List. AddRange Adds the elements of the specified collection to the end of the List. AsReadOnly Returns a read-only IList wrapper for the current collection. BinarySearch(T) Searches the entire sorted List for an element using the default comparer and returns the zero- based index of the element. BinarySearch (T, IComparer ) Searches the entire sorted List for an element using the specified comparer and returns the zero- based index of the element. BinarySearch (Int32, Int32, T, IComparer ) Searches a range of elements in the sorted List for an element using the specified comparer and returns the zero-based index of the element.

פעולותClear Removes all elements - makes the list empty Contains Determines whether an element is in the List. ConvertAll ConvertAll Converts the elements in the current List to another type, and returns a list containing the converted elements. CopyTo ( array ) Copies the entire List to a compatible one-dimensional array of T, starting at the beginning of the target array. CopyTo ( array, Int32) Copies the entire List to a compatible one-dimensional array, starting at the specified index of the target array. CopyTo (Int32, array, Int32, Int32) Copies a range of elements from the List to a compatible one-dimensional array, starting at the specified index of the target array. Equals(Object) Determines whether the specified Object is equal to the current Object. (Inherited from Object.) Exists Determines whether the List contains elements that match the conditions defined by the specified predicate.

פעולותFind Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire List. FindAll Retrieves all the elements that match the conditions defined by the specified predicate. FindIndex (Predicate ) Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the entire List. FindIndex (Int32, Predicate ) Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the List that extends from the specified index to the last element.

פעולותRemove Removes first occurrence of specific object from List. RemoveAll Removes all the elements that match the conditions defined by the specified predicate. RemoveAt Removes element at the specified index of the List. RemoveRange Removes a range of elements from the List. Reverse ( ) Reverses order of the elements in the entire List. Reverse(Int32, Int32) Reverses order of the elements in the specified range. Sort ( ) Sorts the elements in the entire List using the default comparer. Sort(Comparison ) Sorts the elements in the entire List using the specified System..::. Comparison. Sort(IComparer ) Sorts the elements in the entire List using the specified comparer. Sort(Int32, Int32, IComparer ) Sorts the elements in range of elements in List using the specified comparer.

ToArray Copies the elements of the List to a new array. ToString Returns a String that represents the current Object. (Inherited from Object.) TrimExcess Sets the capacity to the actual number of elements in the List, if that number is less than a threshold value. TrueForAll Determines whether every element in the List matches the conditions defined by the specified predicate.פעולות