Unary coding
קידוד תרמומטר או קידוד אונרי הוא שיטת קידוד אנטרופיה המייצגת מספר טבעי, n, באמצעות קוד באורך n + 1 (או n), בדרך כלל n אחדים לאחר מכן אפס (אם מספר טבעי מתפרש כמספר שלם חיובי) או עם n - 1 אחדים לאחר מכן אפס (אם מספר טבעי מתפרש כמספר שלם חיובי באופן מחמיר). לדוגמה, המספר 5 מיוצג כ-111110 או 11110. ישנן ייצוגים המשתמשים ב-n או n - 1 אפסים לאחר מכן אחד. האחדים והאפסים ניתנים להחלפה ללא פגיעה בכלליות. קידוד אונרי הוא הן קוד ללא תחילית וגם קוד עצמי מסתדר.
n (לא שלילי) | n (חיובי באופן מחמיר) | קידוד אונרי | חלופי |
---|---|---|---|
0 | 1 | 0 | 1 |
1 | 2 | 10 | 01 |
2 | 3 | 110 | 001 |
3 | 4 | 1110 | 0001 |
4 | 5 | 11110 | 00001 |
5 | 6 | 111110 | 000001 |
6 | 7 | 1111110 | 0000001 |
7 | 8 | 11111110 | 00000001 |
8 | 9 | 111111110 | 000000001 |
9 | 10 | 1111111110 | 0000000001 |
קידוד אונרי הוא קידוד יעיל באופן אופטימלי להתפלגויות הסתברות בדיסקרטיות הבאות:
עבור .
בקידוד סמל אחר סמל, הוא אופטימלי לכל התפלגות גאומטרית:
עבור ≥ φ = 1.61803398879..., יחס הזהב, או, באופן כללי יותר, עבור כל התפלגות דיסקרטית בה מתקיים:
עבור . אף על פי שזהו הקידוד הסמלי האופטימלי מבחינה סמלית להתפלגויות הסתברות אלו, קידוד גולומב משיג יכולת דחיסה טובה יותר להתפלגות הגאומטרית משום שהוא לא שוקל סמלים באופן בלעדי אלא קובץ אותם באופן 隐פליטי. לאותה סיבה, קידוד אריתמטי מבצע טוב יותר להתפלגויות הסתברות כלליות, כפי שבמקרה האחרון לעיל.
קידוד אונרי בשימוש כיום[עריכה]
דוגמאות לשימושים בקידוד אונרי כוללים:
- בקידוד גולומב-רייס, קידוד אונרי משמש לקידוד החלק המחולק של מילת הקוד של גולומב.
- ב-UTF-8, קידוד אונרי משמש בבית המוביל של סדרת בתים מרובים כדי להודיע על מספר הבתים בסדרה כך שאורכה של הסדרה יוכל להיות מוגדר ללא בדיקת בתי ההמשך.
- רשתות נוירונים מוכשרות מיידית משתמשות בקידוד אונרי לייצוג נתונים יעיל.
קידוד אונרי ברשתות ביולוגיות[עריכה]
קידוד אונרי משמש במעגלים הנוירונים האחראים על יצירת שירת הציפורים. הגרעין במוח הציפורים השרים שממלא תפקיד הן בלמידה והן ביצירת שיר הציפור הוא ה-HVC (מרכז קולי גבוה). פקודות השליטה עבור תווים שונים בשיר הציפור יוצאים מנקודות שונות ב-HVC. קידוד זה עובד כקידוד מרחבי שהוא אסטרטגיה יעילה עבור מעגלים ביולוגיים הודות לפשטותו ולעמידותו הטבעית.
קודים אונריים באורכי ריצה תקניים[עריכה]
כל הנתונים הבינאריים מוגדרים על ידי היכולת לייצג מספרים אונריים באורכי ריצה חליפיים של 1 ו-0. זהו תאמה להגדרה התקנית של אונרי, כלומר N ספרות של אותה ספרה 1 או 0. כל אורכי הריצה בהגדרה מכילים לפחות ספרה אחת וכך מייצגים מספרים שלמים חיוביים באופן מחמיר.
n | קוד RL | הקוד הבא |
---|---|---|
1 | 1 | 0 |
2 | 11 | 00 |
3 | 111 | 000 |
4 | 1111 | 0000 |
5 | 11111 | 00000 |
6 | 111111 | 000000 |
7 | 1111111 | 0000000 |
8 | 11111111 | 00000000 |
9 | 111111111 | 000000000 |
10 | 1111111111 | 0000000000 |
... |
קודים אלו מבטיחים להסתיים באופן תקין בכל אורך של נתונים (כאשר קוראים נתונים כלשהם) ובמחזור הכתיבה (נפרד) מאפשרים שימוש והעברה של ביט נוסף (זה שמשמש לביט הראשון) תוך שמירה על אורכי קודים אונריים כלליים ולכל מספר שלם של N בדיוק.
קודים אונריים לא מונחי תחילית ניתנים לפענוח באופן ייחודי[עריכה]
להלן דוגמה לקודים אונריים ניתנים לפענוח באופן ייחודי שאינם קוד תחילית ואינם מפוענחים מיידית (נזקקים להסתכלות קדימה כדי לפענח)
n | קוד אונרי | חלופי |
---|---|---|
1 | 1 | 0 |
2 | 10 | 01 |
3 | 100 | 011 |
4 | 1000 | 0111 |
5 | 10000 | 01111 |
6 | 100000 | 011111 |
7 | 1000000 | 0111111 |
8 | 10000000 | 01111111 |
9 | 100000000 | 011111111 |
10 | 1000000000 | 0111111111 |
... |
קודים אלו גם (כאשר כותבים מספרים שאינם סימנים) מאפשרים שימוש והעברה של ביט נוסף (זה שמשמש לביט הראשון). כך הם יכולים להעביר 'm' מספרים שלמים * N ביטים אונריים וביט נוסף של מידע בתוך m*N ביטי נתונים.
קודים אונריים סימטריים[עריכה]
הקבוצה הבאה של קודים אונריים הם סימטריים וניתנים לקריאה בכל כיוון. הם גם ניתנים לפענוח מיידי בכל כיוון.
n (חיובי באופן מחמיר) | קוד אונרי | חלופי | n (לא שלילי) |
---|---|---|---|
1 | 1 | 0 | 0 |
2 | 00 | 11 | 1 |
3 | 010 | 101 | 2 |
4 | 0110 | 1001 | 3 |
5 | 01110 | 10001 | 4 |
6 | 011110 | 100001 | 5 |
7 | 0111110 | 1000001 | 6 |
8 | 01111110 | 10000001 | 7 |
9 | 011111110 | 100000001 | 8 |
10 | 0111111110 | 1000000001 | 9 |
... |
קודים אונריים קנוניים[עריכה]
עבור ערכים אונריים שבהם המקסימום ידוע, ניתן להשתמש בקודים אונריים קנוניים שהם בעלי אופי מספרי מעט ושונה מקודים מבוססי תווים. זה כולל התחלה עם מספר מספרי '0' או '-1' () והמספר המרבי של הספרות ואז לכל צעד הפחתה במספר הספרות באחת והגדלת/הקטנת התוצאה במספר '1'.
n | קוד אונרי | חלופי |
---|---|---|
1 | 1 | 0 |
2 | 01 | 10 |
3 | 001 | 110 |
4 | 0001 | 1110 |
5 | 00001 | 11110 |
6 | 000001 | 111110 |
7 | 0000001 | 1111110 |
8 | 00000001 | 11111110 |
9 | 000000001 | 111111110 |
10 | 000000000 | 111111111 |
קודים קנוניים יכולים לדרוש פחות זמן עיבוד לפענוח כאשר הם מעובדים כמספרים ולא כמחרוזת. אם מספר הקודים הדרושים לכל אורך סמל שונה מ-1, כלומר יש יותר קודים לא אונריים באורך מסוים הדרושים, אלה יושגו על ידי הגדלת/הקטנת הערכים מספרית ללא הפחתת האורך במקרה זה.
קידוד אונרי מוכלל[עריכה]
גרסה מוכללת של קידוד אונרי הוצגה על ידי סובהאש קאק כדי לייצג מספרים ביעילות הרבה יותר גבוהה מקידוד אונרי תקני. להלן דוגמה לקידוד אונרי מוכלל עבור מספרים שלמים מ-0 עד 15 שדורשים רק 7 ביטים (שבהם שלושה ביטים נבחרים באופן שרירותי במקום ביט אחד בקידוד אונרי תקני כדי להראות את המספר). שימו לב שהייצוג הוא ציקלי שבו משתמשים במסמכים כדי לייצג מספרים גבוהים יותר במחזורים גבוהים יותר.
n | קידוד אונרי | קידוד אונרי מוכלל |
---|---|---|
0 | 0 | 0000000 |
1 | 10 | 0000111 |
2 | 110 | 0001110 |
3 | 1110 | 0011100 |
4 | 11110 | 0111000 |
5 | 111110 | 1110000 |
6 | 1111110 | 0010111 |
7 | 11111110 | 0101110 |
8 | 111111110 | 1011100 |
9 | 1111111110 | 0111001 |
10 | 11111111110 | 1110010 |
11 | 111111111110 | 0100111 |
12 | 1111111111110 | 1001110 |
13 | 11111111111110 | 0011101 |
14 | 111111111111110 | 0111010 |
15 | 1111111111111110 | 1110100 |
קידוד אונרי מוכלל דורש שטווח המספרים שייצגו יוגדר מראש משום שטווח זה קובע את מספר הביטים הנדרשים.