קורס מחשב לרפואנים 274121

Post on 01-Jan-2016

41 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

קורס מחשב לרפואנים 274121. הרצאה 8: אינדוקציה ורקורסיה. מבוסס גם על שקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין , איתן אביאור , סאהר אסמיר טל כהן ורון פינטר ושלמה מורן. נכתב על-ידי ראובן בר-יהודה. רקורסיה. הגדרה רקורסיבית (מתוך WIKI ) - PowerPoint PPT Presentation

TRANSCRIPT

קורס מחשב לרפואנים274121

: אינדוקציה ורקורסיה8הרצאה

נכתב על-ידי ראובן בר-יהודה.

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

רקורסיה

(WIKIהגדרה רקורסיבית )מתוך •. מסתמכת על עצמה אם היא הגדרה רקורסיביתהגדרה היא •

דוגמאות:

הוא מי שנולד לאם יהודי: "אדם יהודית ההלכהלפי ה•

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

מה, רות, היא יהודייה. אך בהתאם להגדרה, דבורה יהודייה אם א"יהודייה. כדי לבדוק אם רות היא יהודייה צריך להשתמש שוב

בהגדרה הרקורסיבית, וכך הלאה. תנאי עצירה יהיה בתחילת קיומו של עמ"י.

רקורסיה לערך "רקורסיה": "ראו ערך הומוריסטית־מילוניתהגדרה •."

2

אינדוקציה ורקורסיה

3

אינדוקציה

4

בסיס: הראשון נופל.

צעד: אם מישהו נופל, אז זה שאחריו נופל

...OK(1) OK(n-1) OK(n)

OK(1)

OK(n-1) OK(n)

רקורסיה

5

ליפולn-1 מבקש מדומינו nדומינו

ליפולn-2מבקש מדומינו n-1דומינו

...

ליפול1מבקש מדומינו 2דומינו

נופל ורק אז מפולת הדומינו מתחילה1

...האם את

?יהודיה

האם את

?יהודיה

האם את

?יהודיה

האם את

?יהודיה

האם את

?יהודיה

הש

מ

הור

בד

תרו

השר

שימו לב שיש עץ של דומינו שהרקורסיה הנ"ל חשפה בו רק את השרשרת

הרלוונטית.

6שרה

משהדבורה

רות

7

