41
ססססס סס'5 םםםםםם ססססססס )סססס ססססס( סססס ססססססס1 סססס ססססס ססססס, סס סססססס

תרגול מס' 5

Embed Size (px)

DESCRIPTION

תרגול מס' 5. נושאים מחרוזות מיון (מיון בועות) רקורסיה. מחרוזות. הקדמה מחרוזת ( String ) היא מחלקה המייצגת טקסט (רצף של תווים). מיספור אינדקס התווים במחרוזת מתחיל מ 0 ונגמר באורך המחרוזת פחות 1. String " abcd " Index 0123. מחרוזות. פעולות על מחרוזות: הגדרה ואתחול String s1; - PowerPoint PPT Presentation

Citation preview

Page 1: תרגול מס' 5

5תרגול מס'

נושאים  מחרוזות)מיון )מיון בועותרקורסיה

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

Page 2: תרגול מס' 5

מחרוזותהקדמה

( היא מחלקה המייצגת טקסט )רצף של תווים(. Stringמחרוזת )

ונגמר באורך 0מיספור אינדקס התווים במחרוזת מתחיל מ

.1המחרוזת פחות

String "abcd"

Index 0123

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

Page 3: תרגול מס' 5

מחרוזותפעולות על מחרוזות:

הגדרה ואתחול•

String s1;

String s2 = "abcd";

String s3 = "";

String s4 = null;

String s5 = new String();

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

Page 4: תרגול מס' 5

מחרוזותמחרוזת אורך•

מבוא למדעי המחשב, בן גוריון 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

0

NullPointerException

Page 5: תרגול מס' 5

מחרוזות

גישה לתו במיקום )אינדקס( מסוים•

s2.charAt(0)

s2.charAt(1)

s2.charAt(5)

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

String s2 = "abcd";

'a'

'b'

StringIndexOutOfBoundsException

:String index out of range

Page 6: תרגול מס' 5

מחרוזות

(.j )לא כולל את j ועד אינדקס i החל מאינדקס תת-מחרוזת•

String s2 = "abcd";

s2.substring(1,3) "bc"

s2.substring(1) "bcd"

(.false או true בין תוכן שתי מחרוזות. התוצאה בוליאנית )השוואה•

s2.equals(s3)

+ שרשור•

s2+"efg" יוצר מחרוזת חדשה "abcdefg" המחרוזת .s2.לא משתנה

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

מה משווה האופרטור "==" ?

Page 7: תרגול מס' 5

מחרוזות

– מחרוזת עם סדר תווים הפוך 1דוגמה

המקבלת מחרוזת ומחזירה מחרוזת אחרת reverseלפנינו פונקציה

מפעילה את mainשבה התווים בסדר )מיקום( הפוך. הפונקציה

reverse על המחרוזת "Hello"( ומדפיסה את התוצאה olleH.)

public static void main (String[] args) {

System.out.println(reverse("Hello"));

}

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

Page 8: תרגול מס' 5

פתרון

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;

}

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

Page 9: תרגול מס' 5

מחרוזות – חיפוש של תת-מחרוזת במחרוזת2דוגמה

sub ו- str המקבלת שתי מחרוזת isSubstringלפנינו פונקציה

כתת מחרוזת. הפונקציה str מופיעה בתוך subובודקת האם

מחזירה תשובה בוליאנית.

.1 באינדקס " abcd" מופיעה כתת-מחרוזת במחרוזת "bc"למשל, המחרוזת

String "abcd"

Index 0123

בעלות אורך זהה."abcd" לתתי מחרוזות של "bc"הרעיון: נשווה את

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

Page 10: תרגול מס' 5

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;

}

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

Page 11: תרגול מס' 5

ASCIIטבלת

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

Page 12: תרגול מס' 5

– צופן קיסר 3דוגמה :סכמה של צופן כללי

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

Page 13: תרגול מס' 5

- צופן קיסר3דוגמה

