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

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

Slide 1

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

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

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

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

תרגול 1

Slide 1

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

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

תרגול 1

מקביליות

פקולטה: מחלקה: שם הקורס: קוד הקורס: מדעי הטבע מדעי המחשב ומתמטיקה מתמטיקה בדידה תאריך בחינה: _ 07/07/2015 משך הבחינה: 3 שעות סמ' _ב' מועד

תכנון אלגוריתמים עבודת בית 4: תכנון אלגוריתמים תאריך הגשה: 02: , בצהריים,תא מספר 66 בקומת כניסה של בניין 003 מתרגל אחראי: אורי 0

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

הטכניון מכון טכנולוגי לישראל אלגוריתמים 1 )443432( סמסטר חורף הפקולטה למדעי המחשב תרגול 9 מסלולים קלים ביותר תרגיל APSP - 1 עד כה דנו באלגור

תרגול 1

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

Slide 1

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

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

Slide 1

Microsoft Word - ExamA_Final_Solution.docx

Algorithms Tirgul 1

לנץ קרן מרצה: תכנותמונחהעצמים) ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחי

תרגול 1

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

מקביליות

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

PowerPoint Presentation

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

PowerPoint Presentation

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

יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן

Slide 1

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

PowerPoint Presentation

PowerPoint Presentation

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

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

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

תכנות מונחה עצמים א' – תש"ע

מבנים בדידים וקומבינטוריקה סמסטר אביב תשע"ט מספרי רמזי תרגול 11 הגדרה: (t R = R(s, הוא המספר הטבעי הקטן ביותר כך שבכל צביעה של צלעות הגרף וכחול(, קיים

Microsoft Word - pitaron222Java_2007.doc

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

PowerPoint Presentation

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

Microsoft PowerPoint - rec3.ppt

Microsoft PowerPoint - 10_threads.ppt

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

מועד: א בחינה סופית במתמטיקה דיסקרטית משך הבחינה: 2 1 שעות מרצה: פרופ' תאופיק מנסור תאריך: סמסטר: א תשע"ח m 2 הוראות לנבחן: )1( הבחינה מו

Microsoft Word - עבודת פסח לכיתה י 5 יחל.doc

PowerPoint Presentation

PowerPoint Presentation

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

Microsoft Word - tutorial Dynamic Programming _Jun_-05.doc

Microsoft Word - c_SimA_MoedB2005.doc

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

תשובות מלאות לבחינת הבגרות במתמטיקה מועד ג' תשע"ד, מיום 0/8/0610 שאלונים: 313, מוצע על ידי בית הספר לבגרות ולפסיכומטרי של אבירם פלדמן שאלה מספר

PowerPoint Presentation

תרגול מס' 7 – חזרה על MST ואלגוריתם Dijkstra

Microsoft Word - Questions Booklet Spring 2009

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

PowerPoint Presentation

מקביליות

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

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

1

PowerPoint Presentation

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

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

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

Microsoft Word a_moed_a_solution.doc

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

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

1 בגרות עח יולי 18 מועד קיץ ב שאלון x b 2 2 y x 6x שיעור ה- א x לכן, של קדקוד הפרבולה, ו-, מתקבל על ידי הנוסחה a. C(3, 9) ובהתאם, y. (3, 9) 2 C

Tutorial 11

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

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

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

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

תוכן העניינים: פרק צמצומים ומימושים של פונקציות בוליאניות... 2 צמצומים של פונקציות באמצעות מפת קרנו:...2 שאלות:... 2 תשובות סופיות:... 4 צמצום

יחידה 8: שיקוף, הרחבה וכיווץ של פרבולות שיעור 1. שיקוף בציר x תלמידים התבקשו לשרטט פרבולה שכל הערכים שלה שליליים. y יואב ש רטט כך: y תומר אמר: אי-אפשר

תיק משימטיקה מגרף הנגזרת לגרף הפונקציה להנגשה פרטנית נא לפנות: כל הזכויות שמורות

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

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

PowerPoint Presentation

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

Slide 1

Slide 1

Microsoft PowerPoint - lec10.ppt

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

מצגת של PowerPoint

PowerPoint Presentation

תמליל:

מבוא למדעי המחשב גרפים 1

תוכן עניינים סיכום ביניים

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