ונוסחאות נסיגה )*( רקורסיה

a1( סדרת אברים ,..,an מוגדרת ע”י “נוסחת נסיגה” (או (..,

"נוסחה רקורסיבית") באופן הבא:

–an מוגדר באופן ישיר עבורn=1,2,..,k כאשר , k "קבוע "קטן ).k=1התלוי בסדרה (בדרך כלל

.תנאי עצירה, או בסיס הרקורסיהחלק זה בהגדרה נקרא גם •

האברים k מוגדר כפונקציה של an, האבר k גדול מ n עבור –.an-1 , an-2,…,an-k(an = fהקודמים לו בסדרה: (

צעד הרקורסיה"חלק זה הוא "•

----------------------------------------------(*) רקורסיה: נסיגה בלטינית

8

דוגמאות להגדרות ע"י נוסחת נסיגה

נוסחה "סגורה"an=f(n,<parameters>)

נוסחת נסיגהan=f(an-1,.., an-k)

הסדרה

an = a1 + (n-1)∙d a1

an = an-1 + d

סדרה חשבונית:3, 13, 23, 33, …

an=a1∙qn-1 a1

an = q∙an-1

סדרה הנדסית7, 14, 28, 56, …

אין נוסחה סגורה "יפה" a1 = 1

an = n∙an-1

עצרת1, 2, 6, 24, 120, …

an = (φn - (1 - φ)n) / 5φ = (1+5) / 2 ~= 1.6180כאשר

נקרא "יחס הזהב")φ(המספר

a1 = a2 = 1

an = an-1 + an-2

פיבונאצ'י1, 1, 2, 3, 5, 8, 13, …

9

נוסחת נסיגה מגדירה "פונקציה רקורסיבית":

פונקציה רקורסיבית לחישוב עצרת:•

ועוצרת (תנאי עצירה=בסיס 1 הפונקציה מחזירה n<2 כאשר •.הרקורסיה)

הפונקציה מבצעת "קריאה רקורסיבית": היא 1גדול מ- nעבור קלט •.n-1קוראת לעצמה עם ערך

.n xהערך המוחזר הוא: (תוצאת הקריאה הרקורסיבית) •

function f=myfactr(n) if n<2, f=1; else f=n*myfactr(n-1); end

בסיס הרקורסיה

קריאה רקורסיבית

10

הגדרה כללית של "פונקציה רקורסיבית":

, שהוא "פרמטר nלכל קלט מותאם מספר טבעי •הרקורסיה".

:nפעולת הפונקציה תלויה בערכו של "קטן" הנקבע ע"י הפונקציה, k ,עבור n ≤ kבסיס הרקורסיה: אם–

התוצאה מחושבת באופן ישיר .הפונקציה עשויה לקרוא לעצמה פעם , k < nקריאה רקורסיבית: אם –

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

התוצאה מחושבת ע"ס התוצאות של הקריאות הרקורסיביות.–

11

קריאה רקורסיבית במטלאב:

הכללים בקריאה רקורסיבית לפונקציה זהים לכללים הרגילים •לקריאת פונקציה:

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

הנקראת".עם ביצוע הקריאה הרקורסיבית:•

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

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

עם סביבת עבודה פרטית משלו.

12

רקורסיה בחישוב עצרת

:myfactr(5)נעקב אחרי הביצוע של •

n = 5

f= 5 *

myfactr(5)

n = 4

f= 4 *

myfactr(4)

n = 3

f= 3 *

myfactr(3)

n = 2

f= 2 *

myfactr(2)

n = 1

f= 1

myfactr(1)

function f=myfactr(n) if n==1, f=1; else f=n*myfactr(n-1); end

בסיס הרקורסיה

קריאה רקורסיבית

13

רקורסיה בחישוב עצרת

המשך ביצוע: "קפול" הרקורסיה.•

n = 5

f= 5 *

myfactr(5)

n = 4

f= 4 *

myfactr(4)

n = 3

f= 3 *

myfactr(3)

n = 2

f= 2 *

myfactr(2)

n = 1

f= 1

myfactr(1)

120

24

6

2

1

14

myfactr הפונקציה הוכחת נכונות של

עם קלט myfactrהפונקציה , nטענה: לכל מספר טבעי •n עוצרת כאשר הערך של המשתנהf הוא n!.

:nהוכחת נכונות ע"י אינדוקציה על הקלט •.1 תחזיר myfactr(1), בדיקה ישירה מראה כי n<2 עבור בסיס:–!. אזי:myfactr(n-1) = (n-1)צעד: נניח כי –

myfactr(n) = n∙myfactr(n-1) = n∙(n-1)! = n!

function f=myfactr(n) if n<2, f=1; else f=n*myfactr(n-1); end

הנחת האינדוקציה

Recursive Mona Liza

(מיקום, גודל)צייר_מונה

צייר_מלבן(מיקום, גודל)1.

אם הגודל קטן מדי, סיים.2.

צייר_פרצוף(מיקום, גודל)3.

(מיקום, גודל מוקטן)צייר_מונה4.

15

Recursive Mona Liza

16-25 -20 -15 -10 -5 0 5 10 15 20 250

5

10

15

20

25

30

35

40

1. function [] = mona(x,y,r) 2. hold on 3. plot(x+r*[0 2 2 -2 -2 0], y+r*[0 0 4 4 0 0])4. axis equal5. if r < 0.1 6. return;7. end8. face(x, y+3*r, r)

9. mona(x, y, 0.5*r)10.end

Face for mona

1. function [] = face(x,y,r)

2. cycle(x,y,r);

3. r0 = 0.3975*r;

4. cycle(x-r/2, y+r/3, r0);

5. segment(x,y-r/2,x,y+r/2);

6. cycle(x+r/2, y+r/3, r0);

7. arc_cycle(x,y,.8*r,1.25*pi,1.75*pi);

8. end

17

1. function []=segment(x1,y1,x2,y2)2. hold on3. plot([x1,x2],[y1,y2]);4. end

1. function []=arc_cycle(x0,y0,r,A,B)2. t = linspace(A,B,100);3. x = cos(t); y = sin(t);4. plot(r*x+x0, r*y+y0);5. end

1. function []=cycle(x0,y0,r)2. arc_cycle(x0,y0,r,0,2*pi);3. end

-10 -8 -6 -4 -2 0 2 4 6 8 10-10

-8

-6

-4

-2

0

2

4

6

8

10

18

19

20

0 0.5 1 1.5 2

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

Recursive face

21

1.function [] = face(x,y,r) 2. hold on 3. axis equal4. cycle(x,y,r);5. if r < 0.1 6. return;7. end8. r0 = 0.3975*r;

9. face(x-r/2, y+r/3, r0);10. segment(x,y-r/2,x,y+r/2);

11. face(x+r/2, y+r/3, r0);12. arc_cycle(x,y,.8*r,1.25*pi,1.75*pi);13.end

function []=segment(x1,y1,x2,y2) hold on plot([x1,x2],[y1,y2]);end

function []=cycle(x0,y0,r) arc_cycle(x0,y0,r,0,2*pi);end

function []=arc_cycle(x0,y0,r,A,B) t = linspace(A,B,100); x = cos(t); y = sin(t); plot(r*x+x0, r*y+y0);end

0 0.5 1 1.5 2

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

>> face2d (0,0,0.8)

{0.00,0.00,0.80

Line= 9:{-0.40,0.27,0.32

Line= 9:{-0.56,0.37,0.13

Line= 9:{-0.62,0.41,0.05]

Line=11:{-0.50,0.41,0.05]

}

Line=11:{-0.24,0.37,0.13

Line= 9:{-0.30,0.41,0.05]

Line=11:{-0.18,0.41,0.05]

}

}

Line=11:{0.40,0.27,0.32

Line= 9:{0.24,0.37,0.13

Line= 9:{0.18,0.41,0.05]

Line=11:{0.30,0.41,0.05]

}

Line=11:{0.56,0.37,0.13

Line= 9:{0.50,0.41,0.05]

Line=11:{0.62,0.41,0.05]

}

}

}22

00

.5

11

.5

2

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

הרצה, צעד צעד

top related