תכנות - שיעור 35
23/April/2006
תמורות
(Permutations)
תיארנו איך ליצור את כל התמורות של סדרה סופית של מספרים.
התמורה הראשונה היא בסדר מספרים עולה, והאחרונה בסדר יורד.
לדוגמא
התמורות של המספרים
.
התמורה הבאה
הצגנו את האלגוריתם שמקבל תמורה כרשימה
נתונה באורך
ומחשב את התמורה הבאה.
להלן הצעדים:
-
מצא את הזוג האחרון שבסדר עולה.
אם לא קיים כזה זוג, הגענו לתמורה האחרונה וסיימנו.
אחרת
הם המציינים
(indices)
של ה"זוג העולה"
האחרון בתמורה.
-
מצא את המספר האחרון
(במקום ה-
)
ברשימה כך ש-
-
החלף בין
.
-
הפוך (היפוך מראה) את הזנב:
.
דוגמא:
נניח
.
להלן השלבים במציאת התמורה הבאה:
-
מציאת הזוג העולה האחרון:
.
-
מציאת ה"מחליף" כלומר האחרון שגדול מ-
.
כאן הוא
.
-
החלפה:
.
-
הפיכת הזנב
.
תרגילים
פתרונות לקודמים
צפו
או
הורידו
פתרון
לתרגיל 3 (גולדבך) של שעור 33.
חדשים
-
תרגיל 5 הופך לתרגיל "חובה"
של שעור קודם.
הוא פחות קשה אם טורחים לנסות כמה מקרים.
-
צפו בתכנית
שמתארת קלפים של המשחק
"Set".
הורידו והריצו אותה.
.
יש בה יכולות של פייתון שטרם עברנו עליהם.
הם אינם מסובכים, נסו להבין אותם ורשמו נקודות לא מובנות.
-
כתבו פונקציה
next_permutation(a)
שמקבלת רשימה של מספרים a המתארת תמורה, ומחזירה את התמורה הבאה.
אם זוהי התמורה האחרונה (מספרים בסדר יורד) אז הפונקציה תחזיר
None
.
חזרה לעמוד האם