תכנות - שיעור 35 23/April/2006    

תמורות (Permutations)

תיארנו איך ליצור את כל התמורות של סדרה סופית של מספרים. התמורה הראשונה היא בסדר מספרים עולה, והאחרונה בסדר יורד. לדוגמא lteq1.png התמורות של המספרים lteq2.png .

lteq3.png

התמורה הבאה

הצגנו את האלגוריתם שמקבל תמורה כרשימה
lteq4.png
נתונה באורך lteq5.png ומחשב את התמורה הבאה. להלן הצעדים:
  1. מצא את הזוג האחרון שבסדר עולה. אם לא קיים כזה זוג, הגענו לתמורה האחרונה וסיימנו. אחרת lteq6.png הם המציינים (indices) של ה"זוג העולה" lteq7.png האחרון בתמורה.
  2. מצא את המספר האחרון lteq8.png (במקום ה- lteq9.png ) ברשימה כך ש- lteq10.png
  3. החלף בין lteq11.png .
  4. הפוך (היפוך מראה) את הזנב: lteq12.png .

דוגמא:

נניח lteq13.png . להלן השלבים במציאת התמורה הבאה:
  1. מציאת הזוג העולה האחרון: lteq14.png .
  2. מציאת ה"מחליף" כלומר האחרון שגדול מ- lteq15.png . כאן הוא lteq16.png .
  3. החלפה: lteq17.png .
  4. הפיכת הזנב lteq18.png .

תרגילים

פתרונות לקודמים

צפו או הורידו פתרון לתרגיל 3 (גולדבך) של שעור 33.

חדשים

  1. תרגיל 5 הופך לתרגיל "חובה" של שעור קודם. הוא פחות קשה אם טורחים לנסות כמה מקרים.
  2. צפו בתכנית שמתארת קלפים של המשחק "Set". הורידו והריצו אותה. . יש בה יכולות של פייתון שטרם עברנו עליהם. הם אינם מסובכים, נסו להבין אותם ורשמו נקודות לא מובנות.
  3. כתבו פונקציה
    next_permutation(a)
    שמקבלת רשימה של מספרים a המתארת תמורה, ומחזירה את התמורה הבאה. אם זוהי התמורה האחרונה (מספרים בסדר יורד) אז הפונקציה תחזיר None.

חזרה לעמוד האם