( המקבל Cipherצופן הצפנה, אלגוריתם הוא קריא( טקסט . טקסט מוצפן, ומחזיר מפתחו

צופן קיסר מבוסס על רעיון החלפת האותיות של הטקסט •הקריא, לשם יצירתו של הטקסט המוצפן: האלפבית המשמש

להצפנה מוסט מעגלית במספר קבוע של 'מקומות' מן האלפבית הרגיל.

(= מספר מקומות ההסטה.keyהמפתח )•

לפי עדויות היסטוריות יוליוס קיסר עשה בשיטה זו שימוש נרחב.•

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

Page 14: תרגול מס' 5

- צופן קיסר3דוגמה

תתורגם... BABY מקומות המילה3למשל, בהזזת של

.EDEBלמילה

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

Page 15: תרגול מס' 5

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;

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

Page 16: תרגול מס' 5

- צופן קיסר3דוגמה :כמה הערות

int c = str.charAt(i)בפקודה 1.

.int ל charמתרחשת המרת טיפוס אוטומאטית מ

. 'c-'A ו- A'<=c' כנ"ל בביטויים כמו

ans = ans + (char)cבפקודה 2.

. פעולה זו נחוצה מכיוון char ל intיש המרת טיפוס מפורשת מ

.)int )65 ולא char ('A')שנרצה לשרשר למחרוזת התוצאה ערך

, ASCIIהערכים המספריים של כל תו מסוכמים בטבלה )טבלת 3.

(. אין כלל צורך לזכור את הטבלה בע"פ.UNICODEתקן

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

Page 17: תרגול מס' 5

- צופן קיסר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: מהי פעולת פענוח )שאלה

: בדומה להצפנה, מלבד חיסור של מפתח ההזזה במקום תשובהחיבורו.

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

Page 18: תרגול מס' 5

- צופן קיסר3דוגמה

פריצת צופן קיסר

בהינתן טקסט מוצפן כיצד ניתן לגלות את הטקסט הקריא מבלי •לדעת את המפתח?

ניתן לנחש את המפתח בו הוצפן הטקסט באמצעות סטטיסטיקה •על השכיחויות של אותיות האלף בית האנגלי בטקסט כלשהו.

.12%, שכיחותה Eהאות השכיחה ביותר בטקסט באנגלית היא

הבא תכתבו תוכנית המוצאת את האות השכיחה ביותר quizב –• וככה Eבטקסט נתון. סביר להניח שאות זו היא הקידוד של האות

ניתן לחשב בכמה הזזנו את האותיות.

ניתן לנסות את כל ההסטות האפשריות )כמה כאלו יש?( •ולהשוות את התוצאה למילון.

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

Page 19: תרגול מס' 5

מיונים

n של A( - הגדרת הבעיה: בהינתן מערך array sortמיון מערך )מספרים שלמים, חשב מערך ממוין של אותם מספרים.

 למשל:

Input: 7, 18, 28, 4, 10Output: 4, 7, 10, 18, 28

ישנן שיטות מיון רבות, למשל:(Selection Sortמיון בחירה )•((Insertion Sortמיון הכנסה •(Bubble Sortמיון בועות )•

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

Page 20: תרגול מס' 5

)Bubble Sort( מיון בועות

תיאור השיטה:

תוך כדי המיון, החלק הימני של המערך כבר ממוין )"מעל פני הים"( והחלק השמאלי של המערך אינו ממוין )"מתחת לפני

הים"(.

בכל סבב, "בועה" מבעבעת עד שהיא מגיעה לפני הים. הבועה "סוחבת" איתה ערכים גדולים: בבעבוע הבועה, בכל שני תאים סמוכים בהן עוברת הבועה, מוחלפים הערכים אם אינם בסדר

המיון.

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

http://www.youtube.com/watch?v=gWkvvsJHbwY

Page 21: תרגול מס' 5

)Bubble Sort( מיון בועות

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

וכן הלאה עד אשר המערך כולו מעל פני הים.

Page 22: תרגול מס' 5

public static void bubbleSort(int[] array){

int tmp;

/* @pre: bbl=0 */

for (int bbl=0; bbl<array.length-1; bbl=bbl+1) {

/* @inv: 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;

}

}

}

/* @post: array is sorted */

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

Page 23: תרגול מס' 5

)Bubble Sort( מיון בועות

(array[index] > array[index+1]): כמה השוואות מתבצעות? שאלה

השוואות. הלולאה החיצונית n: הלולאה הפנימית מבצעת תשובההשוואות. n2 סה"כ פעמים. nמתבצעת

 

: האם כל ההשואות נחוצות? שאלה

: לא. תשובהאם המערך כבר ממוין אין צורך להמשיך בלולאה )לא צריך •

לבעבע עוד בועה(.השוואות הנעשות בחלק הממויין מיותרות )פני הים יורדים, ויש •

להשוות איברים רק מתחת לפני הים(.

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

Page 24: תרגול מס' 5

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;

}

}

}

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

Page 25: תרגול מס' 5

רקורסיה

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

Page 26: תרגול מס' 5

רקורסיה

היא פונקציה שקוראת לעצמה. פונקציה רקורסיבית

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

וכו'(.

: ישנן בעיות רבות שעבורן מוטיבציה

פתרון רקורסיבי פשוט יותר מפתרון איטרטיבי.

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

Page 27: תרגול מס' 5

רקורסיה

n: סכום מספרים טבעיים עד 1דוגמה

אפשר בלולאה )פתרון איטרטיבי(:

public static int sum(int n) {

int ans = 0;

for (int i = 1; i <= n; i = i + 1) {

ans = ans + i;

}

return ans;

}

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

Page 28: תרגול מס' 5

רקורסיה

בשם אחרת פונקציה לנו שיש נניח אחרת: בדרך גם אפשר magic 2 + 1 שמחזירה את הסכום( + ... +n-1) .

יכולה להראות כך:sumאז

public static int sum(int n) {

int ans = magic(n)+ n;

return ans;

}

הייתה מחזירה. )n-1(sum מחזירה בדיוק מה ש- )magic)nאבל

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

