קוד האפמן – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
←‏תיאור הבעיה: הפיכה של "טקסט" ל"קבוצת תווים". ראו "תיאור האלגוריתם בשיחה:קוד האפמן
←‏תיאור הבעיה: המשך השינוי הקודם שלי
שורה 23:
הבעיה העיקרית שאותה פתר האפמן אינה תיאור הקוד עצמו, אלא מציאת [[אלגוריתם]] יעיל שמבטיח בנייה של קוד כזה בהינתן קבוצת תווים כלשהי. מרגע שקיים קוד כנדרש, קידוד ופענוח ניתנים לביצוע במעבר אחד על התווים, ולכן הבעיה הגדולה היא מציאת הקוד. מכיוון שאופטימליות הקוד מתבססת על מספר המופעים של כל תו בקבוצת התווים, לא קיים קוד אחד שנותן קידוד אופטימלי לכל קבוצת תווים, ולכן נדרשת הפעלה של האלגוריתם ובניית הקוד המתאים עבור הקבוצה.
 
מבחינה פורמלית, הקלט לבעיה הוא אוסף אותיותתווים, <math>\ a_1,a_2,\dots,a_n</math>, ומספר הפעמים שכל אותתו מופיעהמופיע בטקסטבקבוצת התווים: <math>\ c_1,c_2,\dots,c_n</math>.
 
הפלט הצפוי הוא '''קוד''', שהוא אוסף <math>\ h_1,h_2,\dots,h_n</math> של מילים בינאריות. נסמן <math>\ |h_k|</math> את אורכה של המילה ה-<math>\ k</math>.
 
היעד הוא שהקוד שיוחזר יהיה כזה כך ש- <math>\ \sum_{k=1}^n c_k\cdot|h_k|</math> יהיה מינימלי. הסכום הוא בדיוק מספר הביטים שנדרש לקידוד הטקסטקבוצת כולוהתווים כולה, שכן עבור כל אותתו, אנו מכפילים את מספר המופעים שלה בטקסטבקבוצה במספר הביטים שנדרשים כדי לייצג אותה.
 
===תיאור האלגוריתם===