אוניברסיטת תל אביב -בית הספר למדעי המחשב מבוא מורחב למדעי המחשב ,אביב 4102 תרגיל בית מספר - 7להגשה עד 51ביוני בשעה 55:11 אחרון! אחרון! אחרון! אחרון! אחרון! אחרון! שימו לב :בתרגיל זה ניתן להגיע למקסימום של 121נקודות ! אנו ממליצים מאוד להגיש אותו. קיראו בעיון את הנחיות העבודה וההגשה המופיעות באתר הקורס ,תחת התיקייה .assignmentsחריגה מההנחיות תגרור ירידת ציון /פסילת התרגיל. הנחיות והערות ספציפיות לתרגיל זה: קוד משאלות 2א'2 ,ב' ו2 -ג' יש לממש בקובץ השלד ( )skeleton7.pyהמצורף לתרגיל זה .אין לצרף לקובץ ה- pyאת הקוד ששימש לפתרון יתר השאלות. קובץ השלד מכיל כבר ייבוא של חבילות הדרושות לעבודה עם תמונות וכן פונקציות שימושיות שראיתם בכיתה .על הקובץ matrix.pyלהיות בספריה ממנה אתם מריצים את קובץ הפתרונות שלכם .אין לשנות את הקובץ matrix.pyאו את הפונקציות הקיימות בקובץ השלד .מותר להוסיף לקובץ השלד פונקציות עזר לבחירתכם ,כולל כמובן פונקציות שראיתם בכיתה. בקובץ השלד תמצאו פונקציה testשמטרתה לעזור לכם לבדוק את עצמכם .זיכרו שהבדיקות שבה מכסות רק חלק מהמקרים שייבדקו על ידנו. כל יתר השאלות – נא להגיש בקובץ pdfבלבד. שימו לב :מותר להוסיף לקובץ השלד פונקציות נוספות שכתבתם או שנלמדו בכיתה ,אך אין לשנות את חתימת הפונקציות שהוגדרו בשאלות ,אחרת הבדיקות האוטומטיות ייכשלו. לא לשכוח לשנות את שם הקובץ למספר ת"ז שלכם לפני ההגשה ,עם סיומת .py בסה"כ מגישים שני קבצים בלבד .עבור סטודנטית שמספר הזהות שלה הוא 012345678הקבצים שיש להגיש הם 012345678.pdfו.012345678.py - הקפידו לענות על כל מה שנשאלתם. תשובות מילוליות והסברים צריכים להיות תמציתיים ,קולעים וברורים. להנחיה זו מטרה כפולה: .1על מנת שנוכל לבדוק את התרגילים שלכם בזמן סביר. .2כדי להרגיל אתכם להבעת טיעונים באופן מתומצת ויעיל ,ללא פרטים חסרים מצד אחד אך ללא עודף בלתי הכרחי מצד שני .זוהי פרקטיקה חשובה במדעי המחשב. עמ' 1מתוך 5 CC BY-NC-SA 3.0 אוניברסיטת תל אביב -בית הספר למדעי המחשב מבוא מורחב למדעי המחשב ,אביב 4102 שאלה – 5זיו למפל סעיף א כזכור ,באלגוריתם Lempel-Zivדוחסים חזרות באורך לפחות ( 3מתעלמים מחזרות באורך 1,2משום שדחיסתן אינה משתלמת) .אם נסמן ב L-את אורך החזרה המינימלי שהאלגוריתם דוחס ,אז .L=3 האם תיתכן מחרוזת שדחיסתה עם L=4תהיה יעילה יותר מאשר עם ?L=3אם לדעתכם כן ,רשמו את המחרוזת ואת ייצוג הביניים* של הדחיסה ,עבור L=3ועבור .L=4אם לדעתכם לא ,הסבירו מדוע. * דוגמא לייצוג ביניים :ייצוג הביניים של המחרוזת ’ ‘abcabcdededeהוא ])[‘a’,’b’,’c’,(3,3),’d’,’e’,(2,4 סעיף ב .i לפניכם מוצג קוד עבור הפונקציה ) genString(nשמייצרת מחרוזת באורך nמתוך התפלגות ידועה של שכיחות אותיות (הנתונה ע"י המחרוזת freqבקוד). def genString(n): freq = 'abcdefghij' + 'k'*10 ])randLetters = [random.choice(freq) for i in range(n )return ''.join(randLetters תהי ) .s=genString(1000איזו דחיסה צפויה לתת יחס דחיסה טוב יותר עבור Huffman :sאו Lempel- ?Zivהסבירו את תשובתכם. הבהרה :קידוד Huffmanכאן ישתמש ב s-הן בתור corpusוהן בתור .text .ii נחליף את המחרוזת freqבמחרוזת הבאה: freq = 'abcdefghij' + 'k'*1111 האם לדעתכם התשובה תשתנה? הסבירו. הערה :בסעיפים iו ii -אין חובה לתת ניתוח מתמטי מדויק בתשובה .מספיק לתת הסבר כללי ,קולע ,שמתייחס לפרטים הרלוונטיים באלגוריתמים ולקלט. סעיף ג נניח שעבור טקסט באורך ,nמאפשרים לאורך החזרה המקסימלי באלגוריתם Lempel-Zivלהיות n-1 (במקום 31כפי שמופיע בערכי ברירת המחדל של האלגוריתם שהוצג בהרצאה) .שאר פרטי האלגוריתם ללא שינוי .רוצים לדחוס באופן זה את המחרוזת ’… ‘01010101באורך .n כיצד נראה ייצוג הביניים של הדחיסה? מהו יחס הדחיסה (=מספר הביטים במחרוזת הדחוסה חלקי מספר הביטים במחרוזת ללא דחיסה) כתלות ב ?n -תנו תשובה בסדר גודל במונחים של )…(O בונוס :רישמו את הביטוי המדויק ליחס הדחיסה. עמ' 2מתוך 5 CC BY-NC-SA 3.0 אוניברסיטת תל אביב -בית הספר למדעי המחשב מבוא מורחב למדעי המחשב ,אביב 4102 סעיף ד נניח ,כי בנוסף לשינוי שתואר בסעיף ג' ,מכניסים את שני השינויים הבאים באלגוריתם: - אין אפשרות לחפיפה בין סגמנטים חוזרים .במילים אחרות ,החזרה לא תוכל לעבור את הנקודה הנוכחית בטקסט .למשל ,ייצוג הביניים של המחרוזת ’ ‘abcabcabcיהיה ]) [‘a’,’b’,’c’,(3,3),(3,3במקום ייצוג הביניים באלגוריתם הרגיל .[‘a’,’b’,’c’,(3,6)] - - גודל החלון יוגבל ל( n-1 -במקום 6104כפי שמופיע בערכי ברירת המחדל של האלגוריתם שהוצג בהרצאה). כיצד יראה כעת ייצוג הביניים של המחרוזת ’… ‘01010101באורך ?nמהו יחס הדחיסה כתלות ב?n - הניחו לשם פשטות כי nהוא חזקה שלמה של ,2ותנו תשובה בסדר גודל ()…( .)Oהסבירו את תשובתכם. טיפ :אתם יכולים לבדוק את התשובות לכל הסעיפים ע"י הרצות... שאלה - 5תמונות א .להלן תמונה סינתטית ,בגודל :212X212 כיתבו פונקציה synשלא מקבלת שום פרמטר ומחזירה אובייקט מהמחלקה Matrixשמייצג תמונה זו בדיוק. כלומר כאשר מריצים )( syn().displayנפתח חלון עם התמונה הזו. הבהרות: - מרכז הריבוע הפנימי ממוקם במרכז התמונה בדיוק ,ואורך צלעו היא מחצית מאורך (או רוחב) התמונה. הצלע השמאלית והימנית של ריבוע זה הן בלבן מוחלט ,שמתחלף בהדרגה לשחור מוחלט כאשר נכנסים פנימה לכיוון מרכז הריבוע .מעל ומתחת לריבוע ישנם 6פסים לבנים ( )222בעלי עובי זהה ,כאשר המרווח בין זוג פסים סמוכים (או בין הריבוע לפס הסמוך אליו) הוא כעובי פס .כפי שניתן לראות ,הפסים אינם חורגים מאלכסוני התמונה. עמ' 3מתוך 5 CC BY-NC-SA 3.0 אוניברסיטת תל אביב -בית הספר למדעי המחשב מבוא מורחב למדעי המחשב ,אביב 4102 ב .כיתבו פונקציה sunשמקבלת מטריצה (אובייקט מהמחלקה )Matrixהמייצגת תמונה ,ומחזירה מטריצה המייצגת תמונה זהה ,עם תוספת של שמש בצבע לבן ( .)222מרכז השמש ימוקם במרכז הרביע השמאלי העליון של התמונה (כלומר עבור מטריצה בעלת nשורות ו m-עמודות מרכז השמש יהיה הפיקסל בשורה n//4ובעמודה – )m//4ראו בדוגמה .קוטר העיגול יהיה 21פיקסלים בדיוק .עובי כל אחת מ 8 -הקרניים הוא פיקסל אחד, ואורכה הוא 11פיקסלים ממרכז העיגול (כולל פיקסל המרכז) .להלן דוגמה לתוצאה של )(sun(im).display כאשר imהיא מטריצה שמייצגת את התמונה שבקובץ test_image.jpgהמצורף לתרגיל. הערות: העיגול לא צריך להיות עיגול מושלם ,אלא קירוב סביר שלו (שהרי אנו עובדים ברזולוציה סופית,ולא ניתן באמת לייצר קו עקום). מותר להניח שהתמונה גדולה מספיק כדי לכלול את התוספת.צלמו איזור כלשהו לבחירתכם (עדיף ברחבי קמפוס האוניברסיטה, למשל איזור בניין שרייבר ,אך לא חובה) ,בשעות החשיכה ,כך שלפחות הרביע השמאלי העליון של התמונה יכיל שמיים בצבע כהה .הוסיפו לתמונה שמש באמצעות הפונקציה שלכם מסעיף ב' .הגישו בקובץ ה- pdfאת התמונה המקורית ,את התמונה לאחר הוספת השמש ,וציינו היכן צולמה התמונה. הערה :כדאי שנפח הזיכרון של התמונה המקורית שצילמתם לא יעלה על כמה עשרות ,Kilobytesאחרת הקוד ירוץ מאוד לאט .אפשר להקטין את הנפח באמצעות תוכנת ,Paintלמשל (לעשות stretch לאחוז נמוך מספיק ,נניח .)21% ג. בסעיף זה עליכם לכתוב פונקציה cleanבהתאם להסבר הבא :לתרגיל מצורפת תמונה band_name_SP90.bmpשל אחת הלהקות האהובות על מיכל שמופיעות בארץ בקרוב .מיכל זכתה בכרטיס להופעה של להקה זו וכתבה על פתק את שם הלהקה ,אך אבוי – בעת ארוחת צהרים משותפת של צוות הקורס נשפך בטעות המון מלח ופלפל על הפתק ,בדיוק בהתאם למודל רעש מסוג Salt&Pepperבהסתברות 0.9 (כלומר רק 11%מהפיקסלים המקוריים נשארו כפי שהם ,כל היתר הפכו – בהסתברות שווה – ללבן מוחלט או לשחור מוחלט) .עזרו למיכל לנקות את התמונה ולגלות מה שם ההלהקה כדי שלא תחמיץ את ההופעה... לשם כך עליכם להשלים את מימוש הפונקציה cleanבקובץ השלד שתבצע ניקוי רעש לתמונה "המלוכלכת". band_name_SP90.bmp עמ' 6מתוך 5 CC BY-NC-SA 3.0 אוניברסיטת תל אביב -בית הספר למדעי המחשב מבוא מורחב למדעי המחשב ,אביב 4102 רמזים: .1איזו שיטת ניקוי נעדיף – חציון מקומי או ממוצע מקומי? .2אם הקוד שראיתם בהרצאות ובתרגולים לא יהיה יעיל מספיק לזיהוי המספר ,נסו לשנות אותו מעט, בדרך כלשהי שלדעתכם יכולה לשפר את איכות הניקוי .שימו לב שאין פה פתרון אחד נכון .ניתן לפעול בכל דרך שנראית לכם. בקובץ ה pdf -צרפו את תמונת הפתק (לאחר הפעלת פונקציית הניקוי שכתבתם) כאשר שם הלהקה קריא ככל שתוכלו .לניקוי מוצלח במיוחד יינתן בונוס של עד 51נקודות .כמו כן צרפו הסבר על הדרך בה ניקיתם את התמונה ,כולל השיקולים (המוצלחים והשגויים) שהפעלתם לאורך התהליך .בקובץ השלד השלימו את המימוש של הפונקציה ,cleanכך שכאשר נריץ )( clean(im).displayעל מטריצה imשמייצגת את התמונה המלוכלכת הנ"ל ,תופיע בדיוק התמונה הנקייה שצרפתם ל.pdf - שאלה - 3איתור ותיקון שגיאות השאלה עוסקת בקוד גילוי שגיאות המשלב קוד זוגיות ( )parity bitעם קוד חזרות (.)repetition בהינתן הודעה באורך ,3נוסיף בסוף ביט זוגיות ( )XORעבור שלושת הביטים ,ואז נשכפל את כל 6הביטים. בסה"כ ,עבור הודעה של 3ביטים משדרים 8ביטים. למשל (הביטים שנוספו מודגשים בקו): הודעה שדר 010 01010101 110 11001100 א .כמה שדרים חוקיים ( )codewordsיש? ב .מהו ,dמרחק Hammingהמינימלי של הקוד (המרחק המינימלי בין שני שדרים חוקיים כלשהם)? ג. להלן 3שדרים שנתקבלו .ציינו עבור כל שדר: האם כלל לא נפלו בו שגיאות ,או שנפלה שגיאה אחת ,או שאולי נפלו בו שתי שגיאות. אם ניתן לשחזר את ההודעה המקורית -רישמו גם את ההודעה המקורית ( 3ביטים). אנחנו מניחים כי שגיאות בביטים שונים הן בלתי תלויות וכי ההסתברות לשגיאה בכל ביט נמוכה מאוד, ומתייחסים תמיד להודעה המקורית הסבירה ביותר. השדרים שנתקבלו: 1 1 1 0 1 1 1 0 .a 0 1 0 1 1 1 0 1 .b 0 0 1 1 0 0 1 1 .c סוף. עמ' 2מתוך 5 CC BY-NC-SA 3.0
© Copyright 2024