Page 29: תרגול מס' 5

רקורסיה

sum)n( = sum)n-1(+n ניתן להגדיר נוסחת נסיגה עבור החישוב:

 

… int ans = sum(n-1)+ n;

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

Page 30: תרגול מס' 5

רקורסיה

התוצאה היא פונקציה אחת שקוראת לעצמה:

public static int sum(int n) {

int ans;

if (n == 1) // stop condition

ans = 1;

else

ans = sum(n - 1) + n;

return ans;

}

*** מעקב על דוגמת הרצה וציור טבלאות מעקב משתנים.

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

Page 31: תרגול מס' 5

רקורסיה

: נכונות

.n ≥ 1 עוצרת לכל sum: התוכנית 1טענה .1 קטן ב-nבכל קריאה רקורסיבית •. n == 1בכל קריאה לפונקציה בודקים האם • האלגוריתם עוצר.2 ו-1מ-•

 

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

Page 32: תרגול מס' 5

רקורסיה

+ 2 + 1, האלגוריתם מחזיר את הערך n≥1 המקיים n: לכל 2טענה + …n .

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

אלגוריתמים רקורסיביים. 

. n באינדוקציה על הוכחה כנדרש.1, האלגוריתם מחזיר n=1 כאשר מקרה בסיס:

כלשהו.k≥1 נניח כי הטענה נכונה עבור הנחת האינדוקציה:האינדוקציה: קלט צעד על מופעל האלגוריתם כאשר k+1 הקריאה ,

קלט על היא הקריאה kהרקורסיבית האינדוקציה, הנחת על-פי .הסכום את תחזיר + 1הרקורסיבית 2 + … + k מוסיף לכך .

)הקלט של הקריאה הנוכחית( ומתקבל הסכום k+1האלגוריתם את 1 + 2 + … + k + )k+1(.אותו מחזיר האלגוריתם, כנדרש ,

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

Page 33: תרגול מס' 5

רקורסיה

שלושת הכללים לבניית פונקציה רקורסיבית

שניתן לענות עליו ללא קריאה רקורסיבית.תנאי עצירה1.אם לא נשים תנאי עצירה התוכנית עלולה להיכנס ללולאה

אינסופית.

קריאה רקורסיבית עם קלט הקרוב יותר לתנאי העצירה 2.)"הקטנת הבעיה"(.

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

בתוצאת הקריאה הרקורסיבית לחישוב התוצאה שימוש3.המוחזרת )הנחת האינדוקציה(.

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

Page 34: תרגול מס' 5

– משולש פסקל2דוגמה

הנבנה משולש, בצורת מספרים של סידור הוא פסקל משולש תזכורת: המספר את מכיל זה משולש של העליון הקודקוד הבא: וכל 1באופן ,

מעליו שנמצאים המספרים שני סכום את מהווה במשולש מספר (. 1)המספרים שנמצאים על שוקי המשולש הם כולם

n

0 1

1 1 1

2 1 2 1

3 1 3 3 1

4 1 4 6 4 1

5 1 5 10 10 5 1

m 0 1 2 3 4 5

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

, נותן את n בשורה ה- mהמספר ה-התשובה לשאלה "בכמה דרכים

עצמים mשונות אפשר לבחור עצמים?" )מקדם בינומי(. nמתוך

Page 35: תרגול מס' 5

– משולש פסקל2דוגמה רקורסיבית פונקציה את )pascal)int n, int mנכתוב שתחשב

