אי-שוויון קראפט
בתורת האינפורמציה, אי-שוויון קראפט (Kraft's Inequality) מתאר תנאי מספיק והכרחי לשיוך קבוצת מילים לצמתי עץ, כך שלא תשויך יותר ממילה אחת לאורך כל מסלול היוצא מהראש. לתכונת שיוך זו יישומים בבניית קודים.
הגדרה
[עריכת קוד מקור | עריכה]נניח קבוצה מעוצמה סופית או אלף אפס של מילים מעל א"ב כלשהו . אי-שוויון קראפט אומר כי התנאי הוא מספיק והכרחי לשיוך כל מילה ב- לצומת עץ (אולי אינסופי) בעל דרגת יציאה , כך ש:
- כל מילה משויכת לצומת יחיד בעומק השווה לאורך המילה.
- אין שתי מילים המשויכות לצומת וצאצא שלו.
דוגמה
[עריכת קוד מקור | עריכה]נניח א"ב בעל שלוש אותיות, לדוגמה . נניח שיש לנו קבוצה בת חמש מילים מעל א"ב זה, שאורכיהן הם . עלינו למצוא שיוך לעץ המוצג בצד שמאל כך שארבעה צמתים בגובה 2 ישויכו, צומת אחד בגובה 1 ישויך, ואף צומת משויך לא יהיה צאצא של צומת משויך אחר.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/KlomogorovTree_0.png/220px-KlomogorovTree_0.png)
במקרה זה, ולכן אי-שוויון קראפט מבטיח שיש שיוך מתאים. ואכן, השיוך בתרשים בצד שמאל הוא שיוך מתאים.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/3/31/KolmogorovTree_3.png/220px-KolmogorovTree_3.png)
אלגוריתם מקוון
[עריכת קוד מקור | עריכה]נחשוב על תהליך כלשהו המייצר את מילות הקבוצה אחת אחרי השנייה. לעיתים יש צורך, ברגע שמילה נוצרת, לשייך אותה לצומת בעץ. ישנו אלגוריתם מקוון פשוט מאוד המתאים לאי-שוויון קראפט.
נסמן כל צומת בעץ כפנוי, משויך, או תפוס.
- בתחילה, כל צומת יהיה פנוי.
- בכל פעם שצומת הופך להיות משויך, כל אחד מאבותיו (עד השורש) נהיה תפוס (ייתכן שחלקם כבר היו תפוסים).
- אם בצעד כלשהו צריך לשייך צומת ברמה , נמצא את הצומת הפנוי השמאלי ביותר ברמה זו, ונשייך אותו.
המשפט לעיל אומר שאי-שוויון קראפט מתקיים אמ"ם אין צעד שבו אי אפשר למצוא צומת פנוי.
חשיבות
[עריכת קוד מקור | עריכה]כאשר מילים משויכות לעצים, אפשר לבנות קוד למילים. בהינתן מילה, נמצא את הצומת המתאים למילה, ונתאר את המילה בעזרת המסלול המוביל מראש העץ למילה. בתרשים הקודם, לדוגמה, המילים השייכות לצמתים יתוארו, משמאל לימין, על ידי המחרוזות:
- 00 (רד שמאלה פעמיים)
- 1 (רד ישר פעם אחת)
- 20 (רד ימינה ואז שמאלה)
- 21 (רד ימינה ואז ישר)
- 22 (רד ימינה פעמיים)
כאשר משתמשים בשיטה זו לקידוד רצף מילים, עולה הבעיה היכן מסתיים קידוד מילה אחת ומתחיל קידוד המילה הבאה. לדוגמה, נניח שקידוד רצף המילים הוא 201002:
- רצף הקידודים עשוי להיות 20,10,02,
- רצף הקידודים עשוי להיות 201, 00, 2
- וכו'
אם השיוכים הם כאלה כך שאף צומת משויך אינו צאצא של צומת משויך אחר, אזי אין בעיה כזאת. מפענחים את התיאורים לפי השיטה הבאה:
- מתחילים בראש העץ.
- יורדים לפי הסימנים עד שמגיעים לצומת משויך. מפענחים את המילה וחוזרים לשלב הקודם.
לפי הבניה, ההגעה לצומת משויך מהווה אינדיקציה שאין טעם להמשיך במסלול - לא ייתכן צומת משויך נוסף בהמשך.