תוכן עניינים סיכום ביניים גרפים

גרפים הגדרה אינטואיטיבית קבוצה של קדקודים nodes) או (vertices חלקם מקושרים זה לזה בעזרת קשתות (edges) הקשתות יכול להיות מכוונות או לא-מכוונות גרף בו הקשתות מכוונות נקרא גרף מכוון. גרף בו הקשתות לא מכוונות נקרא גרף לא מכוון בגרף לא מכוון לקשתות אין כיוון בגרף לא מכוון אין קשתות עצמיות

גרפים הגדרה פורמלית גרף הוא זוג סדור (VVVVV),GG = כאשר 0 VV היא קבוצה של קדקודים EE VV XX VV היא קבוצה של קשתות בין הקדקודים הנ"ל דוגמה VV = {0,1,2,3 EE = { 0,3, 1,2, 3,1,{2,3 (nn 1) לשם פשטות תמיד נניח שבגרף בן nn קדקודים הקדקודים ממוספרים בין 0 ל-

גרפים כמה מושגים 0 דרגה של קדקוד מספר הקשתות שנוגעות בקדקוד למשל, = 2 dddddddddddd(1) שכנים של קדקוד הקדקודים שבינם לבין הקדקוד עוברת קשת למשל, = 2,3 1 nnnnnnnnhbbbbbbbb מסלול בגרף רשימה של קדקודים שבין כל שניים עוקבים עוברת קשת למשל, > 1,2,3,0,3,1 <

תוכן עניינים סיכום ביניים גרפים קדקוד וקשת של גרף

המחלקה Edge public class Edge { public final int left; public final int right; public Edge(int left, int right) { this.left = left; this.right = right; קדקוד מיוצג פשוט על ידי מספר שלם (אובייקט מהמחלקה (Integer קשת תיוצג באמצעות המחלקה edge שמשמאל public String tostring() { return {" + left + ", " + right + ";

תוכן עניינים סיכום ביניים גרפים קדקוד וקשת של גרף הממשק Graph

public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset(); הממשק Graph

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

ייצוג גרפים 0 שתי שיטות נפוצות (Adjacency Lists) (Adjacency Matrix) רשימות שכנים מטריצת שכנים יש שיטות נוספות Adjacency Lists Adjacency Matrix 0 1 2 3 0 3 0 false false false true 1 2 2 3 1 3 1 2 false false true true false true false true 3 0 2 1 3 true true true false

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

מחלקות אבסטרקטיות בעיה אנחנו רוצים לבנות מחלקות לגרפים בשתי צורות הייצוג שראינו מחלקה בשם GraphAsAdjacencyLists ומחלקה בשם GraphAsAdjacencyMatrix על פניו נראה שיש ביניהן (למרות השוני בייצוג) הרבה מן המשותף למשל, השיטה שמחזירה את קבוצת השכנים של קדקוד היינו רוצים לממש את השיטות האלה פעם אחת בשביל שתי המחלקות צרה צרורה על פניו לא נראה שיש בין המחלקות קשרים היררכיים אז איפה נממש? לא זו מקרה פרטי של זו ולא זו מקרה פרטי של זו

מחלקות אבסטרקטיות פתרון בעיה נגדיר מעליהן מחלקה שתיהן ירשו אותה ואת הקוד המשותף נממש במחלקה שמעליהן אנחנו רוצים לבנות מחלקות לגרפים בשתי צורות הייצוג שראינו מחלקה בשם GraphAsAdjacencyLists ומחלקה בשם GraphAsAdjacencyMatrix על פניו נראה שיש ביניהן הרבה מן המשותף (למרות השוני בייצוג) למשל, השיטה שמחזירה את מספר השכנים של קדקוד היינו רוצים לממש את השיטות האלה פעם אחת בשביל שתי המחלקות צרה צרורה על פניו לא נראה שיש בין המחלקות קשרים היררכיים אז איפה נממש? לא זו מקרה פרטי של זו ולא זו מקרה פרטי של זו

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

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

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

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

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

שדה ובנאי המחלקה AbstractGraph public abstract class AbstractGraph implements Graph { protected final int nvertices; public AbstractGraph(int nvertices) { this.nvertices = nvertices; public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset();

שיטות המחלקה AbstractGraph protected final int nvertices;... public int numberofvertices() { return nvertices; // Default implementation public int numberofedges() { return edgeset().size(); // Default implementation public int degree(int v) { return neighborsof(v).size(); public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset();

שיטות המחלקה AbstractGraph protected final int nvertices;... // Default implementation public Set<Integer> neighborsof(int v) { Set<Integer> adj = new SetAsLinkedList<>(); for (int u = 0; u < nvertices; u = u + 1) if (u!= v && containsedge(u, v)) adj.add(u); return adj; containsedge זורק חריגה במקרה ש- u=v (נראה בהמשך) public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset(); c

שיטות המחלקה AbstractGraph protected final int nvertices;... // Default implementation public Set<Edge> edgeset() { Set<Edge> edges = new SetAsLinkedList<>(); for (int u = 0; u < nvertices - 1; u = u + 1) for (int v = u + 1; v < nvertices; v = v + 1) if (containsedge(u, v)) edges.add(new Edge(u, v)); return edges; public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset();

שיטות המחלקה AbstractGraph protected final int nvertices;... public String tostring() { return "G=([" + 0 + ".. " + (nvertices - 1) + "], " + edgeset() + ")"; public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset();

שיטות המחלקה AbstractGraph protected final int nvertices;... public boolean equals(object x) { if (!(x instanceof Graph)) return false; Graph other = (Graph) x; return this.nvertices == other.numberofvertices() && this.edgeset().equals(other.edgeset()); public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset();

שיטות המחלקה AbstractGraph protected final int nvertices;... public abstract boolean containsedge(int u, int v); public abstract void addedge(int u, int v); public abstract void removeedge(int u, int v); לא חובה להכריז, הן כבר מוכרזות בממשק public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset();

שיטות המחלקה AbstractGraph protected final int nvertices;... protected boolean edgecheck(int u, int v) { return u >= 0 && u < nvertices && v >= 0 && v < nvertices && u!= v; public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset();

תוכן עניינים סיכום ביניים גרפים קדקוד וקשת של גרף הממשק Graph ייצוג של גרפים מחלקות אבסטרקטיות המחלקה AbstractGraph המחלקה GraphAsAdjacencyMatrix

שדה המחלקה GraphAsAdjacencyMatrix ובנאי פשוט public class GraphAsAdjacencyMatrix extends AbstractGraph { private boolean[][] edges; public GraphAsAdjacencyMatrix(int nvertices) { super(nvertices); edges = new boolean[nvertices][nvertices]; public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset();

המחלקה GraphAsAdjacencyMatrix בנאי מעתיק private boolean[][] edges;... public GraphAsAdjacencyMatrix(Graph other) { this(other.numberofvertices()); Set<Edge> otheredges = other.edgeset(); for (Edge e : otheredges) addedge(e.left, e.right); public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset();

שיטות המחלקה GraphAsAdjacencyMatrix private boolean[][] edges;... public boolean containsedge(int u, int v) { if (!edgecheck(u, v)) throw new IllegalArgumentException(); return edges[u][v]; public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset();

שיטות המחלקה GraphAsAdjacencyMatrix private boolean[][] edges;... public void addedge(int u, int v) { if (!edgecheck(u, v)) throw new IllegalArgumentException(); edges[u][v] = true; edges[v][u] = true; public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset();

שיטות המחלקה GraphAsAdjacencyMatrix private boolean[][] edges;... public void removeedge(int u, int v) { if (!edgecheck(u, v)) throw new IllegalArgumentException(); edges[u][v] = false; edges[v][u] = false; public interface Graph { int numberofvertices(); int numberofedges(); boolean containsedge(int u, int v); void addedge(int u, int v); void removeedge(int u, int v); int degree(int u); Set<Integer> neighborsof(int u); Set<Edge> edgeset();

תוכן עניינים סיכום ביניים גרפים קדקוד וקשת של גרף הממשק Graph ייצוג של גרפים מחלקות אבסטרקטיות המחלקה AbstractGraph המחלקה GraphAsAdjacencyMatrix המחלקה GraphAlgorithm

המחלקה האבסטרקטית GraphAlgorithm כדי לפעול על גרפים נגדיר מחלקה אבסטרקטית שתשמש כאופרטור של גרפים הבנאי מקבל כפרמטר את הגרף האלגוריתם ממומש על ידי דריסה של השיטה האבסטרקטית runalgorithm מחלקה אחת יכולה לממש אלגוריתם לבדיקת קשירות של גרף מחלקה אחרת יכולה לממש אלגוריתם שבודק אם יש מעגלים בגרף public abstract class GraphAlgorithm { protected Graph g; public GraphAlgorithm(Graph g) { this.g = g; public abstract Object runalgorithm();

המחלקה EvenDegreesAlgorithm מרחיבה את GraphAlgorithm ומגדירה אובייקט שבודק אם הדרגה של גרף נתון היא זוגית (דרגת כל הקדקודים בגרף זוגית) public class EvenDegreesAlgorithm extends GraphAlgorithm { public EvenDegreesAlgorithm(Graph g) { super(g); public Object runalgorithm() { for (int u = 0; u < g.numberofvertices(); u = u + 1) if (g.degree(u) % 2!= 0) return false; return true;

תוכן עניינים סיכום ביניים גרפים קדקוד וקשת של גרף הממשק Graph ייצוג של גרפים מחלקות אבסטרקטיות המחלקה AbstractGraph המחלקה GraphAsAdjacencyMatrix המחלקה GraphAlgorithm קשירות

קשירות נאמר שגרף הוא קשיר אם בין כל זוג קדקודים בגרף עובר מסלול לא קשיר קשיר 0 6 0 1 2 1 2 7 3 4 5 3 4 5

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

בדיקת קשירות של גרף 0 1 2 3 7 4 5 6 נתחיל את הבדיקה מקדקוד כלשהו (נניח קדקוד 0) ואז ברקורסיה בסיום נסמן שביקרנו בו נסרוק את שכניו עבור כל שכן שעדיין לא ביקרנו בו (לא סומן) נתחיל ברקורסיה בדיקה חדשה מהשכן הזה אם כל הקדקודים סומנו הגרף קשיר אחרת הגרף לא קשיר

תוכן עניינים סיכום ביניים גרפים קדקוד וקשת של גרף הממשק Graph ייצוג של גרפים מחלקות אבסטרקטיות המחלקה AbstractGraph המחלקה GraphAsAdjacencyMatrix המחלקה GraphAlgorithm קשירות המחלקה ConnectivityAlgorithm

private boolean isreachedall(boolean[] visited) { for (boolean isvisited : visited) if (!isvisited) return false; return true; המחלקה ConnectivityAlgorithm מרחיבה את GraphAlgorithm ומגדירה אובייקט שבודק אם גרף נתון הוא גרף קשיר public class ConnectivityAlgorithm extends GraphAlgorithm { public ConnectivityAlgorithm(Graph g) { super(g); public Object runalgorithm() { boolean[] visited = new boolean[g.numberofvertices()]; dfs(0, visited); return isreachedall(visited); private void dfs(int u, boolean[] visited) { visited[u] = true; for (Integer v : g.neighborsof(u)) if (!visited[v]) dfs(v, visited);

דוגמת הרצה public static void main(string[] args) { Graph g = new GraphAsAdjacencyMatrix(10); for (int u = 0; u < g.numberofvertices(); u = u + 1) g.addedge(u, (u + 1) % g.numberofvertices()); System.out.println(g); GraphAlgorithm ca = new ConnectivityAlgorithm(g); System.out.println(ca.runAlgorithm()); // true g.removeedge(0, 1); System.out.println(ca.runAlgorithm()); // true g.removeedge(4, 5); System.out.println(ca.runAlgorithm()); // false

תוכן עניינים סיכום ביניים גרפים קדקוד וקשת של גרף הממשק Graph ייצוג של גרפים מחלקות אבסטרקטיות המחלקה AbstractGraph המחלקה GraphAsAdjacencyMatrix המחלקה GraphAlgorithm קשירות המחלקה ConnectivityAlgorithm המבנים שראינו

המבנים שראינו ושניראה בהמשך interface: Graph implements GraphAlgorithm extends AbstractGraph EvenDegreesAlgorithm extends ConnectivityAlgorothm GraphAsAdjacencyMatrix EulerPathAlgorithm GraphAsAdjacencyLists