במשולש פסקל. m ובעמודה nהמספר המופיע בשורה

תאור האלגוריתם.1 נחזיר ערך n=m. אם 1 נחזיר ערך 0 הוא m: אם תנאי עצירה• נציין m>n הם שלמים אי-שליליים. אם m ו- nחוקיות הקלט: •

שיש שגיאה בקלט. על קלט קטן יותר: קריאות רקורסיביות •

)המספר מעליו(m ו- n-1קריאה אחת עם

)המספר מעל ומשמאל(m-1 ו n-1קריאה שנייה עם

: החזרת סכום של הערכים שילוב התוצאות לקבלת תשובה•שהתקבלו משתי הקריאות הרקורסיביות.

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

Page 36: תרגול מס' 5

– משולש פסקל2דוגמה // Pascal number in row n and column m.

public static int pascal(int n, int m){

int ans;

if (m<0 || n<0 || m>n) {

ans = -1;

} else if (m==0 || n == m) {

ans = 1;

} else {

ans = pascal(n-1,m) + pascal(n-1,m-1);}

return ans;

}

 

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

Page 37: תרגול מס' 5

- זוגיים ואי זוגיים3דוגמה טבעי המטרה: מספר האם לבדוק הואnרוצים באמצעות אי-זוגי או זוגי

)ללא פעולות חלוקה ושארית(. oddו- evenהפונקציות

public static boolean even(int n) { boolean ans; if (n == 0) ans = true; else ans = odd(n - 1); return ans; } public static boolean odd(int n) { boolean ans; if (n == 1) ans = true; else ans = even(n - 1); return ans;מבוא למדעי המחשב, בן גוריון { 37

מה קורה כאשר מפעילים על מספר אי-זוגי evenאת

?0גדול מ

Page 38: תרגול מס' 5

- זוגיים ואי זוגיים3דוגמה

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

נסיון שני:

public static boolean even(int n) { boolean ans; if (n == 0) ans = true; else ans = odd(n - 1); return ans; } public static boolean odd(int n) { boolean ans; if (n == 0) ans = false; else ans = even(n - 1); return ans; }

קוראת even: רקורסיה הדדית קוראת odd, ו- oddלעצמה דרך . evenלעצמה דרך

Page 39: תרגול מס' 5

- פונקציה מסתורית4דוגמה מצא מה הפונקציה הבאה מחשבת:  

public static int mystery(int a, int b) {

int ans;

if (b == 0) {

ans = 0;

} else if (b % 2 == 0) {

ans = mystery(a+a, b/2);

} else {

ans = mystery(a+a, b/2) + a;

}

return ans;

}

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

)mystery)4,10. ניתן להדגים עם a*bתשובה:

Page 40: תרגול מס' 5

מצא מה הפונקציה הבאה מחשבת: 

public static int mystery(int a, int b) {

int ans;

if (b == 0) {

ans = 1;

} else if (b % 2 == 0) {

ans = mystery(a*a, b/2);

} else {

ans = mystery(a*a, b/2) * a;

}

return ans;

}

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

)mystery)2,5ניתן להדגים עם . abתשובה:

- פונקציה מסתורית4דוגמה

Page 41: תרגול מס' 5

סיכום

, +length, charAt, substring, equalsמחרוזות: •מיון בועות•רקורסיה•

הרכיבים: –תנאי עצירה •קריאות רקורסיביות עם קלט קרוב יותר לתנאי העצירה•שילוב התוצאות של הקריאות הרקורסיביות לקבלת •

התוצאה

הוכחות נכונות: עצירה, נכונות החישוב )אינדוקציה(–רקורסיה הדדית–

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