Presentation is loading. Please wait.

Presentation is loading. Please wait.

נושאים מחרוזות מיון (מיון בועות)

Similar presentations


Presentation on theme: "נושאים מחרוזות מיון (מיון בועות)"— Presentation transcript:

1 נושאים מחרוזות מיון (מיון בועות)
תרגול מס' 5  נושאים מחרוזות מיון (מיון בועות) מבוא למדעי המחשב, בן גוריון

2 מבוא למדעי המחשב, בן גוריון
מחרוזות הקדמה מחרוזת (String) היא מחלקה המייצגת טקסט (רצף של תווים). מיספור אינדקס התווים במחרוזת מתחיל מ 0 ונגמר באורך המחרוזת פחות 1. String "abcd" Index 0123 מבוא למדעי המחשב, בן גוריון

3 מבוא למדעי המחשב, בן גוריון
מחרוזות פעולות על מחרוזות: הגדרה ואתחול String s1; String s2 = "abcd"; String s3 = ""; String s4 = null; String s5 = new String(); מבוא למדעי המחשב, בן גוריון

4 מבוא למדעי המחשב, בן גוריון
מחרוזות אורך מחרוזת String s2 = "abcd"; System.out.println(s2.length()); String s3 = ""; System.out.println(s3.length()); String s4 = null; System.out.println(s4.length()); 4 NullPointerException מבוא למדעי המחשב, בן גוריון

5 מבוא למדעי המחשב, בן גוריון
מחרוזות String s2 = "abcd"; גישה לתו במיקום (אינדקס) מסוים s2.charAt(0) s2.charAt(1) s2.charAt(5) 'a' 'b' StringIndexOutOfBoundsException :String index out of range מבוא למדעי המחשב, בן גוריון

6 מבוא למדעי המחשב, בן גוריון
מחרוזות תת-מחרוזת החל מאינדקס i ועד אינדקס j (לא כולל את j). String s2 = "abcd"; s2.substring(1,3) "bc" s2.substring(1) "bcd" השוואה בין תוכן שתי מחרוזות. התוצאה בוליאנית (true או false). s2.equals(s3) שרשור + s2+"efg" יוצר מחרוזת חדשה "abcdefg". המחרוזת s2 לא משתנה. מה משווה האופרטור "==" ? מבוא למדעי המחשב, בן גוריון

7 מבוא למדעי המחשב, בן גוריון
מחרוזות דוגמה 1 – מחרוזת עם סדר תווים הפוך לפנינו פונקציה reverse המקבלת מחרוזת ומחזירה מחרוזת אחרת שבה התווים בסדר (מיקום) הפוך. הפונקציה main מפעילה את reverse על המחרוזת "Hello" ומדפיסה את התוצאה (olleH). public static void main (String[] args) { System.out.println(reverse("Hello")); } מבוא למדעי המחשב, בן גוריון

