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

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

תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(

תוכנה 1 אביב תשע"ח תרגיל מספר 8 אוספים גנריים ו- framework collection הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת ה

PowerPoint Presentation

פייתון

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

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

PowerPoint Presentation

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

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

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

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

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

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

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

1 תוכנה 1 תרגיל מספר 7 מנשקים Interfaces הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה- moodle ב

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

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

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

PowerPoint Presentation

תרגול 1

תרגיל 1 בקורס תוכנה 1

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

Slide 1

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

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

Microsoft Word - c_SimA_MoedB2005.doc

PowerPoint Presentation

Microsoft Word B

PowerPoint Presentation

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

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

PowerPoint Presentation

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

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

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

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

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

Slide 1

ייבוא וייצוא של קבצי אקסל וטקסט

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

PowerPoint Presentation

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

Slide 1

Microsoft PowerPoint - lec10.ppt

Microsoft Word - Ass1Bgu2019b_java docx

HTML - Hipper Text Makeup Language

WinZIP תוכנה לדחיסת קבצים ספטמבר 2007

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

2013/14 אוניברסיטת חיפה מבוא למדעי מחשב, מעבדה מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מ

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

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

PowerPoint Presentation

PowerPoint Presentation

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

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

Microsoft PowerPoint - rec3.ppt

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

234114

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

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

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

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

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

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

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

תרגיל בית מספר 1#

Microsoft Word - דוגמאות ב

מדריך להתקנת Code Blocks מדריך זה נועד לתאר את תהליך התקנת התוכנה של הקורס "מבוא למחשב שפת C". בקורס נשתמש בתוכנת Code::Blocks עם תוספת )אשף( המתאימה

PowerPoint Presentation

PowerPoint Presentation

Slide 1

הוספת קישור לאתר אינטרנט תוכן ממשק בדיקת מטלות...3 איחוד אתרי קורסים...5 סל מחזור... 7 חידושים בפעילויות...8 תצורת קורס: כפתורים... 9 פורומים...10 שיפ

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

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

Office 365 ProPlus בחינם לסטודנטים באוניברסיטת בן גוריון בנגב הוראות סטודנטים באוניברסיטת בן גוריון בנגב יכולים להוריד ולהתקין את חבילת התוכנה Office

ex1-bash

תרגול 1

תרגיל 3 בקורס תוכנה 1

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

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

PowerPoint Presentation

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

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

פרויקט שורשים דמות

Microsoft Word - ExamA_Final_Solution.docx

regular_expression_examples

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

PowerPoint Presentation

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

שעור 6

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

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

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

מצגת של PowerPoint

Slide 1

מצגת של PowerPoint

תמליל:

תוכנה סתיו תשע"ה תרגיל מספר 8 מבני נתונים מקושרים וגנריים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה- moodle בלבד.(http://moodle.tau.ac.il/) יש להגיש קובץ zip יחיד הנושא את שם המשתמש ומספר התרגיל )לדוגמא, עבור המשתמש aviv יקרא הקובץ.)aviv_hw8.zip קובץ ה- zip יכיל: א. קובץ פרטים אישיים בשם details.txt המכיל את שמכם ומספר ת.ז. ב. קבצי ה- java של התוכניות אותם התבקשתם לממש, כולל תיקיות החבילה. חלק א' - מבני נתונים מקושרים )50 נק'( בחלק זה נתרגל עבודה עם מבני נתונים מקושרים, באמצעות מימוש עץ מסוג.Trie מבנה נתונים זה מאפשר לשמור ביעילות רצפים )אשר יכונו גם "מפתחות"(, ולחפש אותם לפי התחיליות שלהם.)prefix( כל רצף בעץ מיוצג ע"י מסלול מצומת השורש אל אחד הצמתים הפנימיים, כאשר כל קשת במסלול משוייכת לאיבר ברצף. לדוגמא, העץ בדוגמא הבאה מייצג Trie של רשימות של מספרים שלמים. המסלול לצומת הצבוע באדום מייצג את הרשימה {,99,8}, והמסלול לצומת השחור מייצג את הרשימה {,4,8,53}. root 28 4 99 54 8 2 2 83 8 35 שימו לב, שמכל צומת יכולות לצאת לכל היותר קשתות, עבור המספרים בין -99. אם נרצה למצוא את כל הרצפים שמתחילים ב- {,4}, ניקח את כל המסלולים העוברים דרך הצומת האפור.

8 בנוסף, מבנה ה- Trie שנממש יאפשר לנו לשמור, בצומת הקצה של מסלול שמייצג רצף, סט של ערכים המשויכים לרצף הזה. למשל, ניתן לשמור עבור כל רשימת מספרים את תאריכי ההוספה שלה. במקרה כזה, בצומת האדום נשמור את סט כל התאריכים בהם התבקשנו להוסיף לעץ את הרשימה {,99,8} )מדובר בסט, כי ייתכן שזה קרה יותר מפעם אחת(. בתור דוגמא נוספת, נתבונן על Trie של מחרוזות. כאן כל איבר ברצף הוא תו במחרוזת. אם נניח שהמחרוזות שלנו מכילות רק את התווים,a-z מכל צומת ייצאו לכל היותר 82 קשתות. בדוגמה למטה, המסלול לצומת האדום מייצג את המחרוזת,bill המסלול לצומת השחור את המחרוזת,billy והמסלול לצומת האפור את המחרוזת.andrew מכיוון שהמחרוזות הללו מייצגות שמות פרטיים, הערך שנשמור עבור כל מחרוזת יכול להיות, למשל, מחרוזת אחרת שמייצגת את שם המשפחה. במקרה כזה, בצומת האדום נשמור את סט כל שמות המשפחה של אנשים בשם."bill" a b root n i o d l b r l e i y w e באתר הקורס נתונים לכם שני מנשקים גנריים : <V,TrieNode<K, ו- <V Trie<K, המייצגים צומת בעץ ואת העץ בהתאמה. K הוא טיפוס המפתחות הנשמרים בעץ, ו- V הוא טיפוס הערכים הנשמרים עבור כל מפתח. למשל, בדוגמא הראשונה למעלה, K יכול להיות List<Integer> )רשימת שלמים( ו- V יכול להיות,Date המייצג את תאריכי הוספת הרשימה לעץ. בדוגמא השניה למעלה, K הוא String שמייצג שמות פרטיים, ו- V הוא String שמייצג שמות משפחה. היזכרו במחלקות גנריות שנלמדו בשיעור ובתרגול 2.

5 TrieNode מגדיר את המתודות הבאות: void addsuffix(k suffix, V value) - מקבלת סיומת של מפתח מטיפוס K וערך מטיפוס V, ומוסיפה אותם למבנה הנתונים תחת הצומת הנוכחי. לדוגמא, נניח שאנחנו בצומת הכחול בעץ למעלה, וקיבלנו את הסיומת "dy" ואת הערך."smith" לצומת זה כבר יש צומת ילד המחובר בקשת 'd' מ, ן הילד הזה נוסיף קשת עם 'y' לצומת ילד חדש, ובצומת החדש נשמור את הערך."smith" כלומר, המסלול מהשורש לצומת החדש ייצג את השם,"andy" והערך שישמר עבורו הוא שם המשפחה."smith" בתור דוגמא נוספת, אם אנחנו בצומת האדום בעץ למעלה, וקיבלנו את הסיומת "ie" ואת הערך,"jones" אין צורך להוסיף צמתים חדשים כי המסלול המתאים כבר קיים; נותר לנו רק להוסיף את הערך "jones" לצומת בקצה המסלול. int getnumkeys(); - מחזירה את מספר המפתחות שהסתיימו בצומת הנוכחי מבין אלה שנוספו אליו, כולל חזרות. למשל, אם הכנסנו 3 אנשים בשם bill ו- אנשים בשם billy לעץ בדוגמא למעלה, קריאה ל- getnumkeys() מהצומת האדום תחזיר 3. Set<V> getvalues() - מחזירה Set עם כל הערכים שנשמרו בצומת הנוכחי. למשל, אם הצומת הנוכחי הוא הצומת האדום מהדוגמא למעלה, נחזיר את כל שמות המשפחה שנשמרו עבור."bill" TrieNode<K, V> getnext(k suffix) - מחזירה את הצומת הבא על המסלול המתאים לסיומת הרצף הנתונה. למשל, הפעלת המתודה על הצומת האדום עם הסיומת "yabc" תחזיר את הצומת השחור. אם לא קיים צומת מתאים בעץ, יוחזר.null List<TrieNode<K, V>> getnexts() - מחזירה את רשימת כל הצמתים-ילדים של הצומת הנוכחי )כלומר, יש קשת מן הצומת הנוכחי אליהם(. אין חשיבות לסדר הצמתים ברשימה, והיא יכולה להכיל ערכי.null Trie מגדיר את המתודות הבאות: boolean addkey(k key, V value) - מקבלת מפתח לעץ וערך המשויך אליו, ומוסיפה אותם לעץ. מחזירה false אם"ם ההוספה נכשלה משום שהמפתח אינו תקין )למשל,.)null Set<V> searchbyprefix(k prefix); - מחפשת את כל המפתחות בעץ עם תחילית מסוימת, ומחזירה Set עם כל הערכים שנשמרו עבור המפתחות הללו. למשל, בדוגמא למעלה, בחיפוש התחילית,"bill" המתודה תחזיר את כל שמות המשפחה שנשמרו עבור billy,billie,bill וכו'. אנו נכתוב מימוש לשני המנשקים שבו K מוגדר להיות,String כלומר, נייצג Trie של מחרוזות.

4. באתר הקורס נתון לכם שלד המחלקה public class StringTrieNode<V> implements TrieNode<String, V> שימו לב - מכיוון שטיפוס המפתח נקבע להיות,String למחלקה זו רק פרמטר גנרי אחד - V, טיפוס הערך הנשמר עבור כל מפתח. לנוחיותכם, בשלד המחלקה כבר נתונים לכם שדות המחלקה, ובנאי. השדה - nexts ישמור מצביעים לילדים בעץ. מכיוון שלכל צומת יש לכל היותר 82 ילדים, הבנאי הנתון מאתחל את רשימת הצמתים הבאים ב- 82 שומרי מקום לצמתים.)null( באינדקס יישמר מצביע לילד המחובר בקשת עם 'a', באינדקס מצביע לילד המחובר ב-' b ' וכו'. ניתן להוסיף\לגשת לילד באינדקס ה- i תוך שימוש במתודות nexts.get(i) ו- child).nexts.set(i, השלימו את מימוש המחלקה. הערות: אנו נניח שכל הרצפים הנשמרים בעץ הם של אותיות a-z קטנות בלבד. אינכם צריכים לבדוק את תקינות הקלט למתודות - אנו נניח שבדיקת התקינות היא באחריות המחלקה.StringTrie אל תשתמשו ב- Map בפתרון הסעיף הנוכחי. מעבר לכך, אתם רשאים לשנות ולהוסיף למימוש הפנימי של StringTrieNode )השדות, הבנאי(. אתם רשאים להוסיף מתודות ומחלקות עזר לפי הצורך, אך אל תשנו את המנשקים הנתונים. שימו לב שאינכם יודעים מראש מה יהיה הטיפוס הקונקרטי שנציב במקום,)?Integer?String( V אך גם אין לכם צורך לדעת זאת - הפעולות היחידות שתצטרכו לבצע על ערכים מטיפוס V הן להוסיף אותם לאוספים שונים. באתר הקורס נתון לכם שלד המחלקה public class StringTrie<V> implements Trie<String, V>.8 השלימו את מימוש המחלקה. הערות: נרצה שכל הרצפים הנשמרים בעץ הם של אותיות a-z קטנות בלבד. ב- StringTrie עליכם לבדוק את תקינות הקלט למתודות, ולוודא שהקלט שאתם מעבירים בקריאות למתודות של StringTrieNode תקין. אם הוא אינו תקין יש לזרוק שגיאה )ניתן להיעזר ב- ErrorHelper לשם כך(. המפתח הריק "" תקין ובמקרה כזה יש לשמור את הערכים המשויכים אליו בשורש העץ. null אינו תקין. ניתן להעזר במתודה addall של Set במימוש.searchByPrefix

3 בדיקות עם JUnit בין קבצי התרגיל נתונה לכם גם מחלקת,TrieTestCase בה ניתן להיעזר כדי לבדוק את המימוש שלכם. כדי להריץ את הבדיקה יש להוסיף את המחלקה לפרוייקט באקליפס, וכן להוסיף את ספריית.JUnit לאחר מכן, יש להריץ את המחלקה כ-.JUnit test case הוספת הספרייה: קליק ימני על הפרוייקט > properties java build path > תחת לשונית Libraries לחצו על.Add Library כעת בחרו בהוספת ספריית JUnit ולחצו על Next ולבסוף על.Finish כדי להריץ את התכנית כ- JUnit לחצו על קליק ימני > as....junit Test > Run

2 מבנה ה- view שאמור להיפתח אוטומטית :)JUnit( הרץ מחדש מספר הטסטים שנכשלו פירוט הטסטים שרצו מספר הטסטים שהורצו מספר הטסטים שזרקו שגיאה פירוט לגבי כישלון הטסט המסומן. לחיצה כפולה מובילה למקום המתאים בקוד ראו גם שיעור - מצגת ודוגמאות בדיקות, ו- tutorial )בייחוד רלוונטיים פרקים 3, ו.-.5 (. אין צורך להגיש את מחלקת הבדיקה TrieTestCase או את.junit.jar

חלק ב' - framework 50( Java collection נק'( בחלק זה נתרגל עבודה עם אוספים )Collections( ע"י מימוש מנוע חיפוש פשוט. בין קבצי העזר של התרגיל תוכלו למצוא את המחלקות Main,SearchEngine,HTMLTokenizer ואת המנשק WordIndex שכבר נכתבו עבורכם. מנוע החיפוש שלנו יטפל במספר מצומצם של דפי HTML אותם הוא יקרא מהרשת. דפים אלו מוגדרים מראש ורשימתם נמצאת במחלקה.SearchEngine אם תרצו תוכלו להוסיף או לשנות את הדפים בהם אתם משתמשים לצרכי בדיקה. לאחר שהורדנו דף HTML מהרשת נתייחס רק לחלק הטקסט שבדף ונפרק חלק זה למילים בודדות. קוד זה כבר מומש עבורכם במחלקה.HTMLTokenizer בנוסף, נתונה המחלקה SearchEngine שבה הקוד המפעיל את המערכת ומתקשר עם המשתמש. הקוד במחלקה זו קורא בתחילה למתודה index אשר תאכלס את אינדקס המילים. לאחר מכן, כתלות בקלט המשתמש יתבצע חיפוש של דפים לפי מילת חיפוש שלמה או תחילית של מילה, המסומנת ע"י הוספת * בסופה )ראו דוגמאות למטה(. מה עליכם לעשות: עליכם לממש מחלקה בשם MyWordIndex המממשת את המנשק.WordIndex מחלקה זו שומרת את אינדקס המילים, מאפשרת הוספת מילים לאינדקס ולאחר מכן מאפשרת גם חיפוש באינדקס. public interface WordIndex { /** * Add the words originating in the specifies URL. * @param words - collection of words to add to the index * @param strurl - the URL of the page containing the words */ void index(collection<string> words, String strurl); /** * Search for pages containing a given word prefix in the index * @param prefix - the word prefix to search * @return A list of pages containing words with the given prefix. * The pages are ordered according to the relative importance * of the prefix within them. */ List<String> searchprefix(string prefix); /** * Search for pages containing a given word in the index * * @param exact - the word to search * @return A list of pages containing the word. The pages are ordered * according to the relative importance of the word within them. */ List<String> searchexact(string exact); הערה: בקוד למעלה התיעוד כתוב בסגנון :javadocs התגית @param משמשת להסבר על פרמטר של המתודה, ו- return @ משמשת להסבר על ערך ההחזרה. לא מדובר בחוזה!

2 המתודות השונות: המתודה index מתודה זו אחראית על אכלוס מבנה הנתונים שלכם. המתודה מקבלת אוסף של מילים )ייתכנו חזרות על אותה מילה מס' פעמים( ואת כתובת האינטרנט )URL( של הדף מהן הגיעו. עליכם לבחור את מבני הנתונים שבהם תשתמשו ולדאוג לשמור על הקשרים הבאים: o לכל תחילית של מילה ומילה שלמה באילו דפים היא מופיעה וכמה פעמים בכל דף )למשל, בדף שמכיל רק את המילה java מופיעות התחיליות jav,ja j, ו-,java פעם אחת כל אחת(. o לכל דף כמה מילים בסה"כ מופיעות בו )עם חזרות( שימו לב: רשימת המילים בקלט היא כפי שהוחזרה ע"י,HTMLTokenizer אולם יש לשמור גרסת lowercase של המילים. אין צורך לנקות סימני פיסוק, רווחים וכו'. אין לשמור את המילה הריקה "" או,null לא כתחילית ולא כמילה שלמה. המתודה searchprefix מקבלת תחילית של מילה לחיפוש ומחזירה רשימה ממוינת של כתובות אינטרנט בהן מופיעות מילים המתחילות באותה תחילית. נמיין את הרשימה כך שככל שהמשקל היחסי של התחילית בדף גבוה יותר כך הכתובת תופיע במקום גבוה יותר ברשימה. משקל זה מוגדר כך: תהיה X רשימת כל המילים שמכילות את התחילית הנתונה )עם חזרות( בדף מסוים. תהיה Y רשימת כל המילים באותו דף )עם חזרות(. המשקל היחסי של התחילית בדף הוא. לא נחזיר דפים בהם התחילית אינה מופיעה כלל. שימו לב: כדי להשוות טיפוסים פרימיטיביים ניתן להשתמש בשירות compare של הטיפוס Double.compare(double d, double d2) העוטף. לדוגמא: המתודה searchexact פועלת בדומה ל- searchprefix אך מחפשת מילה שלמה ולא תחילית. המשקל היחסי של מילה בדף מוגדר באופן דומה: יהיה x מס' המופעים של המילה הנתונה בדף מסוים. תהיה Y רשימת כל המילים באותו דף )עם חזרות(. המשקל היחסי של המילה בדף הוא ושוב, לא נחזיר דפים בהם המילה אינה מופיעה כלל. הנחיות: עליכם לכתוב ולהגיש את המחלקה MyWordIndex שמממשת את המנשק.WordIndex ניתן להוסיף מחלקות ומתודות עזר. אין לשנות את הקבצים הנתונים באתר הקורס. לקבלת מלוא הנקודות על התרגיל יש להשתמש במבני הנתונים המתאימים לבעיה מתוך הספרייה הסטנדרטית ובאופן ראוי )נכונות הפלט אינה הקריטריון היחיד(. לדוגמא, כדי לשמור ערכים ללא חזרות יש להשתמש ב- Set או.Map בפרט, אל תשתמשו בפתרון חלק א' עבור חלק ב'.)Trie(

9 את מיון הרשימה של כתובות האינטרנט בצעו בעזרת הפונקציה.Collections.sort(...) שימו לב שה"מיון הטבעי" של הכתובות )String( הוא מיון לקסיקוגרפי ולא כפי שמתבקש בשאלה. כדי לשנות את שיטת המיון עליכם לכתוב מחלקת עזר המממשת את המנשק Comparator )מומלץ לחפש באינטרנט דוגמאות למימוש מנשק זה(. מחלקה זו תיעזר בנתונים שנשמרו באינדקס לצורך מיון הכתובות. שימו לב שתוצאות ההשוואה תלויות במילת החיפוש הנוכחית. כדי לבדוק את התכנית שלכם השתמשו במחלקה Main המייצרת אובייקט חדש מטיפוס SearchEngine ומעבירה לו בבנאי מופע של המחלקה MyWordIndex שמימשתם. לאחר יצירת האובייקט נקרא השירות.run דוגמא )בהתבסס על רשימת הכתובות בקוד שניתן לכם(: Indexing "http://en.wikipedia.org/wiki/java_(programming_language)"...found 7978 tokens. Indexing "http://en.wikipedia.org/wiki/java"...found 5586 tokens. Indexing "http://docs.oracle.com/javase/8/docs/technotes/guides/collections/reference.html"...found 968 tokens. Indexing "http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html"...found 5705 tokens. Indexing "http://en.wikipedia.org/wiki/united_states"...found 2966 tokens. Indexing "http://en.wikipedia.org/wiki/world_war_ii"...found 24866 tokens. Indexing "http://en.wikipedia.org/wiki/world_war_i"...found 395 tokens. > java Searching for pages containing the word "java".... http://en.wikipedia.org/wiki/java_(programming_language) 2. http://en.wikipedia.org/wiki/java 3. http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html 4. http://en.wikipedia.org/wiki/world_war_ii > wor Searching for pages containing the word "wor"... Unable to find relevant pages. > wor* Searching for pages containing the prefix "wor*".... http://en.wikipedia.org/wiki/world_war_i 2. http://en.wikipedia.org/wiki/world_war_ii 3. http://en.wikipedia.org/wiki/united_states 4. http://en.wikipedia.org/wiki/java_(programming_language) 5. http://en.wikipedia.org/wiki/java 6. http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html 7. http://docs.oracle.com/javase/8/docs/technotes/guides/collections/reference.html > (exit) Bye! שימו לב שהתוצאות עשויות להשתנות כתלות בהתעדכנות האתרים שנסרקו. אתם מוזמנים להשוות את הפלט עם חברים. בהצלחה!