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

מתוך ויקיפדיה, האנציקלופדיה החופשית
תוכן שנמחק תוכן שנוסף
Thijs!bot (שיחה | תרומות)
מ רובוט מוסיף: ja:原始再帰関数
שורה 77: שורה 77:
[[fr:Fonction récursive primitive]]
[[fr:Fonction récursive primitive]]
[[it:Funzione ricorsiva primitiva]]
[[it:Funzione ricorsiva primitiva]]
[[ja:原始再帰関数]]
[[zh:原始递归函数]]
[[zh:原始递归函数]]

גרסה מ־15:34, 24 בינואר 2007

פונקציות פרימיטיביות רקורסיביות הן אחד הנושאים הבסיסיים בתורת החישוביות.

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

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

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

הגדרה

מחלקה של פונקציות שלמות, בתורת החישוביות, נקראת סגורה תחת רקורסיה פרימיטיבית (Primitive Recuresively Closed או PRC), אם היא מכילה את הפונקציות התחיליות:

  • - פונקציית העוקב.
  • - פונקציית האפס.
  • - פונקציית ההטלה לרכיב ה-i.

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

היא פונקציה רקורסיבית פרימיטיבית.


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

דוגמאות

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

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

חיבור

פונקציית החיבור:
היא פונקציה פרימיטיבית רקורסיבית. {צריך לבוא הסבר על למה היא פרימיטיבית רקורסיבית}

חיסור

פונקציית החיסור מקבלת כקלט שני מספרים טבעיים, ומחזירה את ההפרש ביניהם. תמונת פונקציית החיסור אינה תמיד מספר טבעי, ולכן יש לתקן זאת. למשל, כאשר מופעלת פונקציית החיסור הרגילה על הפרמטרים 4 ו6 (ארבע פחות שש), תמונת הפונקציה תהיה הערך מינוס 2, אשר אינו מספר טבעי. לכן נשנה את תמונת הפונקציה ל-0 כאשר התמונה שלילית. כך, תמונת הפונקציה על הפרמטרים 4 ו-6 היא 0.

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

כפל, חזקה, ועצרת

פונקציית הכפל, החזקה, והעצרת:




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

חילוק

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


{איך עושים "חילוק" כזה?}

שימושים

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

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

קשר למודלים חישוביים שונים

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

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