תרגול 1

מסמכים קשורים
מבוא למדעי המחשב

מבוא לתכנות ב- JAVA תרגול 7

מבוא למדעי המחשב

תרגול 1

מהוא לתכנות ב- JAVA מעבדה 3

מבוא למדעי המחשב

אוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ

Slide 1

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

מבוא למדעי המחשב

מבוא למדעי המחשב

מבוא לתכנות ב- JAVA תרגול 11

PowerPoint Presentation

מבוא למדעי המחשב

אוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד

PowerPoint Presentation

תרגול 1

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

תרגול מס' 7: תרגילים מתקדמים ברקורסיה

מבוא למדעי המחשב - חובלים

PowerPoint Presentation

PowerPoint Presentation

תרגול 1

Microsoft PowerPoint - 10_threads.ppt

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

סדנת תכנות ב C/C++

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

תכנון אלגוריתמים, אביב 1021, תרגול מס' 4 תכנון דינאמי תכנון דינאמי בתרגול זה נדון בבעיית הכפלת סדרת מטריצות (16.1.(CLR ראשית נראה דוגמא: דוגמא: תהינה

PowerPoint Presentation

Slide 1

מבוא למדעי המחשב - חובלים

Microsoft Word B

PowerPoint Presentation

מבוא לאסמבלי

שאלהIgal : מערכים דו מימדיים רקורסיה:

הגשה תוך שבוע בשעת התרגול

Microsoft Word - c_SimA_MoedB2005.doc

מקביליות

PowerPoint Presentation

שבוע 4 סינטקס של HACK ASSEMBLY ניתן להשתמש בשלושה אוגרים בלבד:,A,D,M כולם בעלי 16 ביטים. M אינו אוגר ישיר- הוא מסמן את האוגר של ה RAM שאנחנו מצביעים ע

תוכנה 1 תרגול מספר 12: GUI כתיבת מחלקות גנריות בית הספר למדעי המחשב אוניברסיטת תל אביב 1

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם

Slide 1

תאריך פרסום: תאריך הגשה: מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש לה

מתכונת עיצוב 3013

שאלהIgal : מערכים דו מימדיים רקורסיה:

Slide 1

Slide 1

Microsoft Word - pitaron222Java_2007.doc

אוניברסיטת בן-גוריון המחלקה למדעי המחשב בוחן במבנים בדידים וקומבינטוריקה פרופ' מתיא כ"ץ, ד"ר עופר נימן, ד"ר סטוארט סמית, ד"ר נתן רובין, גב'

מבוא למדעי המחשב

Slide 1

מקביליות

עוצמת ההורשה מה הופך את ההורשה לכלי כל כך עוצמתי? מעבר לכך שהוא מקל בהגדרת מחלקות חדשות על סמך מחלקות קיימות, יש לנו אפשרות להתייחס לאובייקט מסויים בכ

משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק

תכנות דינמי פרק 6, סעיפים 1-6, ב- Kleinberg/Tardos סכום חלקי מרחק עריכה הרעיון: במקום להרחיב פתרון חלקי יחיד בכל צעד, נרחיב כמה פתרונות אפשריים וניקח

מקביליות

Slide 1

תוכן העניינים

פתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (

Slide 1

תרגול מס' 1

Slide 1

תרגול 3 - מערכים

Slide 1

מבוא למדעי המחשב, סמסטר א', תשס"ח תרגול מס' 2

PRESENTATION NAME

Slide 1

Tutorial 11

PowerPoint Presentation

שאלהIgal : מערכים דו מימדיים רקורסיה:

תורת הקומפילציה

Microsoft Word - tutorial Dynamic Programming _Jun_-05.doc

PowerPoint Presentation

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

תוכן העניינים

Microsoft PowerPoint - rec3.ppt

פייתון

Microsoft Word - c_SimA_MoedA2006.doc

שעור 6

דף נגזרות ואינטגרלים לשאלון 608 כללים למציאת נגזרת של פונקציה: n 1. y' n x n, y הנגזרת x.1 נכפול בחזקה )נרשום אותה משמאל ל- (. x א. נחסר אחד מהחזקה. ב

מס' סידורי: ת.ז.: עמוד 1 מתוך 20 בחינה בתוכנה 1 סמסטר ב', מועד א',תשס"ט 5/7/2009 וולף, ליאור ליאור שפירא, נעמה מאיר, מתי שמרת הוראות )נא לקרוא!( משך ה

המשימה תרגול מס' 5: קלט-פלט במערכות הפעלה שונות יש סימונים שונים עבור ירידת שורה :)newline( ב- UNIX/Linux )Line Feed( \n ב- Windows )Carriage Return +

. m most לכל אורך השאלה, במקרה של כוח חיכוך: = 0.01 [kg]; μ א. נתון: = 0.1 k f k = μ k N = μ k mg a = μ k g תור ראשון: לאחר שג'וני גלגל את הגולה הראשו

Microsoft PowerPoint - lec10.ppt

PowerPoint Presentation

שקופית 1

PowerPoint Presentation

איטרטורים: 1 תוכנה 1 סתיו תשע"ג תרגיל מספר 9 הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה moodl

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

Data Structure Assignment no.3 תאריך הגשה: p.m. 11/09/16, 23:59 את העבודה יש להגיש בזוגות במערכת ההגשות.submission system על העבודה להיות מוגשות כקובץ

בחן במערכות הפעלה

תמליל:

מבוא למדעי המחשב 2019 תרגול 12 מחסנית )Stack( memoization

ראינו בהרצאה מחסנית Infix/Postfix Notations

בתרגול היום מחסנית בדיקת איזון סוגריים בביטוי אריתמטי מימוש תור באמצעות מחסנית memoization דוגמאות שימוש: צפרדע, בעיית העודף.

תזכורת: מחסנית :)stack( מבנה נתונים שפועל בשיטת )LIFO( : האיבר שנכנס אחרון למחסנית יוצא ממנה ראשון Last In - First Out Data Data Data Data Data Data

תזכורת: ממשק Stack public interface Stack<T> { /** * push - adds an element to the top of the stack. */ public void push (T element); /** * pop - removes an element form the stack (LIFO order). * @return the element from the top of the stack. */ public T pop (); /** * peek - looks at the object at the top of this stack without removing it. * @return the element from the top of the stack. */ public T peek (); /** * isempty - checks if the stack is empty or not. * @return true if there is no more elements in the stack. */ public boolean isempty();

בדיקת איזון סוגריים בביטוי אריתמטי בעיה: קלט: ביטוי אריתמטי )מחרוזת( שעשוי להכיל סוגריים : (, ) פלט: true אם הסוגריים בביטוי מאוזנים כהלכה false אחרת )האלגוריתם לא מתעניין בשאר רכיבי הביטוי פרט לסוגריים( ((6) + (12 (9))) ((6 + (12 9)) true false

איזון סוגריים: אלגוריתם כיצד נפתור את הבעיה? נשים לב לעובדה הבאה: בקריאת ביטוי מאוזן משמאל לימין, בהגיענו למקום מסוים i, מספר הסוגרים הפותחים "(" גדול שווה למספר הסוגרים הסוגרים ")" מתחילת הביטוי ועד למקום ה- i.."(" עד לחץ )כולל( יש 5 סוגרים פותחים "(" ו- 2 סוגרים סוגרים לדוגמא, בביטוי:( ) ) ( ( ) ) ( ( ( נשתמש במחסנית על מנת לבדוק האם התנאי מתקיים

public class Balance { public static boolean balanced(string expr) { Stack<Character> st = new StackAsDynamicArray<>() ; for(int i=0; i < expr.length(); i=i+1) { char c = expr.charat(i); if(c == '(') st.push(c); else if(c == ')') { if(st.isempty()) return false; else st.pop(); return st.isempty(); איזון סוגריים: מימוש פשוט

איזון סוגריים: פתרון כללי בעיה: <>, (), {, [] קלט: ביטוי אריתמטי )מחרוזת( שעשוי להכיל סוגריים ממספר סוגים: public class Balance { public static void main(string[] args) { String open = "[<({"; String close = "]>)"; String expr1 = "(<6>+{12 [9])"; String expr2 = "(<6+{12 9])"; System.out.println(balanced(expr1, open, close)); // true System.out.println(balanced(expr2, open, close)); // false

איזון סוגריים: אלגוריתם נשנה במעט את הפתרון הקודם נשים לב לעובדה הבאה: אם נתקלנו בסוגר סוגר סוגר 'סוגר' מאותו סוג 'פותח' מסוג כלשהו אחרת הביטוי לא מאוזן 'פותח' מסוג כלשהו, אז הסוגר הבא שנתקל בו הינו

איזון סוגריים: מימוש public class Balance { public static boolean balanced(string expr, String open, String close) { Stack<Character> st = new StackAsDynamicArray<>() ; for(int i=0; i < expr.length(); i=i+1) { char c = expr.charat(i); if(open.indexof(c) >= 0) st.push(c); else { int index = close.indexof(c) ; if(index >= 0( if(st.isempty() (st.pop()!= open.charat(index))) return false ; { return st.isempty();

public interface Queue<T> { /** * Checks if the queue is empty or not. * @return true if the queue is empty */ public boolean isempty(); /** * Removes an element from the head of the queue. * (FIFO order) * @return the next element in the queue. */ public T dequeue(); /** * Inserts an element into the queue. * @param elemment the element to be enqueued. */ public void enqueue(t element); /** * Returns the top element without removing it. * @return the next element in the queue. */ public T peek(); תזכורת: ממשק Queue

מימוש תור באמצעות מחסנית לרשותנו מבנה נתונים יחיד מסוג מחסנית. כיצד ניתן לממש את הממשק "תור" באמצעות מבנה זה ללא שימוש במבני נתונים נוספים? תשובה: לא ניתן לעשות זאת באמצעות לולאה ושימוש במחסנית יחידה, אך ניתן לבצע זאת באמצעות שתי מחסניות.

מימוש תור באמצעות מחסנית הרעיון המרכזי: בכל רגע בו המחסנית אינה ריקה, האיבר הראשון בתור, יהיה האיבר האחרון במחסנית. כלומר: ביצוע "pop" למחסנית שולף את האיבר הראשון בתור. עלינו לדאוג, שהכנסת איבר חדש לתור תשמר תכונה זו, העבודה יהיה במימוש השיטה."enqueue" לכן עיקר

4? מימוש תור באמצעות מחסנית רעיון המימוש )באמצעות שתי מחסניות(: מחסנית א' תכיל את איברי התור כסדרם, ביצוע pop ישלוף את האיברים בסדר המצופה מהתור )לפי סדר כניסתם לתור.)FIFO מחסנית ב' תשמש כמחסנית עזר והיא תהיה ריקה. כאשר נתבקש להכניס איבר חדש לתור :)enqueue( נעביר את תוכן מחסנית א' לתוך מחסנית ב'. נדחף את האיבר החדש למחסנית א' )הוא יהיה בתחתית המחסנית(. נחזיר חזרה את האיברים ממחסנית ב', למחסנית א'. 1 2 3 מחסנית ב' מחסנית א'

מימוש תור באמצעות מחסנית אך לרשותנו אובייקט מה עושים? יחיד מסוג מחסנית. תשובה: מחסנית הקריאות של,Java תשמש אותנו כ"מחסנית ב' ". כזכור, רקורסיה, מעניקה לנו מחסנית נוספת מתנה.

public class QueueAsStack<T> implements Queue<T> { מימוש תור באמצעות מחסנית private Stack<T> stack; public QueueAsStack() { stack = new StackAsDynamicArray<>();//implemented // in class public void enqueue(t element) { if(element == null) throw new IllegalArgumentException(); if(stack.isempty()) stack.push(element); else { T elementinstack = stack.pop(); enqueue(element); stack.push(elementinstack); public boolean isempty() { return stack.isempty(); public T dequeue() { if(stack.isempty()) throw new NoSuchElementException(); return stack.pop(); public T peek() { if(stack.isempty()) throw new NoSuchElementException(); return stack.peek(); //end of class QueueAsStack

מימוש תור באמצעות מחסנית if(stack.isempty()) stack.push(element); בדוגמא הבאה נכניס לתור את המספרים: 2 1, ו- 3. element = 1 enqueue(1) 1 מחסנית הקריאות של Java המחסנית שלרשותנו

מימוש תור באמצעות מחסנית else { T elementinstack = stack.pop(); enqueue(element); stack.push(elementinstack); כבר בתור( element = 2 eis = 1 Enqueue(2) 1( הכנסת 2

מימוש תור באמצעות מחסנית else { T elementinstack = stack.pop(); enqueue(element); stack.push(elementinstack); element = 2 Enqueue(2) element = 2 eis = 1 Enqueue(2)

מימוש תור באמצעות מחסנית if(stack.isempty()) stack.push(element); 2 element = 2 element = 2 Enqueue(2) element = 2 eis = 1 Enqueue(2)

מימוש תור באמצעות מחסנית else { T elementinstack = stack.pop(); enqueue(element); stack.push(elementinstack); element = 2 eis = 1 Enqueue(2) 1 2

מימוש תור באמצעות מחסנית else { T elementinstack = stack.pop(); enqueue(element); stack.push(elementinstack); ו- 2 בתור( element = 3 eis = 1 Enqueue(3) 1( הכנסת 3 2

מימוש תור באמצעות מחסנית else { T elementinstack = stack.pop(); enqueue(element); stack.push(elementinstack); element = 3 eis = 1 Enqueue(3) 2

מימוש תור באמצעות מחסנית else { T elementinstack = stack.pop(); enqueue(element); stack.push(elementinstack); element = 3 eis = 2 Enqueue(3) element = 3 eis = 1 Enqueue(3)

מימוש תור באמצעות מחסנית if(stack.isempty()) stack.push(element); 3 element = 3 Enqueue(3) element = 3 eis = 2 Enqueue(3) element = 3 eis = 1 Enqueue(3)

מימוש תור באמצעות מחסנית else { T elementinstack = stack.pop(); enqueue(element); stack.push(elementinstack); 2 3 element = 3 eis = 2 Enqueue(3) element = 3 eis = 1 Enqueue(3)

מימוש תור באמצעות מחסנית else { T elementinstack = stack.pop(); enqueue(element); stack.push(elementinstack); element = 3 eis = 1 Enqueue(3) 1 2 3

הפסקה

Memoization

צפרדע בהינתן ערך טבעי n, המייצג לוח משובץ בגודל n x n וצפרדע המצויה בפינתו השמאלית התחתונה. בכמה דרכים היא יכולה להגיע לפינה הימנית העליונה אם מותר לה לקפץ באופן הבא: או קפיצה אחת ימינה או שתי קפיצות ימינה או קפיצה אחת למעלה או שתי קפיצות למעלה? דוגמאות: עבור לוח בגודל 1, x 1 יש פתרון יחיד )כי היא כבר נמצאת בפינה הימנית העליונה(. עבור לוח בגודל 3, x 3 ישנן 14 דרכים.

צפרדע פתרון: public static int frog(int n){ return frog(n, n); private static int frog(int n, int m) { if(n == 1 && m == 1) //Frog has reached the top-right corner return 1; if(n < 1 m < 1) //Frog got lost return 0; return frog(n-1, m) + frog(n-2, m) + frog(n, m-1) + frog(n, m-2);

צפרדע: דוגמת ריצה עבור לוח בגודל 3: x 3 3 x 3 2 x 3 1 x 3 3 x 2 3 x 1 1 x 3 2 x 2 2 x 1 1 x 2 1 x 2 2 x 1

צפרדע התייעלות נרצה להימנע מביצוע חישובים שכבר חישבנו בעבר. נשתמש בשיטת הפתקאות (memoization) : נשמור במבנה נתונים מתאים )שמימדו כמס' המשתנים בבעיה( את תוצאות החישובים שכבר ביצענו. בהינתן קלט, נבדוק האם כבר חושב עבורו הפלט המתאים. אם כבר חושב, נחזיר את התוצאה שחושבה בעבר. אם עדיין לא חושב, נבצע את החישוב. לבסוף, נשמור את התוצאה במקום המתאים במבנה הנתונים שלנו.

צפרדע memoization איך נראית טבלת ה?memoization מה הגודל שלה? אמנם לבעיה המקורית יש פרמטר אחד, n, אך בכל שלב אנחנו שואלים על שני דברים: > m <, n :0 < n, m n לכן גודל הטבלה יהיה: 1) + (n.(n + 1) n m 0 1 2 0 1 2 1 1 1 2? frog(1, 2) + frog(2, 1) לדוגמה עבור :frogmemo(2)

public static int frogmemo(int n) { int[][] memo = new int[n+1][n+1]; צפרדע memoization for(int[] row : memo) //initialize memoization table for(int i = 0; i < row.length; i = i + 1) row[i] = -1; return frogmemo(n, n, memo);

צפרדע memoization private static int frogmemo(int n, int m, int[][] memo) { if(n == 1 & m == 1) //Frog has reached the top-right corner return 1; if(n < 1 m < 1) //Frog got lost return 0; if (memo[n][m] == -1){ memo[n][m] = frogmemo(n-1, m, memo) + frogmemo(n-2, m, memo) + frogmemo(n, m-1, memo) + frogmemo(n, m-2, memo); memo[m][n] = memo[n][m]; return memo[n][m];

בעיית העודף בהינתן ערך N, נרצה להחזיר עודף של N שקלים. יש לנו אספקה אינסופית של מטבעות m.weights={w 1 w, 2 w,, בכמה דרכים שונות נוכל להחזיר עודף של N שקלים? )כאשר סדר המטבעות לא משנה( 4 לדוגמה: עבור 4=N,,weights={1,2,3 {1,1,1,1, {2,1,1, {2,2, {3,1 לכן הפלט הנכון הוא 4. יש פתרונות אפשריים: שימו לב ש = 1 1 w,אחרת לא נוכל לתת עודף בחלק מהמקרים.

בעיית העודף כיצד נוכל לפתור את הבעיה באופן רקורסיבי? מה יהיה תנאי העצירה? אילו בעיות קטנות יותר נרצה לפתור "במקום" הבעיה הגדולה? כיצד נשלב בין הפתרונות לתתי הבעיות הקטנות?

בעיית העודף public static int count(int[] weights, int n) { return count(weights, n, weights.length - 1); private static int count(int[] weights, int n, int i) { // If n is 0 then there is 1 solution (do not include any coin) if(n == 0) return 1; weights { 1 2 3 // If n is less than 0 or there are no coins left, then no solution exists if(n < 0 i < 0) return 0; i // count is sum of solutions (1) excluding weights[i] (2) including weights[i] return count(weights, n, i - 1) + count(weights, n - weights[i], i);

בעיית העודף:דוגמת ריצה

בעיית העודף memoization איך נראת טבלת ה?memoization מה הגודל שלה? n i 0 1 0 1 2 1 1 1 1 2? הטבלה מחזיקה מופעים של הבעיה <i,n> : 0 n N; 0 i weights.length-1 לכן גודל הטבלה (N+1)*weights.length לדוגמה עבור (2 :count({1,2, count(weights, i - 1, n) + count(weights, i, n - weights[i])

public static int countmemo(int[] weights, int n ) { int[][] memo = new int[n+1][weights.length]; for(int[] row : memo) //initialize memoization table for(int i = 0; i < row.length; i = i + 1) row[i] = -1; return countmemo(weights, weights.length - 1, n, memo); בעיית העודף memoization private static int countmemo(int[] weights, int i, int n,int[][] memo) { if(n == 0) // If n is 0 then there is 1 solution (do not include any coin) return 1; // If n is less than 0 or there are no coins left, then no solution exists if(n < 0 i < 0) return 0; if(memo[n][i] == -1) // count is sum of solutions (1) excluding weights[i], (2) including weights[i] memo[n][i] = countmemo(weights, i - 1, n, memo) + countmemo(weights, i, n - weights[i], memo); return memo[n][i];

סיכום ומשימות תרגלנו: מחסנית memoization