null

‫מבוא כללי לתכנות (ולמדעי המחשב)‬
‫‪1843-0310‬‬
‫מרצה‪ :‬אמיר רובינשטיין‬
‫אוניברסיטת תל אביב‬
‫סמסטר א' ‪2014-5‬‬
‫שיעור ‪10‬‬
‫‪ .1‬תורת הגרפים ‪ -‬המשך‬
‫‬‫‪-‬‬
‫‪.2‬‬
‫צביעת מפות‬
‫בעיות נוספות‬
‫הצצה אל לב התאוריה של מדעי המחשב – מבוא לסיבוכיות‬
‫‪-‬‬
‫שאלת מיליון הדולר‪P vs. NP :‬‬
‫תזכורת‬
‫מונחים בגרפים‬
‫כמה הגדרות לגרף לא מכוון‪:‬‬
‫‪a‬‬
‫שכנים (‪ – )neighbors‬שני צמתים המחוברים בקשת‪.‬‬
‫‪c‬‬
‫דרגה (‪ )degree‬של צומת – מספר השכנים של צומת‪.‬‬
‫‪b‬‬
‫סימון‪ :‬הדרגה של צומת ‪ v‬מסומנת )‪deg(v‬‬
‫‪d‬‬
‫הערה‪ :‬נהוג שלצורך חישוב דרגה קשת עצמית נספרת פעמיים‪.‬‬
‫מסלול (‪ )path‬בגרף מצומת ‪ v‬לצומת ‪ – u‬סדרת צמתים‪ ,‬הראשון בהם הוא ‪ v‬והאחרון ‪,u‬‬
‫כאשר בין כל שני צמתים סמוכים בסדרה יש קשת‪.‬‬
‫מעגל (‪ )cycle‬בגרף הוא מקרה פרטי של מסלול‪ ,‬המתחיל ומסתיים באותו צומת‪.‬‬
‫גרף קשיר (‪ - )connected‬גרף שבו קיים מסלול מכל צומת לכל צומת‪.‬‬
‫‪a‬‬
‫‪+1‬‬
‫גרף ממושקל (‪ – (weighted‬גרף שבו לקשתות מוצמדים ערכים‪,‬‬
‫‪c‬‬
‫‪-2‬‬
‫‪-1‬‬
‫‪b‬‬
‫בד"כ מספריים‪ ,‬הנקראים משקלים (מה הם יכולים לייצג?)‬
‫‪d‬‬
‫‪2‬‬
‫תזכורת‬
‫שבעת הגשרים של ‪Königsberg‬‬
‫• האם ניתן לטייל בעיר ולחצות כל גשר בדיוק פעם אחת?‬
‫• מה הפרטים החשובים כאן?‬
‫האם יש בגרף מסלול שעובר בכל‬
‫קשת בדיוק פעם אחת?‬
‫בנינו מודל (‪ )model‬לבעיה‪ ,‬המייצג‬
‫אותה בצורה מופשטת‪.‬‬
‫‪3‬‬
‫תזכורת‬
‫מסלול ‪ /‬מעגל אוילר‬
‫• הגדרה‪ :‬מסלול אוילר בגרף הוא מסלול שעובר בכל קשת בדיוק פעם אחת‪.‬‬
‫מהו מעגל אוילר?‬
‫• השאלה שלנו אם כן הפכה להיות‪ :‬מתי גרף מכיל מסלול ‪ /‬מעגל אוילר?‬
‫• משפט (אוילר‪:)1736 ,‬‬
‫גרף קשיר מכיל‪:‬‬
‫ מסלול אוילר‪ ,‬אם כל צמתיו למעט בדיוק ‪ 2‬בעלי דרגה זוגית‪.‬‬‫‪ -‬מעגל אוילר אם כל צמתיו בעלי דרגה זוגית‪.‬‬
‫האם בגרף זה יש מסלול ‪ /‬מעגל אוילר?‬
‫‪4‬‬
‫תזכורת‬
‫מסלול ‪ /‬מעגל אוילר ‪ -‬פייתון‬
‫‪def euler(G):‬‬
‫‪n = len(G[0]) #number of nodes‬‬
‫אלגוריתם לבדיקת קיום מסלול ‪ /‬מעגל אוילר*‬
‫‪ .1‬מונה דרגות אי‪-‬זוגיות = ‪0‬‬
‫‪odd_deg = 0‬‬
‫‪for i in range(n):‬‬
‫‪ .2‬לכל שורה במטריצה‪:‬‬
‫‪ 2.1‬נספור כמה שכנים יש בשורה‬
‫]‪deg = sum(G[i]) #how many edges 'touch' G[i‬‬
‫‪if deg%2 == 1:‬‬
‫‪ 2.2‬אם הכמות היא אי‪-‬זוגית‪:‬‬
‫‪ 2.2.1‬נגדיל מונה ב‪1 -‬‬
‫‪odd_deg = odd_deg +1‬‬
‫‪if odd_deg==0:‬‬
‫)"‪print(“Euler cycle‬‬
‫‪elif odd_deg==2:‬‬
‫)"‪print(“Euler path‬‬
‫‪else:‬‬
‫)"‪print("no Euler path‬‬
‫‪ .3‬אם מונה == ‪:0‬‬
‫‪ 3.1‬נדפיס "מעגל אוילר"‬
‫‪ .4‬אחרת אם הוא בדיוק ‪:2‬‬
‫‪ 4.1‬נדפיס "מסלול אוילר"‬
‫‪ .5‬אחרת‪:‬‬
‫‪ 5.1‬נדפיס "אין מסלול אוילר"‬
‫* בהנחה שהגרף קשיר‪ ,‬ושאין בו קשתות עצמיות (מצומת לעצמו)‬
‫‪5‬‬
‫תזכורת‬
‫‪House of Santa‬‬
‫• האם תוכלו לצייר את הבית מבלי להרים את העיפרון?‬
‫האם יש בגרף מסלול אוילר?‬
‫• הפשטה מאפשרת לראות דמיון בין בעיות !‬
‫‪6‬‬
‫תזכורת‬
‫דוגמה לשני סוגי גרפים (יש עוד רבים)‬
‫• גרף דו‪-‬צדדי (‪)Bipartite‬‬
‫‪V2‬‬
‫‪V1‬‬
‫• קליקה ‪ /‬גרף מלא (‪)Clique /complete graph‬‬
‫‪7‬‬
‫כמות קשתות בגרף לא מכוון‬
‫תרגיל‪:‬‬
‫כמה קשתות יש בגרף מלא (קליקה) עם ‪ n‬צמתים?‬
‫שימו לב כי זהו מספר הקשתות המקסימלי בגרף לא מכוון (לא כולל קשתות עצמיות)‪.‬‬
‫‪8‬‬
‫צביעת מפות‬
‫‪1‬‬
‫להלן שתי מפות‪.‬‬
‫נגדיר מפה כחיתוך המישור לאזורים רציפים‪.‬‬
‫נגדיר צביעה חוקית של מפה‪:‬‬
‫צביעה של כל מדינה בצבע אחד‪ ,‬כך שאין‬
‫שתי מדינות גובלות עם אותו צבע‪.‬‬
‫‪2‬‬
‫שאלות‪:‬‬
‫‪ .1‬מהו מספר הצבעים המינימלי הדרוש‬
‫לצביעה חוקית של כל אחת מהמפות?‬
‫‪ .2‬דוגמה למפה בה דרושים לפחות ‪ 5‬צבעים?‬
‫‪9‬‬
‫מתוך ‪http://csunplugged.org ,CSUnplugged‬‬
‫אתר בעברית‪ :‬חפשו "מדעי המחשב ללא מחשב"‬
‫משפט ‪ 4‬הצבעים (‪)4 color theorem‬‬
‫תוצאה מאוד מפורסמת (ומפתיעה?)‪:‬‬
‫משפט ארבעת הצבעים‪ :‬כל מפה (של אזורים רציפים) ניתנת לצביעה ב‪ 4 -‬צבעים‪.‬‬
‫בשנת ‪ 1852‬צעיר בריטי בשם פרנסיס גאתרי ניסח זאת כהשערה‪.‬‬
‫במשך למעלה מ‪ 120 -‬שנה טובי המתמטיקאים בעולם ניסו להוכיח את השערת ארבעת הצבעים ללא הצלחה‪.‬‬
‫המשפט הוכח בשנת ‪ .1976‬ההוכחה מראה שניתן לסווג כל מפה לאחת מבערך אלף סוגי מפות‪ .‬אחד מצעדי‬
‫ההוכחה כולל בחינת כאלף סוגים אלו באמצעות מחשב‪.‬‬
‫ההוכחה שנויה במחלוקת מבחינה פילוסופית‪ .‬מדוע? מה דעתכם?‬
‫הערה‪ :‬מציאת צביעה ב‪ 4 -‬צבעים אינה תמיד קלה (אבל כאמור תמיד קיימת)‪.‬‬
‫‪10‬‬
‫מפות כגרפים‬
‫כל מפה ניתנת לייצוג באמצעות גרף‪.‬‬
‫צמתים = המדינות ‪ /‬האזורים‬
‫קשתות = בין צמתים שמייצגים שתי מדינות גובלות תהיה קשת‬
‫שימו לב‪ :‬כל מפה ניתנת לייצוג כגרף‪ ,‬אך ההיפך לא נכון (מדוע?)‪.‬‬
‫הערה‪ :‬אם מגבילים את הגרף כך שניתן לצייר אותו בלי חיתוכי קשתות‪ ,‬אז שני‬
‫הכיוונים נכונים (כל מפה היא גרף ולהיפך)‪.‬‬
‫גרפים כאלו נקראים גרפים מישוריים (‪.)planar graphs‬‬
‫נתמקד בשאלה הכללית יותר הבאה‪:‬‬
‫‪11‬‬
‫בהינתן גרף ‪ ,G‬האם ניתן לצבוע אותו באמצעות ‪ k‬צבעים בלבד?‬
‫צביעת גרפים – ‪ 2‬צבעים‬
‫שאלה‪ :‬מתי גרף ניתן לצביעה ב‪ 2 -‬צבעים בלבד?‬
‫גרף כזה נקרא ‪-2‬צביע (‪.)2-colorable‬‬
‫כן ‪-2‬צביע‬
‫לא ‪-2‬צביע‬
‫רמז‪ :‬האלגוריתם הבא בודק אם גרף הוא ‪-2‬צביע‪:‬‬
‫‪ .1‬נצבע צומת שרירותי כלשהו בצבע אדום‪.‬‬
‫‪ .2‬נצבע את כל שכניו בכחול‪ ,‬את כל שכני שכניו שוב באדום‪ ,‬וכך הלאה‪.‬‬
‫‪ .3‬אם בשלב כלשהו אנו נתקלים בשכן שכבר צבוע באותו הצבע‪ ,‬נכריז‬
‫"לא ‪-2‬צביע"‪.‬‬
‫‪ .4‬אחרת נכריז "כן ‪ 2‬צביע"‪.‬‬
‫‪12‬‬
‫‪-2‬צביע?‬
‫‪Petersen graph‬‬
‫צביעת גרפים – ‪ 2‬צבעים‬
‫שאלה‪ :‬מתי גרף ניתן לצביעה ב‪ 2 -‬צבעים בלבד?‬
‫גרף כזה נקרא ‪-2‬צביע (‪.)2-colorable‬‬
‫לא ‪-2‬צביע‬
‫כן ‪-2‬צביע‬
‫משפט‪ :‬גרף ניתן לצביעה ב‪ 2 -‬צבעים אם ורק אם* אין בו מעגלים באורך איזוגי‪.‬‬
‫זה גם בדיוק התנאי להיותו של גרף דו‪-‬צדדי (‪.)Bipartite‬‬
‫שאלה‪ :‬מה סיבוכיות הזמן של בדיקה האם גרף בעל ‪ n‬צמתים הוא ‪-2‬צביע?‬
‫האלגוריתם שהוצג קודם עובר על כל הצמתים (‪ )n‬וכל הקשתות (פחות מ‪ )½n2 -‬פעם‬
‫אחת‪ .‬לכן סה"כ אלגוריתם ריבועי‪.‬‬
‫‪13‬‬
‫* כלומר זהו תנאי מספיק והכרחי‪.‬‬
‫אם הוא מתקיים ‪ ‬הגרף ‪-2‬צביע‪ .‬אם הגרף ‪ 2‬צביע ‪ ‬התנאי מתקיים‪.‬‬
‫‪ 3‬צבעים?‬
‫שאלה‪ :‬מתי ‪ 3‬צבעים יספיקו לצביעה חוקית של גרף?‬
‫אלגוריתם ‪:Brute force‬‬
‫כל צומת יכול לקבל אחד משלושה צבעים‪.‬‬
‫בסה"כ יש ‪ 3n‬דרכים לצבוע גרף עם ‪ n‬צמתים ב‪ 3 -‬צבעים‪.‬‬
‫פשוט נעבור על כולן ונבדוק אם יש אחת חוקית‪.‬‬
‫חדשות רעות ‪:‬‬
‫לא ידוע כיום אלגוריתם שעונה על שאלה זו‪ ,‬ושאינו בעל סיבוכיות אקספוננציאלית*‪.‬‬
‫כלומר לא ידוע אלגוריתם פולינומיאלי לבעיה זו‪.‬‬
‫למעשה‪ ,‬הדבר נכון לכל מספר צבעים ‪!! k>2‬‬
‫נחזור לזה בהמשך‪.‬‬
‫‪14‬‬
‫* אם כי יש אלגוריתמים אקספוננציאליים יעילים יותר מזה שמופיע למעלה‪.‬‬
‫עוד בעיה מפורסמת‪ :‬איזומורפיזם בגרפים‬
‫• בעיית הגרפים האיזומורפיים (‪ :)isomorphic graphs‬בהינתן שני גרפים‪ ,‬האם הם‬
‫בעצם אותו גרף בחילוף שמות הצמתים?‬
‫‪ax‬‬
‫‪bw‬‬
‫‪cz‬‬
‫‪dy‬‬
‫‪y‬‬
‫‪x‬‬
‫‪b‬‬
‫‪a‬‬
‫‪w‬‬
‫‪z‬‬
‫‪d‬‬
‫‪c‬‬
‫‪x‬‬
‫‪a‬‬
‫‪y‬‬
‫‪v‬‬
‫‪e‬‬
‫???‬
‫‪b‬‬
‫‪c‬‬
‫‪z‬‬
‫‪u‬‬
‫‪w‬‬
‫‪f‬‬
‫‪d‬‬
‫‪image from: http://dx.doi.org/10.1016/j.pbiomolbio.2012.05.007‬‬
‫• גם כאן החדשות רעות ‪ ...‬לא ידוע אלגוריתם פולינומיאלי שעונה על שאלה זו‪.‬‬
‫• סיבוכיות אלגוריתם בגישת ‪?brute force‬‬
‫‪15‬‬
‫בעיות מפורסמות נוספות בתורת הגרפים‬
‫• בעיית המסלול הקצר (‪ :)shortest path‬מציאת מסלול בין שני צמתים‪ ,‬כך שמספר הקשתות בו‬
‫(או סכום המשקלים אם יש) מינימלי‪.‬‬
‫• בעיית הזרימה המקסימלית (‪ :)maximal flow‬מציאת זרימה חוקית מ‪ )source( s -‬ל‪)target( t -‬‬
‫שערכה מקסימלי (המשקלים – קיבולות זרימה)‪.‬‬
‫• בעיית העץ הפורש המינימלי (‪ :)minimum spanning tree‬מציאת קבוצת קשתות מינימלית‬
‫שמחברת את כל הצמתים‪ ,‬מבלי שייווצרו מעגלים‪.‬‬
‫לכל אלו יש גרסאות רבות‪ ,‬ואלגוריתמים יעילים (פולינומיאליים) ‪‬‬
‫‪16‬‬
‫הצצה אל לב התיאוריה של מדעי‬
‫המחשב‪:‬‬
‫מבוא לתורת הסיבוכיות‬
‫‪17‬‬
‫מצבי ידע ולמידה‬
‫"קושי של בעיה" או "קושי חישובי" הוא מהרעיונות הבסיסים והמרכזיים במדעי המחשב‪.‬‬
‫אחת ההגדרות של למידה היא מעבר של בעיה לדרגת קושי נמוכה יותר‪.‬‬
‫? = ‪7*8‬‬
‫בעיה קשה‬
‫‪18‬‬
‫בעיה קלה‬
‫בעיה טריוויאלית‬
‫מצבי ידע ולמידה‬
‫דרך הסתכלות נוספת היא מנקודת מבט של סך הידע שנצבר (לפחות על פי הידוע)‪.‬‬
‫המחקר המדעי מנסה להקטין דרגת קושי של בעיות‪.‬‬
‫בעיה קשה**‬
‫‪x7 + 2x4 - 7x + 4 = 0‬‬
‫?=‪x‬‬
‫‪19‬‬
‫בעיה קלה*‬
‫‪x2 + 2x - 7 = 0‬‬
‫?=‪x‬‬
‫בעיה טריוויאלית‬
‫‪x=3+0‬‬
‫?=‪x‬‬
‫* יש דרך יעילה לפתור כל משוואה ריבועית (יש נוסחה)‪.‬‬
‫** לא ידועה דרך כללית לפתור משוואות ממעלה ‪ ,7‬למעט מקרים ספציפיים‪.‬‬
‫קשה אבל קל לאימות‬
‫יש בעיות קשות‪ ,‬שמקיימות תכונה מעניינת‪:‬‬
‫אם נקבל לידנו פתרון חוקי‪ ,‬אימות הפתרון (‪ )verification‬הוא קל‪.‬‬
‫בעיה קשה אבל קלה לאימות‬
‫‪x7 + 2x4 - 7x + 4 = 0‬‬
‫?=‪x‬‬
‫בעיה זו קלה לאימות כי חישוב כפל וחיבור הן בעיות קלות‪.‬‬
‫‪17 + 2*14 – 7*1 + 4 = 0‬‬
‫‪20‬‬
‫‪ 4‬דרגות קושי של בעיות‬
‫‪ .1‬בעיות טריוויאליות – אנו יודעים את הפתרון שלהן‪ ,‬מצריכות שליפה מהזיכרון‬
‫‪ .2‬בעיות קלות – איננו יודעים פתרון‪ ,‬אבל יש לנו דרך יעילה לחשב פתרון‬
‫‪ .3‬בעיות קשות אבל קלות לאימות – איננו יודעים פתרון או דרך יעילה לחשב‬
‫פתרון‪ ,‬אבל אם נקבל לידנו פתרון חוקי‪ ,‬יש לנו דרך יעילה לאמת אותו‬
‫‪ .4‬בעיות קשות באמת – קיימות רק דרכים בלתי‪-‬יעילות (אקספוננציאליות) גם‬
‫לחישוב פתרון וגם לאימות פתרון נתון‪.‬‬
‫בהקשר של פתרון בעיות ע"י מחשב‪,‬‬
‫יעיל = בעל סיבוכיות פולינומית‪,‬‬
‫‪21‬‬
‫בלתי‪-‬יעיל = בעל סיבוכיות אקספוננציאלית‬
O)…( ‫סיבוכיות זמן והסימון‬
constant O(1)
‫תזכורת‬
"...‫ – "קצב גידול של לכל היותר‬O)…(
logarithmic O(logn)
linear O(n)
Polynomial time
Moderate order of growth.
Considered efficient.
quadratic O(n2)
…
exponential O(2n)
O(3n)
O(n!)
Exponential time
Extreme order of growth.
Considered inefficient.
22
‫התמודדות חישובית עם בעיות‬
‫‪ .1‬בעיות טריוויאליות אינן מעניינות מבחינה חישובית‪.‬‬
‫‪ .2‬לבעיות קלות יש אלגוריתמים יעילים‪ ,‬ולכן אינן צריכות להדאיג‪.‬‬
‫אבל אפשר לנסות לשפר את האלגוריתמים ‪ /‬להוכיח חסם תחתון לבעיה המעיד‬
‫כי לא ניתן לשפר עוד‪.‬‬
‫‪ .3‬התמודדות עם בעיות קשות אבל קלות לאימות‪:‬‬
‫‪.1‬‬
‫חקר ולמידה למציאת פתרון יעיל‪ ,‬וע"י כך הפיכתן לבעיות קלות או אפילו טריוויאליות‪.‬‬
‫‪.2‬‬
‫אם הבעיה לא גדולה מדיי‪ ,‬גישת ה‪ ,brute force -‬או בשם אחר חיפוש ממצה ( ‪exhaustive‬‬
‫‪ )search‬תספיק‪.‬‬
‫‪.3‬‬
‫פתרונות מקורבים (‪ :)approximated‬פתרונות יעילים שאינם תמיד נכונים‪ ,‬אבל לא רחוקים‬
‫מפתרון נכון‪.‬‬
‫‪ .4‬בעיות קשות באמת – דרכים ‪ 2-3‬לעיל‪.‬‬
‫‪23‬‬
‫בחזרה לצביעת גרפים‬
‫שאלה‪ :‬לאילוו מחלקות קושי שייכות בעיות הצביעה‪:‬‬
‫‪24‬‬
‫•‬
‫ב‪ 2-‬צבעים?‬
‫•‬
‫ב‪ 3-‬או יותר צבעים?‬
‫•‬
‫ב‪ 4 -‬צבעים עבור המקרה הפרטי של גרף מישורי?‬
‫?‬
‫‪P = NP‬‬
‫‪ - P‬מחלקת הבעיות* הקלות (‪)Polynomial‬‬
‫‪ - NP‬מחלקת הבעיות* הקשות אבל קלות לאימות‬
‫(‪ ,Non-deterministic polynomial‬לא נסביר את השם‪)...‬‬
‫מה היחס בין שתי המחלקות הללו?‬
‫הסבר ודיון‪.‬‬
‫‪NP‬‬
‫‪P=NP‬‬
‫?‬
‫‪P‬‬
‫השאלה הפתוחה הגדולה של מדעי המחשב (הפרס ‪ -‬מיליון דולר)‪:‬‬
‫האם היכולת לזהות ביעילות פתרון חוקי של בעיה מעידה על יכולת לפתור אותה‬
‫ביעילות?‬
‫? ‪Is P = NP‬‬
‫* פורמלית‪ ,‬המחלקות ‪ P‬ו‪ NP -‬מתייחסות לבעיות הכרעה בלבד – בעיות שהתשובות עליהן הן כן‪/‬לא‪.‬‬
‫‪25‬‬
‫מסלולי אוילר ‪ /‬המילטון‬
‫מסלול אוילר (‪ :)Euler‬מסלול שעובר בכל קשתות הגרף בדיוק פעם אחת‪.‬‬
‫בעיית מסלול אוילר שייכת למחלקה ‪.P‬‬
‫תזכורת ‪ -‬הבעיה "האם גרף קשיר מכיל מסלול‪/‬מעגל אוילר" ניתנת לפתרון בזמן ריבועי‪:‬‬
‫עוברים על כל המטריצה בסיבוכיות זמן )‪ O(n2‬וסופרים כמה דרגות אי‪-‬זוגיות יש‪.‬‬
‫אם יש ‪ 0‬או ‪ 2‬עונים "כן"‪ ,‬אחרת עונים "לא"‪.‬‬
‫מסלול המילטון (‪ :)Hamilton‬מסלול שעובר בכל צמתי הגרף בדיוק פעם אחת‪.‬‬
‫למרות הדמיון בין הבעיות‪ ,‬לא ידוע כיום אלגוריתם פולינומי לבעיה זו‪.‬‬
‫אבל בעיית מסלול המילטון ב‪ :NP -‬בהינתן פתרון (מסלול המילטון חוקי)‪ ,‬קל לבדוק שאכן הוא‬
‫כזה (בודקים שכל הצמתים מופיעים‪ ,‬שאין חזרות‪ ,‬ושבין כל שני צמתים יש קשת)‪.‬‬
‫‪26‬‬
)travelling salesperson( ‫הסוכן הנוסע‬
http://www.youtube.com/watch?v=xi5dWND499g
27
‫הסוכן הנוסע – ייצוג כגרף‬
‫בהינתן גרף עם משקלים על הקשתות‪ ,‬ומספר נוסף ‪,K‬‬
‫האם יש מסלול שעובר בכל הצמתים בדיוק פעם אחת‪ ,‬ומשקלו הכולל לכל היותר ‪? K‬‬
‫(לפעמים דורשים גם חזרה לצומת ההתחלה)‬
‫עד היום לא נתגלה אלגוריתם פולינומי לבעיה זו‪.‬‬
‫גם בעיית הסוכן הנוסע שייכת ל‪( NP -‬בהינתן מסלול חוקי‪.)...‬‬
‫טענה‪ :‬אם יתגלה כי בעיית הסוכן הנוסע ב‪ ,P -‬אז גם בעיית מסלול המילטון ב‪.P -‬‬
‫הסבר בכיתה‪.‬‬
‫במקרה כזה אומרים שיש רדוקציה פולינומית מבעית מסלול המילטון לבעיית הסוכן הנוסע‪.‬‬
‫‪28‬‬
‫מספרים ראשוניים‬
‫‪29‬‬
‫מספרים ראשוניים‬
‫בעית בדיקת הראשוניות‪ :‬בהינתן מספר שלם חיובי ‪ ,N‬האם הוא ראשוני?‬
‫עד לא מזמן ידעו לומר שהבעיה ב‪.NP -‬‬
‫ב‪ 2002 -‬נתגלה שהבעיה למעשה ב‪.P -‬‬
‫הערה‪ :‬יש להבדיל בין בדיקת ראשוניות לבין‪:‬‬
‫פירוק לגורמים ראשוניים (‪ :)factorization‬בהינתן ‪ ,N‬מציאת הגורמים הראשוניים‬
‫שמכפלתם שווה לו‪ .‬למשל ‪.12 = 22*3‬‬
‫בעיית הפירוק לגורמים שייכת ל‪!! NP -‬‬
‫אלגוריתם ההצפנה המפורסם ‪ RSA‬מסתמך על זה‪.‬‬
‫‪30‬‬
‫המחלקה ‪NPC‬‬
‫• ‪ NPC‬הוא קיצור של ‪( NP-Complete‬בעברית‪-NP :‬שלם)‪.‬‬
‫• לא נסביר את השם הזה‪...‬‬
‫• זוהי תת מחלקה של ‪ NP‬הכוללת כ‪ 1000 -‬בעיות בעלות התכונה המפתיעה הבאה‪:‬‬
‫‪ )1‬אם לאחת מהן יש פתרון פולינומי ‪ ‬לכולן יש וגם ‪P = NP‬‬
‫‪ )2‬אם לאחת מהן אין פתרון פולינומי ‪ ‬לאף אחת אין וגם ‪P ≠ NP‬‬
‫ומכאן העניין הרב שיש במחלקה זו‪.‬‬
‫‪P=NP=NPC‬‬
‫• הרוב המכריע של מדעני המחשב‬
‫‪NPC‬‬
‫?‬
‫‪NP‬‬
‫סבורים כי ‪.P ≠ NP‬‬
‫‪P‬‬
‫אם אכן כך – לכל הבעיות ב‪ NPC -‬אין ולא יהיה פתרון יעיל!!!‬
‫• מבין הבעיות שראינו‪ ,‬בעיית הצביעה ב‪ k>2 -‬צבעים‪ ,‬מסלול המילטון והסוכן הנוסע‬
‫שייכות ל‪ .NPC -‬לא הוכח שפירוק לגורמים ובעיית האיזומורפיזם שייכות ל‪.NPC -‬‬
‫‪31‬‬
Believed Classification of problems we saw
NPC
Hamiltonian paths
TSP
k>2 coloring
+ ~1000 more…
NP
Graph Isomorphism
Factorization
…
P
2-coloring
Euler paths
Sorting a list
Searching a list
+,*
…
32
A Comic relief
The Travelling Salesperson Problem
33
A Comic relief (2)
Why it's good to know a problem is NPC…
34