40
ססססס סס'5 םםםםםם ססססססס )סססס ססססס( סססס ססססססס1 סססס ססססס ססססס, סס סססססס ססס"ס

תרגול מס' 5

  • Upload
    sveta

  • View
    106

  • Download
    0

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 = null;

String s4 = "";

String s5 = new String();

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

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

מחרוזות

אורך•

s2.length() 4

s3.length()

NullPointerException

s4.length() 0

4

String s2 = "abcd";

String s3 = null;

String s4 = "";

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

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 החל מאינדקס תת-מחרוזת•

s2.substring(1,3) "bc"

s2.substring(1) "bcd"

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

s2.equals(s4)

+ שרשור•

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

6

String s2 = "abcd";

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

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

מחרוזות

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

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

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

reverse בסדר )מיקום( הפוך. הפונקציה

על המחרוזת reverseהראשית מפעילה את

"Hello"( ומדפיסה את התוצאה olleH.)

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

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

public class StringReverser {

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;

}

public static void main ( String[] args ) {

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

}

}

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

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

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

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

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

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

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

1.

String "abcd"

Index 0123

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

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

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

public static boolean isSubstring(String str,String sub){

boolean found = false;

int lastInd = str.length()- sub.length();

for ( int i=0; i<=lastInd && !found; i=i+1) {

String strSub = str.substring(i, i+sub.length());

if (strSub.equals(sub))

found = true;

}

return found;

}

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

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

ASCIIטבלת

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

מחרוזות– צופן קיסר 3דוגמה

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

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

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

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

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

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

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

מחרוזות

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

.EDEBלמילה

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

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

public static String encrypt(String str, int key) {

String ans = "";

final int NUM_OF_LETTERS_IN_ALPHABET = 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) % NUM_OF_LETTERS_IN_ALPHABET)+'A';

}

else if ('a'<=c & c<='z'){

c = c - 'a';

c = ((c + key) % NUM_OF_LETTERS_IN_ALPHABET)+'a';

}

ans = ans + (char)c;

}

return ans;

}

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

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

מחרוזות:כמה הערות

; 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תקן

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

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

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

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

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

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

מחרוזות

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

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

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

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

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

הזזנו את האותיות.

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

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

מיונים

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

של אותם מספרים. 

למשל:Input: 7 , 18, 28 , 4, 10Output: 4, 7, 10 , 18 , 28

ישנם שיטות מיון רבות, כמו: מיון בחירה, מיון הכנסה ומיון בועות.

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

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

מיונים

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

תיאור השיטה:תוך כדי המיון, החלק הימני של המערך כבר ממוין

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

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

בביעבוע הבועה, בכל שני תאים סמוכים בהן עוברת הבועה, מוחלפים הערכים אם הם לא

בסדר המיון.

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

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

מיונים

20

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

 http://www.youtube.com/watch?v=t_xkgcakREw&feature=related

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

Page 21: תרגול מס' 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 */

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

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

מיונים

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

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

השוואות. n2 סה"כ  

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

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

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

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

Page 23: תרגול מס' 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;

}

}

}

}

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

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

רקורסיה

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

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

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

 

: סכום המספרים הטבעיים 1דוגמה n עבור n + .... + 2 + 1נרצה לחשב את הסכום

נתון. מבוא למדעי המחשב, בן גוריון תשע"א24

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

רקורסיה

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

public static int sum(int n) {

int ans = 0;

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

ans = ans + i;

return ans;

}

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

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

רקורסיה

בשם אחרת פונקציה לנו שיש נניח אחרת: בדרך גם ואפשר magicשמחזירה את הסכום

1 + 2( + ... +n-1) אז .sum:יכולה להראות כך

public static int sum(int n) {

int ans = magic(n)+ n;

return ans;

}

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

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

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

רקורסיה

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

 

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

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

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

רקורסיה

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

// @pre: n>=1

public static int sum(int n) {

int ans;

if (n == 1) // stop condition

ans = 1;

else // recursive call i=1..ni = i=1..(n-1)i + n

ans = sum(n - 1) + n;

return ans;

}

// @post: returns i=1..ni

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

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

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

רקורסיה

: נכונות

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

 

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

Page 30: תרגול מס' 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(.אותו מחזיר האלגוריתם, כנדרש ,

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

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

רקורסיה

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

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

ללולאה אינסופית. קריאה רקורסיבית עם קלט הקרוב יותר לתנאי 2.

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

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

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

Page 32: תרגול מס' 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

32

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

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

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

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

רקורסיהשתחשב )pascal)int n, int mנכתוב פונקציה רקורסיבית

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

תאור האלגוריתם נחזיר n=m. אם 1 נחזיר ערך 0 הוא m: אם תנאי עצירה•

.1ערך m>n הם שלמים אי-שליליים. אם m ו- nחוקיות הקלט: •

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

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

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

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

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

רקורסיה// 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;

}

 

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

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

רקורסיה – זוגיים ואי זוגיים:3דוגמה

ו- even זוגי או אי זוגי באמצעות הפונקציות nרוצים לבדוק האם מספר טבעי odd )ללא פעולות חלוקה ושארית(

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

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

רקורסיה

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

ניסיון שני: public static boolean odd(int n) { boolean ans; if (n == 0) ans = false; else ans = even(n - 1); return ans; }

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

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

Page 37: תרגול מס' 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; }

37

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

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

Page 38: תרגול מס' 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; }

38

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

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

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

רקורסיה – הסדרה ההרמונית*:5דוגמה

. היא הסדרה הסדרה ההרמונית

הסבר מתחום המוסיקה: הסדרה קרויה כך בגלל הצלילים העיליים )אוברטונים, הרמוניות(. אורכי המיתרים שיוצרים את

הצלילים העיליים פרופורציונליים לסדרה אחת, חצי, שליש וכו'. איברים מהטור ההרמוני.nכתוב תוכנית שתחשב את הסכום של

  public static double harmony(int n) { double ans; if (n == 1) ans = 1.0; else ans = harmony(n-1) + 1.0/n; return ans; }

39

n

1,...,

3

1,

2

1,1

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

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

סיכום

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

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

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

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