8 מבוא למדעי המחשב, בן גוריון
פתרון public static String reverse(String data) { String rev = new String(); for (int j=data.length()-1; j>=0; j=j-1) { rev = rev + data.charAt(j); } return rev; מבוא למדעי המחשב, בן גוריון

9 מבוא למדעי המחשב, בן גוריון
מחרוזות דוגמה 2 – חיפוש של תת-מחרוזת במחרוזת לפנינו פונקציה isSubstring המקבלת שתי מחרוזת str ו- sub ובודקת האם sub מופיעה בתוך str כתת מחרוזת. הפונקציה מחזירה תשובה בוליאנית. למשל, המחרוזת "bc" מופיעה כתת-מחרוזת במחרוזת "abcd" באינדקס 1. String "abcd" Index הרעיון: נשווה את "bc" לתתי מחרוזות של "abcd" בעלות אורך זהה. מבוא למדעי המחשב, בן גוריון

10 מבוא למדעי המחשב, בן גוריון
public static boolean isSubstring(String str,String sub){ boolean isFound = false; int lastInd = str.length()- sub.length(); for (int i=0; i<=lastInd && !isFound; i=i+1) { String strSub = str.substring(i, i+sub.length()); if (strSub.equals(sub)) { isFound = true; } return isFound; מבוא למדעי המחשב, בן גוריון

11 מבוא למדעי המחשב, בן גוריון
טבלת ASCII מבוא למדעי המחשב, בן גוריון

12 מבוא למדעי המחשב, בן גוריון
דוגמה 3 – צופן קיסר סכמה של צופן כללי: מבוא למדעי המחשב, בן גוריון

13 מבוא למדעי המחשב, בן גוריון
דוגמה 3- צופן קיסר צופן (Cipher) הוא אלגוריתם הצפנה, המקבל טקסט קריא ומפתח, ומחזיר טקסט מוצפן. צופן קיסר מבוסס על רעיון החלפת האותיות של הטקסט הקריא, לשם יצירתו של הטקסט המוצפן: האלפבית המשמש להצפנה מוסט מעגלית במספר קבוע של 'מקומות' מן האלפבית הרגיל. המפתח (key)= מספר מקומות ההסטה. לפי עדויות היסטוריות יוליוס קיסר עשה בשיטה זו שימוש נרחב. מבוא למדעי המחשב, בן גוריון

14 מבוא למדעי המחשב, בן גוריון
דוגמה 3- צופן קיסר למשל, בהזזת של 3 מקומות המילהBABY תתורגם... למילה EDEB. מבוא למדעי המחשב, בן גוריון

15 מבוא למדעי המחשב, בן גוריון
public static String encrypt(String str, int key) { String ans = ""; final int ALPHABET_SIZE = 26; for (int i = 0; i < str.length(); i=i+1) { int c = str.charAt(i); if ('A'<=c && c<='Z') { c = c - 'A'; c = ((c + key) % ALPHABET_SIZE )+'A'; } else if ('a'<=c && c<='z') { c = c - 'a'; c = ((c + key) % ALPHABET_SIZE )+'a'; ans = ans + (char)c; return ans; לשים לב ל auto casting מבוא למדעי המחשב, בן גוריון

16 מבוא למדעי המחשב, בן גוריון
דוגמה 3- צופן קיסר כמה הערות: בפקודה int c = str.charAt(i) מתרחשת המרת טיפוס אוטומאטית מ char ל int. כנ"ל בביטויים כמו 'A'<=c ו- c-'A'. בפקודה ans = ans + (char)c יש המרת טיפוס מפורשת מ int ל char. פעולה זו נחוצה מכיוון שנרצה לשרשר למחרוזת התוצאה ערך char ('A') ולא int (65). הערכים המספריים של כל תו מסוכמים בטבלה (טבלת ASCII, תקן UNICODE). אין כלל צורך לזכור את הטבלה בע"פ. מבוא למדעי המחשב, בן גוריון

17 מבוא למדעי המחשב, בן גוריון
דוגמה 3- צופן קיסר public static void main(String[] args) { String str = "BEN GURION UNIVERSITY"; int key = 3; String encrypted = encrypt(str, key); System.out.println(encrypted);// "EHQ JXULRQ XQLYHUVLWB" String decrypted = decrypt(encrypted, key); System.out.println(decrypted);// "BEN GURION UNIVERSITY" } שאלה: מהי פעולת פענוח (decrypt) של צופן קיסר? תשובה: בדומה להצפנה, מלבד חיסור של מפתח ההזזה במקום חיבורו. מבוא למדעי המחשב, בן גוריון

18 מבוא למדעי המחשב, בן גוריון
דוגמה 3- צופן קיסר פריצת צופן קיסר בהינתן טקסט מוצפן כיצד ניתן לגלות את הטקסט הקריא מבלי לדעת את המפתח? ניתן לנחש את המפתח בו הוצפן הטקסט באמצעות סטטיסטיקה על השכיחויות של אותיות האלף בית האנגלי בטקסט כלשהו. האות השכיחה ביותר בטקסט באנגלית היא E, שכיחותה 12%. ב –quiz הבא תכתבו תוכנית המוצאת את האות השכיחה ביותר בטקסט נתון. סביר להניח שאות זו היא הקידוד של האות E וככה ניתן לחשב בכמה הזזנו את האותיות. ניתן לנסות את כל ההסטות האפשריות (כמה כאלו יש?) ולהשוות את התוצאה למילון. מבוא למדעי המחשב, בן גוריון

19 מבוא למדעי המחשב, בן גוריון
מיונים מיון מערך (array sort) - הגדרת הבעיה: בהינתן מערך A של n מספרים שלמים, חשב מערך ממוין של אותם מספרים. למשל: Input: 7, 18, 28, 4, 10 Output: 4, 7, 10, 18, 28 ישנן שיטות מיון רבות, למשל: מיון בחירה (Selection Sort) מיון הכנסה Insertion Sort)) מיון בועות (Bubble Sort) מבוא למדעי המחשב, בן גוריון

20 מיון בועות (Bubble Sort)
תיאור השיטה: תוך כדי המיון, החלק הימני של המערך כבר ממוין ("מעל פני הים") והחלק השמאלי של המערך אינו ממוין ("מתחת לפני הים"). בכל סבב, "בועה" מבעבעת עד שהיא מגיעה לפני הים. הבועה "סוחבת" איתה ערכים גדולים: בבעבוע הבועה, בכל שני תאים סמוכים בהן עוברת הבועה, מוחלפים הערכים אם אינם בסדר המיון. מבוא למדעי המחשב, בן גוריון

21 מיון בועות (Bubble Sort)
וכן הלאה עד אשר המערך כולו מעל פני הים. מבוא למדעי המחשב, בן גוריון

22 מבוא למדעי המחשב, בן גוריון
public static void bubbleSort(int[] array){ int tmp; bbl=0 */ for (int bbl=0; bbl<array.length-1; bbl=bbl+1) { array[array.length- bbl.. array.length-1] is sorted * and all numbers array[array.length-bbl.. array.length-1] * are bigger than the numbers array[0 .. array.length-bbl-1] */ for (int index=0; index < array.length-1; index=index+1){ if (array[index] > array[index+1]) { tmp = array[index]; array[index] = array[index+1]; array[index+1] = tmp; } array is sorted */ מבוא למדעי המחשב, בן גוריון

23 מיון בועות (Bubble Sort)
שאלה: כמה השוואות מתבצעות? (array[index] > array[index+1]) תשובה: הלולאה הפנימית מבצעת n השוואות. הלולאה החיצונית מתבצעת n פעמים. סה"כ n2 השוואות. שאלה: האם כל ההשואות נחוצות? תשובה: לא. אם המערך כבר ממוין אין צורך להמשיך בלולאה (לא צריך לבעבע עוד בועה). השוואות הנעשות בחלק הממויין מיותרות (פני הים יורדים, ויש להשוות איברים רק מתחת לפני הים). מבוא למדעי המחשב, בן גוריון

24 מבוא למדעי המחשב, בן גוריון
public static void bubbleSort(int[] array){ boolean isSorted = false; int tmp; for (int bbl=0; !isSorted && bbl<array.length-1; bbl=bbl+1){ isSorted = true; for (int index=0; index<array.length-1-bbl; index=index+1){ if (array[index] > array[index+1]) { tmp = array[index]; array[index] = array[index+1]; array[index+1] = tmp; isSorted = false; } מבוא למדעי המחשב, בן גוריון

25 מבוא למדעי המחשב, בן גוריון
שאלות מבחנים מבוא למדעי המחשב, בן גוריון

26 מבוא למדעי המחשב, בן גוריון

27 מבוא למדעי המחשב, בן גוריון

28 מבוא למדעי המחשב, בן גוריון

29 מבוא למדעי המחשב, בן גוריון

30 מבוא למדעי המחשב, בן גוריון


Download ppt "נושאים מחרוזות מיון (מיון בועות)"

Similar presentations


Ads by Google