tomron87/hebrew-wikipedia-sentences-corpus huggingface dataset:
תהליך אימות ה־PIN שפיתח עטאללה היה דומה לזה שיושם מאוחר יותר במערכת IBM 3624.
בשנת 1998 הוערך כי כ־70% מכלל העסקאות בכספומטים בארצות הברית נותבו דרך מודולי חומרה ייעודיים של עטאללה.
בשנת 2003 כבר אבטחה קופסת עטאללה כ־80% מהכספומטים בעולם, והנתח עלה ל־85% עד שנת 2006.
נכון לשנת 2013, מוצרי ה־HSM של עטאללה מגנים על כ־250 מיליון עסקאות בכרטיסים מדי יום, ועד 2014 המשיכו לאבטח את רוב העסקאות בכספומטים ברחבי העולם.
בהקשר של עסקה פיננסית, נדרש לרוב שילוב בין קוד זיהוי אישי (PIN) שהוא סודי, לבין מזהה משתמש ציבורי לצורך אימות זהות המשתמש מול המערכת.
במקרים אלו, על המשתמש לספק מזהה משתמש שאינו חסוי (כגון מספר משתמש או אסימון) וכן קוד PIN חסוי לצורך גישה למערכת.
עם קבלת מזהה המשתמש וה־PIN, המערכת מאתרת את קוד ה־PIN המשויך למזהה שנמסר, ומשווה אותו לקוד שהוזן בפועל.
גישה תינתן רק כאשר שני הקודים תואמים.
לכן, אף על פי שמו, קוד ה־PIN אינו מזהה את המשתמש באופן אישי.
קוד ה־PIN אינו מודפס על הכרטיס ואינו מוטמע בו, אלא מוזן ידנית על ידי בעל הכרטיס בעת ביצוע עסקאות בכספומט או בנקודת מכירה (POS), לרבות עסקאות התואמות את תקן EMV.
כן נעשה בו שימוש בעסקאות שבהן הכרטיס אינו נוכח פיזית, כגון עסקאות אינטרנט או בנקאות טלפונית.
התקן הבין־לאומי לניהול קודי PIN בשירותים פיננסיים, ISO 9564-1, מאפשר שימוש בקודים בני ארבע עד שתים־עשרה ספרות, אך ממליץ שמנפיק הכרטיס לא יקצה קוד PIN העולה על שש ספרות, מטעמי נוחות שימוש.
ממציא מכשיר הכספומט, ג'ון שפרד־ברון, תכנן בתחילה להשתמש בקוד מספרי בן שש ספרות, אך לאחר שאשתו ציינה כי היא מסוגלת לזכור רק ארבע ספרות – הפך אורך זה לנפוץ ביותר במדינות רבות.
עם זאת, בנקים בשווייץ ובמדינות נוספות מחייבים שימוש בקוד PIN בן שש ספרות.
קיימות מספר שיטות עיקריות לאימות קודי זיהוי אישיים (PIN).
הפעולות המפורטות להלן מתבצעות בדרך כלל בתוך מודול אבטחה חומרה (HSM).
אחד מדגמי הכספומט הראשונים היה IBM 3624, אשר השתמש ב"שיטת IBM" ליצירת קוד זיהוי אישי (PIN) המכונה "PIN טבעי".
קוד זה מופק על ידי הצפנה של מספר החשבון הראשי (PAN), באמצעות מפתח הצפנה שיועד במיוחד למטרה זו.
מפתח זה מכונה לעיתים מפתח יצירת PIN (PIN Generation Key – PGK).
ה־PIN שנוצר קשור באופן ישיר למספר החשבון הראשי.
לצורך אימות הקוד, מנפיק הכרטיס (הבנק) יוצר מחדש את ה־PIN באותה שיטה, ומשווה אותו לקוד שהוזן בפועל.
PIN טבעי אינו ניתן לבחירה על ידי המשתמש, משום שהוא נגזר ממספר החשבון הראשי (PAN).
כאשר מונפק כרטיס חדש עם מספר PAN שונה, יש להפיק קוד PIN (קוד סודי) חדש בהתאם.
קוד PIN טבעי מאפשר לבנקים לשלוח מכתבי תזכורת ללקוחות, מאחר שניתן ליצור מחדש את הקוד באופן דטרמיניסטי מתוך מספר החשבון הראשי (PAN).
שיטת ההיסט (Offset) של IBM 3624
כדי לאפשר בחירת קוד PIN על ידי המשתמש, ניתן לשמור ערך שנקרא היסט PIN (PIN Offset).
ההיסט מחושב על ידי חיסור ה־PIN הטבעי מה־PIN שבחר הלקוח, בחישוב מודולו 10.
לדוגמה: אם קוד ה־PIN הטבעי הוא 1234, והמשתמש מעוניין בקוד 2345, אזי ההיסט הוא 1111.
ניתן לאחסן את ערך ההיסט (Offset) בנתוני הפס המגנטי שעל גבי הכרטיס, או במסד נתונים אצל מנפיק הכרטיס.
לצורך אימות קוד ה־PIN, מנפיק הכרטיס מחשב את ה־PIN הטבעי לפי השיטה שתוארה לעיל, מוסיף אליו את ערך ההיסט (Offset), ומשווה את התוצאה לקוד שהוזן בפועל על ידי המשתמש.
שיטת VISA משמשת על ידי חברות כרטיסים רבות ואינה ייחודית ל־VISA בלבד.
בדומה לערך ההיסט (Offset), ניתן לאחסן את ערך ה־PVV בנתוני הפס המגנטי של הכרטיס, או במסד נתונים אצל מנפיק הכרטיס (הבנק/חברת האשראי).
ערך זה מכונה ערך PVV ייחוסי (Reference PVV).
האינדקס PVKI משמש לבחירת מפתח אימות PIN (PVK) בגודל של 128 סיביות, אשר משמש להצפנת המספר.
מתוך הערך המוצפן מתקבל ערך אימות ה־PIN (PVV).
כדי לאמת את הקוד הסודי (PIN), הבנק/המנפיק מחשב את ערך ה־PVV מהקוד שהוזן וממספר הכרטיס (PAN), ומשווה ערך זה לערך ה-PVV השמור במערכת.
אם ערך ה-PVV המחושב תואם לערך ה-PVV השמור, המשמעות היא שהוזן הקוד הסודי הנכון.
בניגוד לשיטת IBM, שיטת VISA אינה גוזרת קוד סודי (PIN) טבעי.
ערך ה-PVV (ערך אימות קוד סודי) משמש לאימות הקוד שהוזן במסוף, והוא גם הערך ששימש ליצירת ה-PVV השמור.
הקוד הסודי המשמש ליצירת PVV יכול להיבחר באקראי, להיבחר על ידי המשתמש, או אף להיגזר באמצעות שיטת IBM.
קודים סודיים פיננסיים (PIN) הם לרוב מספרים בני ארבע ספרות בטווח 0000–9999, כך שישנן 10,000 אפשרויות שונות.
בשווייץ, ברירת המחדל היא קוד סודי בן שש ספרות.
בחלק מהמערכות מוגדר קוד סודי (PIN) כברירת מחדל, וברובן מתאפשר ללקוח לבחור קוד סודי או לשנות את הקוד שהוגדר מראש, ולעיתים אף נדרש שינוי הקוד כבר בשימוש הראשון.
בדרך כלל מומלץ ללקוחות שלא לבחור קוד המבוסס על תאריכי לידה שלהם או של בני זוגם, מספרי רישיון נהיגה, רצפים או חזרות של ספרות, או דפוסים דומים.
ישנם מוסדות פיננסיים שאינם מאפשרים קודים שבהם כל הספרות זהות (כגון 1111, 2222), רצפים עוקבים (1234, 2345), קודים המתחילים באפס אחד או יותר, או ארבע הספרות האחרונות של מספר תעודת הזהות או תאריך הלידה של בעל הכרטיס.
מערכות רבות לאימות קוד סודי (PIN) מאפשרות שלושה ניסיונות להזנת קוד שגוי, ובכך מעניקות לגנב כרטיס סיכוי/היסתברות של כ-0.03% לנחש את הקוד הנכון לפני שהכרטיס ייחסם.
נתון זה נכון רק אם כל הקודים האפשריים סבירים באותה מידה, ולתוקף אין מידע נוסף – תנאי שלא תמיד מתקיים, שכן בעבר היו אלגוריתמים ליצירה ואימות קודים שהפחיתו את רמת האקראיות.
נערכו מחקרים על קודים סודיים (PIN) נפוצים בשימוש.
נמצא כי ללא מחשבה מוקדמת, חלק ניכר מהמשתמשים עלול להיחשף לסיכון.
"בהנחה של ארבעה ניסיונות בלבד, תוקפים יכולים לפצח 20% מכלל הקודים הסודיים.
אם יינתנו להם עד חמש־עשרה אפשרויות, יוכלו להגיע לחשבונות של יותר מרבע מהמחזיקים בכרטיסים".
קוד PIN שביר יכול להחמיר עם האורך, כלומר:
הבעיה של קודי זיהוי אישיים (PIN) שניתן לנחש אותם מחמירה באופן מפתיע כאשר לקוחות נדרשים להשתמש במספרים ארוכים יותר.
הסיכוי לניחוש נכון עולה מכ־25% כאשר קיימים 15 קודים נפוצים, ליותר מ־30%, וזאת מבלי לכלול קודים בני שבע ספרות הדומים למספרי טלפון.
למעשה, כ־50% מכלל הקודים בני תשע ספרות מצטמצמים לכשני תריסר אפשרויות בלבד, בעיקר בשל העובדה שלמעלה מ־35% מהמשתמשים בוחרים את הקוד הקל מדי לניחוש 123456789.
אשר ל־64% הנותרים, סביר להניח שרבים מהם משתמשים במספר תעודת הזהות שלהם (בארצות הברית: מספר ביטוח לאומי), דבר ההופך אותם לפגיעים, מאחר שמספרי ביטוח לאומי בנויים לפי תבניות מוכרות מראש.
בשנת 2002 גילו שני דוקטורנטים מאוניברסיטת קיימברידג' – פיוטר ז'לינסקי ומייק בונד – פגם אבטחה במערכת יצירת קוד ה־PIN של IBM 3624, פגם אשר שוכפל גם ברוב החומרות המאוחרות יותר.
הפגם, שנודע בשם "התקפת טבלת העשרון" (Decimalization Table Attack), מאפשר לתוקף בעל גישה למערכת המחשוב של הבנק לחשוף את קוד ה־PIN של כרטיס כספומט בממוצע לאחר 15 ניסיונות בלבד.
שמועות שהופצו בדואר אלקטרוני וברשת האינטרנט טוענות כי הקלדת קוד PIN בסדר הפוך בכספומט תפעיל התרעה מיידית למשטרה, תוך שהמכשיר ימשיך להנפיק מזומנים כרגיל, כאילו הוזן הקוד הנכון.
מטרת רעיון זה, לפי הטענה, היא להגן על קורבנות של שוד או תקיפה בעת שימוש בכספומט.
אף שהמערכת הוצעה ליישום בכמה מדינות בארצות הברית, אין כספומטים הפועלים בפועל עם תוכנה כזו.
טלפון נייד עשוי להיות מוגן באמצעות קוד PIN.
כאשר פונקציה זו מופעלת, קוד ה־PIN (המכונה גם קוד גישה) בטלפונים סלולריים בתקן GSM יכול להכיל בין ארבע לשמונה ספרות, והוא נשמר על גבי כרטיס ה־SIM.
אם הקוד מוזן בצורה שגויה שלוש פעמים, הכרטיס נחסם ודורש הזנת קוד שחרור אישי (PUC או PUK), הנמסר על ידי מפעיל השירות הסלולרי.
אם ה־PUK מוזן בצורה שגויה עשר פעמים, הכרטיס נחסם לצמיתות ויש צורך בהנפקת כרטיס SIM חדש על ידי ספק השירות.
יש להבחין בין קוד ה־PIN של כרטיס ה־SIM לבין קוד גישה מבוסס תוכנה הנמצא בשימוש במסכי נעילה של טלפונים חכמים.
קוד זה אינו קשור לכרטיס ה־SIM, לקוד ה־PIN או לקוד השחרור (PUC).
קוד מורס הוא קוד עבור שיטות תקשורת קולית או חזותית בינאריות - שיטות שידור בהן יש שני מצבים: דולק וכבוי.
הקוד פותח על ידי סמואל מורס ואלפרד וייל במהלך שנות השלושים של המאה ה-19. קוד המורס הבינלאומי שבו נעשה שימוש ברוב חלקי העולם נקבע בשנת 1851.
בשיטת תקשורת בינארית יש רק שני מצבים: דולק וכבוי.
קוד מורס מגדיר את המצב הכבוי כרווח שבין הסימנים, את המצב בו המשדר דולק למשך זמן קצר כ-"נקודה" ואת המצב בו המשדר דולק למשך זמן ארוך כ-"קו".
בעזרת רצפים של סימני הקו והנקודה, קוד המורס מיצג ספרות ואותיות האלפבית.
כל אות מיוצגת על ידי רצף של ארבעה סימנים לכל היותר (ישנן אותיות חיצוניות המיוצגות על ידי רצף של חמישה או שישה סימנים, ובמקרה של האות Ś הפולנית, שבעה סימנים) וכל ספרה על ידי רצף של חמישה סימנים בדיוק.
הקוד כולל גם סמני פיסוק, אשר מיוצגים על ידי רצף של שלושה עד שישה סימנים (פרט לסימן הדולר המיוצג על ידי רצף של שבעה סימנים).
אם נציין את משך הזמן של הנקודה כיחידה אחת, אזי הקו ישווה לשלוש יחידות, רווח בין קווים ונקודות בתוך אות אחת ישווה ליחידה אחת, רווח בין אותיות לשלוש יחידות, ורווח בין מילים לשבע יחידות.
הקודים עבור האותיות נבחרו בהתאם לשכיחות הופעתן בשפה - כך במקור האנגלי וכן גם בקוד העברי.
למשל, האותיות השכיחות ביותר בעברית הן וו ויוד.
בהתאם לכך הקוד עבור וו הוא נקודה אחת, ועבור יוד - שתי נקודות.
היתרונות של שיטת התקשורת הבינרית על בסיס קוד מורס על פני שיטות שידור אחרות:
תקשורת זו דורשת טכנולוגיה פשוטה בהרבה משיטות השידור האחרות.
כדי לשדר קוד מורס, האדם ששולח את השידור זקוק למכשיר פשוט מאוד כמו טלגרף, פנס או צופר.
אמצעים כגון טלגרף, זקוקים למכשיר על מנת לקלוט את המסר המועבר.
ביחס לשיטות שידור אחרות, שיטת שידור זו קלה יותר לקליטה כשתנאי הקליטה גרועים.
החסרונות של שיטת התקשורת הבינרית על בסיס קוד מורס על פני שיטות שידור אחרות:
העברת מסרים בה אורכת יותר זמן.
העברת מסרים בה דורשת יותר מאמץ אינטלקטואלי.
העברת מסרים בה מצריכה יותר מיומנות הן ממי שמשדר את המסרים והן ממי שקולט אותם.
באימוני השידור והקליטה, משודר המורס לרוב בחמישיות (קבוצות בנות חמישה תווים) המייצגות "מילים" תקניות.
שידור חזותי מתבצע באמצעות הבהוב (קצר או ממושך), שמתקבל על ידי הסתרה או גילוי של מקור אור כלשהו (למשל: פנס דולק שאורו מוסתר לסירוגין על ידי כף היד).
כמו כן יוצרו מתקנים להבהוב מכני של פנס (או מראה באור יום), לתקשורת חזותית תקנית (הליוגרף).
שידור קולי מתבצע בעזרת מפתח מורס.
לחיצה קצרה על מכשיר זה משדרת נקודה, ולחיצה ארוכה משדרת קו.
בשני האמצעים, מהירות העברת השידור תלויה במיומנותם של המשדר והקולט.
שידור באור הוא בדרך כלל איטי יותר משידור קולי, מכיוון שלרוב נדרש זמן רב יותר לגילוי והסתרת מקור האור, וכן הפעולות מבוצעות לאט יותר למניעת טעויות בפענוח הקוד.
מהירות השידור נמדדת במספר "מילים" (חמישיות) לדקה.
בשידור קולי, נדרש הקולט להקשיב לצלילים, לזהות את אורכם, לפענח את התווים שהם מייצגים על סמך שליטה מוקדמת בקוד, ולהספיק לכתוב אותם לפני שמתקבל הצליל הבא.
מהירויות של בין 8 ל-14 חמישיות לדקה הן איטיות מספיק לשם פענוח הקוד על ידי הקולט הממוצע, אך לשם פענוח במהירויות גבוהות מאלה נדרש אימון רב, וזאת על מנת שהמוח יספיק לזהות ולפענח את הקווים והנקודות.
מהירות של 18 חמישיות לדקה לקליטת אותיות נחשבת למהירה מאוד, והמהירות המקבילה לשם קליטת ספרות היא 20 חמישיות לדקה.
קליטת הספרות מהירה יותר מכיוון שכולן בנות 5 סימנים, מה שמקל על הקולט לפענחן (שכן אינו צריך "לנחש" מתי הסתיים שידורה של ספרה).
בעלי מקצועות שעשויים להגיע למצב חרום שבו הם עשויים להידרש לתקשורת באמצעים פשוטים בלבד, מחויבים ללמוד את קוד המורס.
כמו כן, בעלי מקצועות הקשורים בחילוץ אנשים ממצבי מצוקה מחויבים ללמוד קוד זה.
הקריאה המפורסמת ביותר במורס היא צירוף האותיות SOS.
שידור זה מורכב משלוש נקודות, שלושה קווים ושלוש נקודות ().
השערות רבות יוחסו במשך השנים למשמעותן של אותיות אלה כראשי תיבות, ובין הרעיונות הנפוצים ניתן למנות את: "Save Our Souls" ("הצילו את נפשותינו") ואת "Save Our Ship" ("הצילו את ספינתנו").
למעשה, אותיות אלה אינן ראשי תיבות כלל, ונבחרו עקב פשטות שידורן, שכן הסימנים הם פשוטים לזכירה, לשידור ולזיהוי, ובכך מאפשרים גם לאלה שאינם מיומנים בשידור או בקליטת קוד מורס, לשדר ולהבין את אות המצוקה.
חובבי רדיו השתמשו רבות בשידורי מורס, וכן רישיון חובבי הרדיו המתחיל איפשר שידור מורס בלבד.
כמו כן הומצאו לטובת קיצור משך השידור קיצורים שונים: מהם הכוללים מקצת אותיות ממילת המקור (למשל PLS במקום PLEASE, או U במקום YOU) ומהם המהווים קודים קבועים לברכות וכו' (למשל 73 במקום BEST REGARDS).
קודי האותיות המקוצרים משמשים כיום כמעט באופן זהה את דור התקשורת הנוכחי בדוא"ל ובמיוחד ב-SMS להקטנת מספר ההקשות בכל הודעה.
שימוש נדיר לקוד המורס הוא לשליטה נגישה במחשב על ידי אנשים עם לקות תנועה קשה שיכולים להפעיל מתגים בודדים או מתג בודד.
שימוש זה נדיר בשל החסרונות הכלליים של המורס (אטיות, מאמץ אינטלקטואלי רב וצורך במיומנות).
לכן המומחים לטכנולוגיה מסייעת יעדיפו לנסות פתרונות אחרים, כגון הקלדה בסריקה על פני שימוש במורס.
כיום בחלק מהטלפונים הניידים האות (בברירת המחדל) המודיע על קבלת מסרון (SMS) הוא אות המורס המציין צירוף אותיות זה באנגלית.
הרצף — · —, אשר מייצג את האות K, יכול להודיע גם על הזמנה לתשדורת.
הרצף היחיד העולה על שמונה סימנים הוא רצף הנקודות · · · · · · · ·, אשר מדווח על שגיאה.
קוד מורס עברי נרשם מימין לשמאל, וזאת בניגוד לקוד הלועזי, הנרשם משמאל לימין.
בשנת 1922 המציא זלמן כהן, מראשוני שירות הקשר בההגנה, שיטה לזכירת קידוד המורס של האותיות העבריות.
קוד הספרות העברי זהה לקוד הבינלאומי, למעט כיוון הכתיבה:
קוד האפמן () הוא שיטה לקידוד סימנים, כגון אותיות מאלף בית מסוים, ללא אובדן נתונים.
הקוד שייך למשפחה שימושית של קודים המכונה קודי תחיליות , ובמשפחה זו הוא הקוד המספק דחיסת נתונים מרבית, כלומר מאחסן את הסימנים במספר מזערי של סיביות, על פי הקריטריון המפורט בהמשך.
לרוב ניתן לחסוך באמצעות שיטה זו בין 20% ל-90% משטח האחסון.
קוד האפמן הוא גרסה כללית יותר של עקרון קידוד הנקרא "קידוד אנטרופיה".
בשנת 1951, במסגרת לימודיו לתואר שני ב־MIT, למד דייוויד האפמן קורס בתורת האינפורמציה שהייתה אז בחיתוליה.
המרצה בקורס רוברט פאנו הציע לתלמידים לבחור בין עבודה מסכמת ובין מבחן מסכם.
העבודה שהציע פאנו הייתה בנושא מציאת הקוד הבינארי היעיל ביותר - בעיה שהייתה פתוחה באותו הזמן; הקוד הטוב ביותר שהיה ידוע נקרא קוד שאנון-פאנו.
האפמן, שלא הצליח להוכיח שאף אחד מהקודים הקיימים הוא יעיל ביותר, עמד להיכנע ולהתחיל ללמוד לבחינה המסכמת, כאשר עלה במוחו הרעיון להשתמש בעצים בינאריים ממוינים על פי תדירות האותיות, כשבנייתם היא מהעלים כלפי מעלה.
במהרה הוכיח כי שיטתו היא היעילה ביותר.
האפמן עקף את המגבלה המרכזית בקוד שאנון-פאנו על ידי כך שבנה את העץ מלמטה למעלה, ולא להפך.
במערכות סימנים מקובלות, כגון קוד ASCII, ניתן אורך אחיד לכל הסימנים במערכת.
זו שיטה פשוטה, אך היא אינה יעילה מבחינת נפח האחסון שהיא צורכת: מוטב היה להקצות קוד קצר לסימנים הנפוצים, גם על חשבון הארכה של הקוד המתאים לסימנים הנדירים.
יעילות של קוד כזה תלויה רק בשכיחות הסימנים בשפה, ולא בסדר שבו הם מופיעים בטקסט נתון.
יישום של גישה זו קיים כבר בקוד מורס לטלגרף אלחוטי.
לאות הנפוצה 'ו' משמש בקוד מורס הקוד .
נמחיש את יעילותה של גישה זו באמצעות דוגמה פשוטה.
נניח שבשפה מסוימת השכיחות של האות א' היא מחצית מכלל האותיות.
בקוד ASCII, שבו לכל תו מוקדשות 8 סיביות, מספר הסיביות הנדרש להצגת טקסט באורך n הוא 8n.
נקודד כעת את התווים בדרך חדשה: האות א' תסומן בסיבית יחידה שערכה 0, וכל תו אחר יסומן בקוד ה-ASCII הרגיל שלו, שבתחילתו תתווסף הסיבית 1 (תוספת זו הכרחית, כדי שנוכל להבדיל בין סיבית 0 שמציינת את האות א, ובין סיבית 0 באמצע תו כלשהו).
אורך הקוד הזה יהיה (בתוחלת) רק 5n, שהם חיסכון של 3/8.
קוד האפמן הוא קוד תחיליות, כלומר מחרוזת ביטים שמייצגת אות לעולם אינה מהווה תחילית של מחרוזת המייצגת אות אחרת.
קוד כזה מבטיח אפשרות יחידה לפיענוח, ויתרה מזאת, הפיענוח מהיר, שכן מספיק לעבור על הרצף המקודד פעם אחת מההתחלה ועד הסוף תוך שמירת מעט מידע.
קוד מסוג זה ניתן לייצג על ידי עץ בינארי, כאשר עלי העץ מייצגים את האותיות המקודדות, וצמתי העץ מסומנים ב-0 או 1. כאשר רוצים לפענח רצף ביטים כלשהו, הולכים על העץ על פי הביטים שנקלטים עד אשר מגיעים לעלה.
האות המאוחסנת בעלה היא האות המפוענחת.
כאשר הקוד הוא אופטימלי, העץ יהיה עץ מלא.
כלומר, לכל צומת שאינו עלה יהיו בדיוק שני בנים.
לדוגמה, נניח כי בקוד כלשהו לשורש של העץ יש רק בן אחד, שאליו מובילה הקשת 0. פירוש הדבר הוא שבקוד לא יהיו כלל אותיות שקידודן מתחיל ב-1, וזהו בזבוז של מקום (כי אפשר היה, לכל הפחות, לתת לאות כלשהי את הקידוד "1", ובכך לחסוך במקום).
בהינתן שכיחות התווים בשפה, הבעיה האלגוריתמית היא בניה מהירה של קוד יעיל, הממיר את התווים לרצפים קצרים של סיביות.
לאחר שהקוד נבנה, אפשר לבצע קידוד ופענוח במעבר אחד על התווים, ולכן הבעיה המשמעותית היחידה היא במציאת הקוד.
היעילות של קוד תלויה כאמור במספר המופעים של כל תו בשפה, ולכן לא קיים קוד אחיד שנותן קידוד אופטימלי לכל קבוצת תווים: אם שכיחות התווים שונה, יש להפעיל את האלגוריתם ולבנות את הקוד המתאים מחדש.
מבחינה פורמלית, הקלט לבעיה הוא אוסף תווים, , ומספר הפעמים שכל תו מופיע בקבוצת התווים: .
הפלט הצפוי הוא קוד, שהוא אוסף של מילים בינאריות.
נסמן ב- את אורכה של המילה ה-.
היעד הוא שהקוד שיוחזר יהיה כזה כך ש- יהיה מינימלי.
הסכום הוא בדיוק מספר הביטים שנדרש לקידוד קבוצת התווים כולה, שכן עבור כל תו, אנו מכפילים את מספר המופעים שלו בקבוצה במספר הביטים שנדרשים כדי לייצג אותו.
האלגוריתם של האפמן הוא דוגמה לאלגוריתם חמדן.
הוא מבצע בכל שלב את הפעולה שנראית, נקודתית, כפעולה המשתלמת ביותר, ומתבסס על כך שפתרון אופטימלי עבור אותיות יכול להפוך לפתרון אופטימלי עבור אותיות.
הרעיון באלגוריתם הוא כזה: נבנה את העץ הבינארי של הקוד "מלמטה למעלה".
ראשית, נמצא את שתי האותיות שמספר המופעים שלהן מינימלי, וניצור צומת חדש, כך ששתי האותיות הללו יהיו בניו.
כעת נתייחס לצומת החדש בתור אות חדשה, שמספר המופעים שלה הוא סכום מספרי המופעים של שתי האותיות שהן בניה.
כך קיבלנו צמצום של הבעיה מבעיה ב- אותיות לבעיה ב- אותיות.
נחזור על התהליך עד שנישאר עם צומת אחד בלבד - ראש העץ.
לצורך פעולתו, האלגוריתם זקוק למנגנון שיאפשר לו למצוא במהירות את שתי האותיות בעלות המופעים המינימליים.
לצורך כך ניתן להיעזר בתור עדיפויות (שניתן לממש על ידי ערימה).
צור תור עדיפויות שיכיל צמתים המייצגים את כל האותיות, כאשר העדיפות בתור ניתנת לצומת שמייצג את האות בעלת מספר המופעים הקטן ביותר.
כל עוד בתור העדיפויות יש יותר מצומת אחד, בצע:
הוצא מתור העדיפויות את שני האיברים העליונים, .
הפוך את לבנים הימני והשמאלי של .
קבע את מספר המופעים של להיות סכום מספרי המופעים של ו-.
הצומת הבודד שנותר בתור העדיפויות הוא שורש עץ הקוד המבוקש.
קבע את מילת הקוד עבור כל אות, לפי המסלול מהשורש, לעלה שמייצג את האות.
אם הקשת ה־־ית מובילה לבן שמאלי, ערך הביט ה־־י יהיה "0".
אם היא מובילה לבן ימני, ערכו יהיה "1".
אם האותיות נתונות בצורה ממוינת, קיים אלגוריתם עם זמן ריצה ליניארי ב־n למציאת קוד האפמן.
הכללה לקידוד בסיביות מסדר N
עבור סיביות מסדר (היכולות לייצג N ערכים), האנטרופיה של הקידוד תהיה והיא מהווה חסם תחתון נמוך יותר לדחיסה משמרת נתונים של המידע, מאשר שימוש בביטים.
בניית קוד האפמן הפעם תתבצע על ידי יצירת הורה ל־N הבנים בעלי ההסתברות הקטנה ביותר, והכנסת סכום N ההסתברויות לתור העדיפויות.
עבור מקור אותיות המייצר אותיות בקצב קבוע ובאופן בלתי תלוי, ההסתברות לקבלת כל אות נתונה על ידי: .
נקודד בעזרת טריטים אשר יכול להכיל את שלושת הסימנים .
אנטרופיית המקור תחושב לפי הנוסחה: .
חישוב קוד האפמן יעשה על פי הסכימה הבאה:
קצב שליחת המידע במקרה זה יהיה שאינו רחוק מהאנטרופיה של הקוד, שהיא כאמור החסם התחתון של קצב השידור.
ניתן להוכיח כי קוד האפמן מחזיר תמיד קידוד אופטימלי, מבין כל צפני התחיליות.
באופן כללי יותר, קוד האפמן נותן אורך ממוצע מינימלי של צופן בהשוואה לכל צפני החד-פענח (Uniquely Decodable).
יש להיזהר בשימוש במילה "אופטימלי", שכן קיימים קידודים יעילים יותר במצבים מסוימים.
האופטימליות של קוד האפמן פירושה שהוא הקוד היעיל ביותר שבו מייצגים כל אות על ידי רצף קבוע של ביטים, כך שלכל אות בטקסט מותאם רצף שכזה.
הוכחת אופטימליות הקוד אינה מסובכת, ומתבססת על כך שבהינתן קוד אופטימלי כלשהו, ניתן לבנות ממנו קוד אופטימלי חדש על ידי כך שמעבירים את שתי האותיות בעלות מספר המופעים הנמוך ביותר למקום הנמוך ביותר בעץ הקוד.
מכיוון שפעולה זו יכולה רק לשפר את עלות הקוד הכוללת, הקוד נותר אופטימלי.
כך ניתן באינדוקציה לבנות קוד האפמן מתוך כל קוד אופטימלי ללא הגדלת העלות.
קוד ישן הוא שיטת קידוד העברית במחשבים שלא תוכננו לעברית מלכתחילה, אלא לאנגלית בלבד.
בכל סוגי הקוד הישן מקודדות 27 האותיות של האלפבית העברי (כלומר כולל האותיות הסופיות) במקום אותיות האלפבית הלטיני.
בדרך-כלל כשמדברים על הקוד הישן מתכוונים לתקן SI 960, שהוא ASCII חוץ מהתווים (בכתיב הקסדצימלי) 0x60 עד 0x7A, שאותם תופסות האותיות העבריות.
הקוד הישן אינו נוח לשימוש, משום שאי-אפשר לערבב בו אותיות לטיניות קטנות ואותיות עבריות גם יחד, אך הוא היה האפשרות היחידה כאשר כל סביבות המחשוב הוגבלו ל-7 סיביות.
עם המעבר ל-8 סיביות הוסרה מגבלה זו, ואפשר היה לקודד את תחום ה-ASCII כמקובל ולהקצות לאותיות העבריות מספרים נפרדים.
במחשב האישי הוקצה התחום 0x80 עד 0x9A (עברית של DOS), ובתקן של ISO התחום 0xE0 עד 0xFA.
העברית של Windows, מקינטוש ויוניקס מקודדת לפי תקן ISO.
העברית בתקן EBCDIC של חברת IBM, אף שזה היה בן 8 סיביות מלכתחילה, עברה כמה גלגולים.
בתקופה שקדמה להופעת המסכים קודדה העברית במקום האותיות הלטיניות הגדולות (תחום המתחיל ב-0xC1 ומסתיים ב-0xE9).
קידוד זה, שקיבל את הכינוי "סינית", מנע הדפסה מעורבת של עברית ואנגלית.
עם הופעת המסכים הועבר הקידוד של העברית כמו בקוד ישן ASCII אל האותיות הלטיניות הקטנות (תחום המתחיל ב-0x81 ומסתיים ב-0x9A), קוד שקיבל את הכינוי "קוד ישן".
בין הייצוג הגרפי של קוד ישן ASCII לייצוג הגרפי של קוד ישן ב-EBCDIC היה הבדל קטן אחד.
האות א ב-EBCDIC קודדה במקום הסימן & (ב-EBCDIC ערכו 0x50), בעוד שבקוד ישן ASCII הייצוג הגרפי של האות א היה ` (גרש שכיוונו הפוך), כך שערכה ההקסדצימלי של האות א היה מיד לפני האות ב (0x60 ו-0x61 בהתאמה).
העברית בקוד הישן היא לעולם עברית חזותית (ויזואלית), כי בעבר הקשיים שעברית חזותית יוצרת לא נמצאו ראויים לפתרון מקיף יותר.
קוד מקור, או בקיצור קוד, הוא אוסף הוראות הניתנות למהדר (קומפיילר) לשם תרגום לשפת מחשב אחרת, בדרך כלל לשפת מכונה.
בשפות תכנות שאינן עוברות הידור (קומפילציה), קוד מקור מתייחס לאוסף ההוראות הניתנות למפרש לשם ביצוען.
לרוב, קוד מקור נכתב על ידי מתכנת, או קבוצת מתכנתים, בשפת תכנות מסוימת, כחלק מתהליך הפיתוח של התוכנה.
כתיבתו של קוד מקור נעשית באמצעות עורך טקסט כללי, או באמצעות עורך קוד מקור בסביבת פיתוח משולבת, המסייע בכתיבה באמצעות הבחנה בין המילים השונות המרכיבות את הקוד: פקודות, משתנים וכדומה.
קוד מקור נחשב לקניין רוחני וכסוד מסחרי, ולכן ברוב המקרים לא נהוג לחשוף את קוד המקור מחוץ לקבוצת העבודה המפתחת את המוצר המשתמש בקוד המקור.
לעומת זאת, בקהילת הקוד הפתוח, מפתחים דווקא חושפים את קוד המקור ומאפשרים לכל אחד לפתח תוכנות או סקריפטים המבוססות על הקוד ולהפיץ גם אותן (במקרים רבים, תוך שמירה על החופשיות של הקוד).
בדרך כלל קוד מקור החשוף ברשת מכיל קובץ הוראות להידור, התקנה והפעלה של התוכנה.
קוד מקור של דפי אינטרנט
דפדפנים מאפשרים לגולשים בהם לצפות בקוד המקור של דפי אינטרנט.
בבחירה באפשרות התפריט "הצג קוד מקור" (View source), הדפדפן מציג את קובץ קוד המקור של הדף הנוכחי, שכולל HTML, ומרכיבים נוספים כגון CSS ו-JavaScript, וכן קישורים למשאבים חיצוניים שהדף כולל, כגון קובצי קוד CSS ו-JavaScript, וכן קובצי תמונות וסרטים.
בין השנים 1922 עד 1945 עמד בראש האגודה ויל הייז, עורך דין ששימש כאחראי על שירותי הדואר, וכמנהל מסע הבחירות של הנשיא וורן הרדינג.
הייז, השמרן בדעותיו, הוא שעיצב את הקוד, תכניו ומטרותיו, והקוד קרוי על שמו.
הקוד היווה מעין צנזורה פנימית של האולפנים הגדולים, אומץ רשמית על ידי האגודה בשנת 1930, ואכיפתו החלה בשנת 1934. בשנת 1967 נפסקה אכיפת הקוד.
הקוד קבע במפורש מה נחשב כמקובל מבחינה מוסרית בהפקת סרטי קולנוע בארצות הברית, ומה נחשב כבלתי מקובל, והיווה את אחד הגורמים המרכזיים בעיצוב הקולנוע ההוליוודי של שנות השלושים והארבעים של המאה ה-20, כמו גם בעיצוב האינטראקציה בינו לבין קהל הצופים שלו.
הסימפתיה של הקהל לא תופנה לצדו של הפשע, החטא או הרשע.
"הסרטים לא יציגו כי הצורות הנחותות של חיי המין מקובלות".
ניאוף ומין לא ראוי, למרות שהם דרושים לעיתים לצורכי העלילה, לא יוצגו במפורש או יוצדקו, ולא יוצגו כאופציה אטרקטיבית.
לאחר פסיקת בית המשפט העליון של ארצות הברית בשנת 1915, בפסק דין "מיוצ'ואל פילם קורפוריישן נ.
ועדת המסחר של אוהיו" כי סרטי הראינוע אינם נכללים בתיקון הראשון לחוקה, ומכאן כי הם כפופים למגבלות על חופש הדיבור, החלו ערים שונות לקבוע מגבלות וחרמות על סרטים "בלתי מוסריים", והאולפנים החלו לחשוש מחקיקה פדרלית בנושא.
בתחילת שנות ה-20 טלטלו את הוליווד שלושה סקנדלים גדולים: משפטי רצח של כוכבים כרוסקו ארבוקל, כוכב קומי שהואשם באחריות למותה של כוכבנית בשם וירג'יניה ראפ במסיבת חשק פרועה; רצח הבמאי ויליאם דזמונד טיילור, פרשה שחשפה את הציבור לאורח החיים של כוכבי הקולנוע; ומותו, הקשור לצריכת סמים, של הכוכב וולאס ריד.
סיפורים אלו שאירעו כמעט באותו הזמן, זכו לטיפול סנסציוני בידי העיתונות.
נראה כי הם מאשרים את התפיסה שהוליווד היא בבסיסה מקום בלתי מוסרי, "עיר החטאים".
בדיקות סטטיסטיות שנערכו בשנות העשרים בארצות הברית חשפו את הנתונים הבאים: בכל שבוע נמכרו כ־90 מיליון כרטיסי קולנוע ברחבי ארצות הברית.
כ־40 מיליון מאותם כרטיסים נמכרו לקטינים, כ־17 מיליון מהם לילדים מתחת לגיל 14. בסוף שנות העשרים הייתה ארצות הברית מבוהלת מההשפעה הסוחפת של הקולנוע על האוכלוסייה הרחבה, ובמיוחד על הנוער שגדל והתחנך לאורו של המדיום החדש.
בשנות השלושים ערכו פסיכולוגים וסוציולוגים מחקרים נוספים, אשר איששו את ההנחה שסרטים משפיעים על ילדים ברעיונות חדשים, בדרכם לפירוש העולם והמציאות, ההתנהגות היום-יומית וההתנהגות המינית.
הלחץ הציבורי הביא בשנת 1922 ליצירתה של ה-MPPDA.
האולפנים הגדולים, שיזמו את יצירת האגודה, רצו להקרין תדמית חיובית של תעשיית הסרטים.
בראש האגודה הועמד עורך הדין השמרן ויל הייז אשר היה בעבר הממונה על שירותי הדואר בארצות הברית, ומנהל מסע הבחירות של הנשיא וורן גמליאל הרדינג.
הייז קרא לאכיפת תקן מוסרי על הסרטים המופקים בהוליווד.
במשך שמונה שנים ניסה הייז לאכוף את סמכותו המוסרית על תעשיית הסרטים, אך לשווא.
משרדו של הייז הוציא רשימה של "אל תעשו" ו"היזהרו" בשנת 1927, אך רוב המפיקים התעלמו ממנה.
עם עלייתו של הסרט המדבר בשנת 1927, הורגש צורך בקוד כתוב.
קוד ההפקה נכתב בצורה ברורה מראש על מנת לחנך ולתעל את הצופים על פי עקרונות פרוטסטנטיים וקתוליים אשר היו בעלי עוצמה באותן שנים.
הקוד אומץ על ידי ה-MPPDA ב-31 במרץ 1930, אך לא נעשו כל תקנות לאכיפתו.
התקופה שבין 1930 ל-1934 נחשבת לתקופת ביניים בה אמנם הקוד היה קיים, אך האולפנים התעלמו מקיומו.
עוד בשנת 1933 לעגו האחים מרקס לקוד בסרטם "מרק ברווז" כאשר הראו חדר שינה של אישה, ובו מושלכות נעלי גבר, ופרסות סוס.
המדובר ברמיזה מינית המנוגדת לכל כללי הייז, אך כאשר הראתה המצלמה את המיטה עצמה, הסתבר כי ישן בה הארפו מרקס, ולצידו סוס.
ה-MPDDA הגיב לסרטים האלימים שנוצרו בתקופה זו באמצעות חיזוק הקוד.
נוספו לקוד הוראות נוספות, ולצד ה-MPPDA פעל אף "לגיון הצניעות הקתולית" אשר קבע איזה סרטים לא ראוי לקתולים לראות.
לאחר שאומץ בשנת 1930 לא נקבעה לקוד מסגרת אכיפה מחייבת.
תיקון לקוד מ-13 ביוני 1934 הקים את מינהל קוד ההפקה, שדרש כי כל הסרטים המופקים יקבלו את אישורו בטרם יופצו לקהל.
למשך עשרים השנה הבאות, כמעט כל הסרטים המופקים בארצות הברית היו כפופים למינהל זה.
הקוד לא נוצר או נאכף על ידי הרשויות הפדרליות, רשויות המדינות או רשויות מקומיות.
למעשה הקוד אומץ מרצון על ידי האולפנים הגדולים על מנת להימנע מצנזורה ממשלתית, ולהעדיף את הצנזורה העצמית המבוטאת בקבלת הקוד.
אכיפת הקוד הובילה לביטולם של מוסדות צנזורה קיימים.
סרטים שיוצרו מחוץ לארצות הברית, צונזרו על ידי מינהל המכס של ארצות הברית.
כך נמנע, בשנת 1932 הייבוא מהונגריה של הסרט "אקסטזי" בכיכובה של הכוכבת שתהיה ידועה כהדי לאמאר, אשר הציג סצנות מיניות, בהן נראית לאמאר בחזה חשוף.
ערעור לבית המשפט על פעולת המכס נדחה בשל העובדה כי בית המשפט העליון קבע כי הסרטים אינם מוגנים על ידי התיקון הראשון לחוקה.
בראש מינהל האכיפה הועמד פקיד בשם ג'וזף ברין.
תחת הנהגת ברין הונהגו כללי אכיפה נוקשים וידועים לשימצה.
ברין נהג לשנות תסריטים באופן שהכעיס כותבים ובמאים.
עם זאת, דווקא מסגרת נוקשה זאת הובילה לתחכום קולנועי שהוסיף והשתכלל.
הצורך להתגבר על האיסורים חייב לעיתים דמיון רב.
בין השורות התפתח המתח בין הגלוי לסמוי שיצר לעיתים סרטים מעניינים ומורכבים דווקא בשל הצורך להערים על הצנזורה.
הפעולה הממשית הראשונה של הצנזורים הייתה בהפקת הסרט "טרזן וזוגתו" משנת 1934, בו הושמטו סצנות עירום קצרצרות, בהן צולמה כפילת גוף לכוכבת מורין או'סאליבן.
מקרה נוסף, שהוצג בסרטו של מרטין סקורסזה "הטייס" משנת 2004, הוא הצנזורה על הסרט "פורע החוק" משנת 1943, שהופק על ידי הווארד יוז.
המינהל סירב לאשר את הסרט, והסרט לא הוצג במשך שנים, במיוחד בשל העובדה שמסע הפרסום לסרט התמקד בשדיה של השחקנית ג'יין ראסל שהייתה אהובתו של יוז.
יוז התעקש, ולבסוף הצליח לשכנע את ברין כי שדיה של ראסל אינם מהווים הפרה של הקוד, ולאפשר את הצגת הסרט ברחבי ארצות הברית.
הסרט הוצג לבסוף בשנת 1946 לאחר שלוש שנים אותן בילה יוז בפרסומו, והרצון לצפות בדבר שנאסר על הקהל במשך שלוש שנים הביא להצלחתו הכבירה של הסרט בקופות.
בשנות החמישים והשישים החלה הפרדה בין שני תחומים.
מצד אחד, חל שיפור בתחומים הקשורים למיניות וזוגיות הטרוסקסואלית, כולל קשרים רומנטיים בין "גזעים" בקולנוע.
מצד שני, נותר על כנו, ואף החמיר, האיסור על אזכור של קשרים בין בני אותו מין, ואזכור תחום הלהט"ב.
בשנות החמישים החלה רדיפה של הומואים ולסביות בארצות הברית, על ידי הממשל הפדרלי של ארצות הברית, שכונתה בהלת הלבנדר, ונהגה במקביל למקארתיזם האנטי-קומוניסטי.
תקופה זו היוותה קרקע פורייה להמשך קיומו של קוד הייז, והעלמת כל רמז להומוסקסואליות בסרטים.
השיפור בתחומים האחרים לא היה מיידי והתרחש בהדרגה.
הוליווד פעלה במסגרת מגבלות הקוד עד לשנות ה-60 במהלך "תור הזהב של הוליווד" עד לסיומה, כאשר הסרטים עמדו בפני האיום הגדול מצד הטלוויזיה.
היה על הוליווד להציע משהו שישכנע את האמריקנים לצאת מביתם, ואותו דבר מה לא יכול היה להימצא בתוך המסגרת המגבילה של הקוד.
בנוסף לאיום מצד הטלוויזיה, היה האיום הגובר מצד סרטים זרים.
סרטים כ"גונבי האופניים" של הבמאי ויטוריו דה סיקה שהציג סצנה בה הגיבורים מדברים עם פרוצות בבית בושת, הביאו למשבר.
מצד אחד היה ברור כי המדובר ביצירת אמנות, וכי הסצנה אינה כוללת תוכן מיני או פרובוקטיבי.
מצד שני, על פי קוד ההפקה, לא ניתן היה להפיק סצנה דומה בסרט שיוצר בארצות הברית.
ה-MPPDA, אשר הפך בינתיים ל-MPAA, דרש כי הסצנה תוסר, ויצר מחלוקת ציבורית.
שיטת הבעלות באולפנים הגדולים נמצאה כנוגדת את חוקי הגבלים העסקיים של ארצות הברית, והאולפנים הוכרחו לוותר על הבעלות באולמות ההקרנה עצמם.
לא הייתה כל דרך בה יכלו האולפנים למנוע הצגת סרטים זרים, המפרים את הקוד.
שבירת שיטת האולפנים הגדולים הביאה גם לאפשרות ליצירת סרטים עצמאיים בידי גורמים מקומיים שלא ראו עצמם כפופים לקוד.
בשנות השישים, חרם מצד "ארגון הצניעות" כבר לא הבטיח את כישלונו של סרט, והקוד החל להראות כדבר שזמנו עבר.
המפיקים הבינו כי יוכלו להתעלם מהקוד, ועדיין להרוויח מיצירת סרטים.
בזמן זה היה צורך בהגמשת הקוד.
הקוד אכן עבר שינוי ב-1951, אך לא במטרה להגמישו, כי אם במטרה להקשיחו.
מילים מסוימות נקבעו כאסורות, ונושאים נוספים נאסרו.
הדבר הגביר עוד יותר את ההתנגדות של יוצרי הקולנוע לקיום הקוד.
בשנת 1952 קבע בית המשפט העליון כי לא ניתן לאסור על הצגת סרטו של רוברטו רוסליני "הנס", ובכך נהפכה ההחלטה משנת 1915 לפיה אין תעשיית הסרטים מוגנת על ידי התיקון הראשון לחוקה.
בראש ההתנגדות לקוד עמד הבמאי אוטו פרמינגר אשר סרטיו הפרו שוב ושוב את הקוד בשנות החמישים.
סרטו "הירח הוא כחול" משנת 1953 עסק באישה המנסה להתגרות בשני מחזרים, ולהסיתם זה כנגד זה, בעודה מנסה לשמור על בתוליה עד לחתונתה.
הסרט השתמש במילים אסורות כ"בתולה", "פיתוי" ו"פילגש" והופץ ללא אישור המינהלת.
הסרט "האיש בעל זרוע הזהב", משנת 1955, שאף אותו ביים פרמינגר, עסק בנושא האסור של שימוש בסמים.
"אנטומיה של רצח" משנת 1959 עסק באונס.
סרטים אלו של פרמינגר היו התקפה ישירה על סמכותו של קוד ההפקה, ומאחר שהצליחו בקופה, החישו את ביטולו של הקוד.
בשנת 1954 פרש ג'וזף ברין, והוחלף בג'פרי שורלוק.
שורלוק הצהיר, בריאיון לעיתונות, כי בכוונתו להביא לגישה רחבה יותר וקלילה יותר באכיפת הקוד.
בשנת 1960 עם הקרנת הסרט "פסיכו" של הבמאי אלפרד היצ'קוק ללא אישור המינהלת, היה ברור כי סמכותו של הקוד אינה קיימת עוד.
עם זאת, הצנזורה הפנימית של אולפנים רבים בנוגע לתכנים הומוסקסואליים, שעדיין נחשבו בשנות השישים כבלתי מוסריים, נותרה על כנה עוד כעשרים שנה.
סרטים בריטיים שהוצגו בארצות הברית בתחילת שנות השישים הציעו ראייה חדה של המציאות החברתית, שכללה התייחסות לתפקידים מגדריים ולהומופוביה.
אף על פי שגישה זו הפרה את הקוד, הסרטים הוצגו בארצות הברית.
תנועות למען זכויות אזרח וזכויות להומוסקסואלים דרשו בדיקה מחדש של סוגיות הגזע, המיגדר, המעמד והמיניות שהוגבלו על ידי הקוד.
כאשר מונה ג'ק ולנטי לנשיא ה-MPAA בשנת 1966 הוא ניצב בפני בעיה שנגעה לשימוש בשפה בוטה בסרט "מי מפחד מווירג'יניה וולף?".
המילה "לזיין" ("screw") הוסרה, וביטויים אחרים כ"לדפוק את המארחת" ("hump the hostess") הותרו.
הסרט קיבל את אישור המינהלת על אף שהשתמש בשפה שהייתה אסורה בעליל על פי הקוד.
הסרט "יצרים" ("Blow-Up") של מיכלאנג'לו אנטוניוני יצר בעיה אחרת.
למרות שנמנע ממנו אישור המינהלת, הוא הופץ בכל זאת על ידי אולפני MGM, שהייתה חברה מרכזית ב-MPAA.
האכיפה הפכה לבלתי אפשרית, והקוד נזנח כליל.
ה-MPAA עברה לשיטת דירוג, שלמעשה לא הגבילה את הצגתם של סרטים, ולא התערבה בתוכנם.
החל משנת 1968 חולקו הסרטים לקטגוריות שהבהירו את תוכנם הבעייתי, והמליצו על הגבלת גיל או הדרכה הורית.
קודי הדיווח של נאט"ו הם שמות קוד לציוד הצבאי של ברית המועצות והרפובליקה העממית של סין.
הם נוצרו כדי לסייע להעברת מידע בין יחידות הצבא של המדינות החברות בברית נאט"ו, אשר חייליהן דוברים שפות שונות, וכן בשל העובדה שבמקרים רבים השם האמיתי של הציוד לא היה ידוע.
צבאות נאט"ו ניהלו את רשימות השמות.
המשימה לבחור את השמות הוטלה על ה-Air Standardization Coordinating Committee (ASCC), שבה היו חברות אוסטרליה, ארצות הברית, בריטניה, ניו זילנד וקנדה.
האות הראשונה של השם ציינה מידע לגבי השימוש של הציוד.
מטוסי קרב קיבלו שמות שהתחילו באות F (שהיא האות הראשונה במילה Fighter),
מפציצים קיבלו שמות שהתחילו באות B (Bomber),
מטוסי תובלה – C (Cargo),
מטוסים אחרים (מטוסי אימון, תדלוק, ביון ואחרים) – M (Miscellaneous),
טילי קרקע-קרקע – S (Surface),
וטילי קרקע-אוויר – G (Ground to Air).
מטוסים בעלי מנוע בוכנה קיבלו שמות בעלי הברה אחת, ומטוסים בעלי מנוע סילון קיבלו שמות בעלי שתי הברות.
משרד ההגנה האמריקאי הרחיב את רשימת קודי הדיווח של נאט"ו.
למשל, ברשימה של נאט"ו זכו מערכות טילי קרקע-אוויר המשוגרים מספינות ומצוללות באותו שם כמו המערכות המשוגרות מפני האדמה.
משרד ההגנה הקצה לאותן מערכות סיומת שונה (SA-N לעומת SA), אולם השאיר את אותם שמות כמו למערכות היבשה.
באותם מקרים שבהם לא הייתה מערכת קרקעית מקבילה, הומצא שם אחר.
בברית המועצות לא נבחרו שמות עממיים לכלי הטיס, אך בקרב אנשי חיל האוויר הסובייטי נפוצו כינויים לא-רשמיים.
במהלך רוב תקופת המלחמה הקרה לא השתמשו הטייסים הסובייטים בקודי הדיווח של נאט"ו (או בתרגום שלהם).
בנאט"ו נזקקו למאות שמות עבור סוגי הציוד השונים.
חלק מהשמות היו לא מחמיאים, וחלק מהשמות הסתירו משמעויות כפולות ורמזים.
במקרים נדירים (כמו למשל הפולקרום – Fulcrum והבר – Bear) השמות נשאו חן בעיני הרוסים ואומצו גם ברוסיה.
בתורת הקודים, קוד המינג () הוא קוד תיקון שגיאות ליניארי לא סיסטמטי (Non-systematic), הקרוי על שמו של ריצ'רד המינג, שהגה אותו.
קוד המינג מסוגל לזהות ולתקן שגיאות בסיבית בודדת, וכן לזהות (אך לא לתקן) שגיאה בשתי סיביות.
לשם השוואה, קוד הזוגיות הפשוט אינו מסוגל לזהות שגיאות כאשר שתי סיביות מתהפכות, או לתקן את השגיאות שהוא כן מסוגל לזהות.
מספר הסיביות הנוספות הדרושות עבור קוד המינג הוא המינימלי ההכרחי עבור כל קוד לתיקון שגיאות המסוגל לתקן שגיאה בסיבית בודדת.
בשנות ה-40 של המאה ה-20 עבד ריצ'רד המינג במעבדות בל על המחשב האלקטרו-מכני "Bell Model V", אשר הקלט שלו הוזן בעזרת כרטיסים מנוקבים.
עקב חוסר מהימנותו של קורא הכרטיסים, שגיאות בקריאת הכרטיסים היו דבר שבשגרה, ולכן במהלך ימי השבוע, קוד מובנה מיוחד במחשב היה מוצא שגיאות ומדליק נורות כך שמפעילי המחשב יכלו לתקן ידנית את הבעיות.
לאחר שעות העבודה ובמהלך סופי השבוע, כאשר מפעילי המחשב לא היו נוכחים, כל שהמחשב יכול לעשות היה לנטוש את המשימה שבה התגלו שגיאות ולהמשיך למשימה הבאה.
המינג עבד בסופי שבוע, ונעשה מתוסכל יותר ויותר מהצורך להפעיל מחדש את התוכניות שלו עקב התקלות של קורא הכרטיסים.
בשנים שלאחר מכן הוא שקד על בעיית תיקון-השגיאות ופיתח שורה של אלגוריתמים רבי-עוצמה לטיפול בבעיה.
בשנת 1950 הוא פרסם את מה שידוע כיום כקוד המינג, אשר נשאר בשימוש במספר יישומים גם כיום.
קודים קודמים להמינג שנמצאו בשימוש
מספר קודים פשוטים לזיהוי שגיאות נמצאו בשימוש לפני קודי המינג, אולם כולם נדרשו לתקורה גבוהה יותר של זיכרון מאשר קוד המינג.
סיבית זוגיות הוא קוד המוסיף סיבית בודדת אשר מציינת אם מספר הסיביות שערכן הוא 1 במידע הוא זוגי או אי-זוגי.
אם סיבית אחת במידע המשודר השתבשה, הרי שהזוגיות של המידע השתנתה, ועל כן ניתן לזהות שאירעה שגיאה (גם אם הסיבית שהשתבשה היא סיבית הזוגיות עצמה).
ניתן אף לזהות כל שגיאה המערבת מספר אי-זוגי של סיביות שמשתבשות.
נהוג להגדיר כי אם סיבית הזוגיות שווה ל-1 הרי שישנו מספר אי-זוגי של סיביות השוות ל-1 במידע, ואם סיבית הזוגיות שווה ל-0 הרי שישנו מספר זוגי של סיביות השוות ל-1 במידע.
מכאן נובע שבצירוף סיבית הזוגיות לסיביות המידע, צריך להיות מספר זוגי של סיביות השוות ל-1.
בדיקת זוגיות אינה חסינה לגמרי לשגיאות – אם מספר הסיביות שהשתבשו הוא זוגי, הרי שלא יהיה ניתן לזהות כי אירעה שגיאה, כיוון שכל שתי סיביות משובשות מבטלות את ההשפעה ההדדית על סיבית הזוגיות.
יותר מכך, גם כאשר בדיקת הזוגיות מזהה כי אירעה שגיאה, לא ניתן לדעת באיזה סיבית או סיביות היא אירעה.
על כן, יש להיפטר מכל המידע, ולשדרו מחדש לחלוטין.
בערוץ רועש, שידור מוצלח יכול לקחת זמן רב, או לא לקרות לעולם.
למרות החסרונות מהם סובלת בדיקת הזוגיות, היא דורשת סיבית אחת בלבד עבור כל בלוק מידע, ועל כן התקורה בה היא נמוכה מאוד, והיא מאפשרת שחזור של סיבית חסרה, כאשר ידוע איזו סיבית חסרה (אף כי בפועל לרוב לא ניתן לדעת זאת).
בשנות ה-40 של המאה ה-20 השתמשו מעבדות בל בקוד מתוחכם מעט יותר הקרוי קוד שתיים-מתוך-חמש.
קוד זה הבטיח כי כל בלוק של חמש סיביות הכיל בדיוק שתי סיביות עם הערך 1. המחשב היה יכול לזהות שאירעה שגיאה, אם לא היו בדיוק שתי סיביות עם הערך 1 בכל בלוק.
עם זאת, גם קוד זה היה מסוגל לזהות בוודאות רק שגיאות בסיבית בודדת; אם סיבית אחת התהפכה ל-0 ואחרת התהפכה ל-1 באותו הבלוק, הכלל של שתיים מתוך חמש היה נשאר תקף, והשגיאה לא הייתה מתגלה.
קוד נפוץ נוסף באותו הזמן ביצע שכפול של כל סיבית מידע מספר קבוע של פעמים, במטרה להבטיח שהוא ישודר באופן תקין.
למשל, אם הסיבית הנשלחת היא 1, וקבוע ההישנות הוא 3, קוד ההישנות המשודר היה "111".
אם שלושת הביטים המתקבלים אינם זהים, הרי שבוודאות אירעה שגיאה.
אם ערוץ השידור נקי מספיק מהפרעות, הרי שניתן להניח כי באופן סביר רק סיבית אחת לכל היותר תשתנה בכל שלשה.
על כן, 001, 010, וכן 100 הצביעו על כך ששודר 0, ואילו 110, 101, וכן 011 הצביעו על כך ששודר 1, על פי עקרון הרוב כאשר כל סיבית בשלשה מהווה "קול הצבעה" בנוגע לערכה המקורי של הסיבית המשודרת.
קוד כזה, אשר מסוגל לשחזר את ההודעה המקורית בהינתן שגיאות בהודעה המשודרת נקרא קוד לתיקון שגיאות, אולם קודים שכאלה אינם מסוגלים לתקן את כל השגיאות.
אם נוסיף עוד סיביות לתיקון-שגיאות להודעה, ואם ניתן לארגן ששגיאות בסיביות מידע שונות יפיקו תוצאות שגיאה שונות, יהיה ניתן לזהות את הביטים השגויים.
בהודעה באורך 7 סיביות, ישנן 7 שגיאות סיבית-בודדת אפשריות, על כן 3 סיביות לתיקון-שגיאות יכולות פוטנציאלית גם לציין שאירעה שגיאה, וגם היכן היא אירעה.
המינג למד את שיטות הקידוד הקיימות, כולל את שתיים-מתוך-חמש, והצליח להכליל את רעיונותיהם.
תחילה, הוא קבע סימונים כלליים לתיאור המערכת, כולל סימון למספר סיביות המידע וסיביות לתיקון-שגיאות בכל בלוק.
לדוגמה, קוד הזוגיות מכיל סיבית בודדת לכל מילת מידע, על כן בהנחה שמילות ASCII היו באורך 7 סיביות, המינג תיאר את קוד הזוגיות כקוד (8,7), כיוון שכל בלוק מידע הוא באורך 8 סיביות, מתוכם 7 מהווים את המידע.
באופן דומה, קוד ההישנות היה מוגדר כ (3,1) (כאשר קבוע ההישנות הוא 3).
"שיעור האינפורמציה" הוא המספר השני מחולק בראשון – בקוד ההישנות, לדוגמה, שיעור האינפורמציה שווה ל-1/3.
כמו כן, המינג שם לב לבעיות כאשר שתי סיביות או יותר מתהפכות, וכינה מצב זה כ"מרחק" (כיום מונח זה קרוי "מרחק המינג", על שמו).
עקרונית, "מרחק המינג" הוא מספר הסיביות המינימלי שצריך לשנות במילת קוד חוקית כלשהי כדי לקבל מילת קוד חוקית אחרת.
קוד הזוגיות הוא בעל מרחק 2, שכן כל שתי סיביות מתהפכות אינן מתגלות.
קוד ההישנות (3,1) הוא בעל מרחק 3, שכן יש צורך לשנות לפחות 3 סיביות (כולן בשלשה אחת) כדי לקבל מילת קוד חוקית אחרת.
באופן דומה, בקוד הישנות (4,1) – כל סיבית משוכפלת 4 פעמים – יש מרחק 4, על כן שגיאה של התהפכות שני ביטים ניתנת לגילוי.
המינג התעניין בשתי בעיות בבת-אחת; הגדלת המרחק ככל האפשר, כאשר באותו זמן מגדילים את שיעור המידע כמה שניתן.
במהלך שנות ה-40, הוא פיתח מספר סכימות קידוד, אשר היוו שיפור דרמטי ביחס לקודים הקיימים.
המפתח לכל המערכות שפיתח היה חפיפה בין סיביות הזוגיות, כך שהן היו מסוגלות לבדוק תקינות זו של זו, ולא רק של המידע עצמו.
תיאור תפקידן של סיביות הזוגיות בקוד המינג הכללי הוא די פשוט:
כל הסיביות שנמצאות במקומות שהן חזקה של שתיים משמשות כסיביות זוגיות.
כל שאר הסיביות משמשות כסיביות מידע, אשר יש לקודד.
כל סיבית זוגיות מחשבת את הזוגיות למספר מסוים של סיביות במילת הקוד.
מיקומה של סיבית הזוגיות קובע את סדרת סיביות המידע שאותם היא לוקחת בחשבון:
סיבית במקום 2: בודקת ומדלגת לסירוגין על צמד סיביות, החל מהסיבית השנייה, כלומר בודקת את הסיביות 2, 3, 6, 7, 10, 11, וכך הלאה.
סיבית במקום 8: בודקת ומדלגת לסירוגין על 8 סיביות, החל מהסיבית השמינית, כלומר בודקת את הסיביות 8 עד 15, 24 עד 31, וכך הלאה.
סיבית במקום 16: בודקת ומדלגת לסירוגין על 16 סיביות, החל מהסיבית ה16, כלומר בודקת את הסיביות 16 עד 31, 48 עד 63 וכך הלאה.
באופן כללי, סיבית זוגיות במקום n (כאשר n הוא חזקה של שתיים), בודקת ומדלגת לסירוגין על n סיביות, החל מהסיבית ה-n.
במילים אחרות, סיבית זוגיות במקום n, כאשר , בודקת את הביטים אשר הסיבית הk בייצוג הבינארי של המיקום שלהם שווה ל-1. במהופך, לדוגמה, הסיבית ה-13, או 1101 בייצוג בינארי, נבדקת על ידי הסיביות 1 (=0001), 4 (=0100) ו-8 (=1000).
יעילות התקורה של קוד המינג
נמצא קודם מה מספר הסיביות המינימלי שיש להוסיף למילת מידע כדי להבטיח שניתן לתקן שגיאה בסיבית בודדת, ללא תלות בקוד התיקון.
– מספר הסיביות הנוספות הדרושות.
– מספר הסיביות של המידע המקורי.
על כן, אורך מילת הקוד המתקבלת יהיה r+m.
קיימות מילים בינאריות שונות באורך m.
כל מילה שכזו מקודדים במילה באורך m+r.
עתה נשים לב שכדי לזהות שגיאה, אם נשנה את מילת הקוד בסיבית אחת כלשהי, עדיין צריכה להתקבל מילת המידע המקורית.
לכן בעצם כל מילת מידע מקושרת ל-m+r+1 מילים שונות באורך m+r (מילת הקוד וכל וריאציה שלה בשינוי סיבית בודדת).
על כן מבחינה מתמטית חייב להתקיים:
כלומר, מספר מילות הקוד והווריאציות עליהן חייב להיות גדול שווה למספר מילות המידע, כדי שיהיה ניתן לקודד כל מילת מידע.
מפיתוח אי השוויון הזה אנו מקבלים:
זהו כאמור חסם תחתון שכל קוד לתיקון שגיאה של סיבית בודדת חייב לקיים.
נראה שקוד המינג מקיים את החסם המינימלי, כלומר קוד המינג מקיים:
בקוד המינג מוסיפים סיבית זוגיות על כל סיבית בייצוג הבינארי של מיקום הסיביות.
עם r ספרות בינאריות אפשר לייצג כל מספר עשרוני עד .
מכאן שבעזרת r סיביות זוגיות של קוד המינג אנו יכולים לקדד מילות מידע עד אורך (כיוון שגם סיביות הזוגיות תופסות מקום במילת הקוד, הרי ש-r סיביות תמיד שמורות להן).
עבור ה-m המקסימלי בהינתן r, מתקיים:
לקחנו את ה-m המקסימלי לשם פשטות החישוב.
אם היינו לוקחים כל m בתחום האפשרי עבור r כלשהו, היינו מקבלים תוצאה דומה, אך היינו נאלצים לעבוד עם פונקציית הערך השלם (כיוון שאי אפשר להשתמש ב"שברי" סיביות יתירות) על אי-שוויון המתאר את החסם.
בכל מקרה אפשר (ובחלק מהמקרים אף נהוג) לקחת כל הודעה באורך הקטן מ-m המקסימלי, ולהוסיף לה אפסים לסופה כדי לקבל הודעה באורך מקסימלי (כדאי לשים לב שאופן פעולה כזה לא משנה אף סיבית מהמידע או הזוגיות).
על כן, ראינו כי קוד המינג הוא אופטימלי מבחינת סיביות יתירות הדרושות לצורך תיקון שגיאה בסיבית בודדת.
דוגמה לשימוש בקוד המינג (11,7)
נסתכל על מילת המידע "0110101" (באורך 7 סיביות, הנקראת משמאל לימין).
לצורך ההדגמה של קוד ההמינג, צורת חישובו והשימוש בו כדי לזהות שגיאות, ראו את הטבלה שלהלן.
הסימון d מציין סיביות מידע, ו-p מציין סיביות זוגיות.
תחילה מציבים את סיביות המידע במקומות המיועדים להם (המקומות שמהווים חזקות של 2 שמורים לסיביות הזוגיות), וסיביות הזוגיות מחושבות על פי המקובל (מספר אי זוגי של סיביות השוות ל-1 יתנו סיבית זוגיות השווה ל-1 גם כן).
|+ align="bottom"|חישוב סיביות הזוגיות של קוד המינג
!מילת המידע ללא סיביות הזוגיות: !!
!מילת המידע עם סיביות הזוגיות:
עתה נניח, לשם הדגמה, כי הסיבית האחרונה מתקבלת באופן משובש, כלומר הופכת ל-0, והמילה המשודרת היא "10001100100".
כאשר אנו באים לנתח את המילה המתקבלת, נסמן ב-1 כל סיבית זוגיות שגויה (ביחס לחישוב זוגיות של הסיביות שהיא בודקת אותם).
|+ align="bottom"|בדיקת סיביות הזוגיות (סיביות שגויות מודגשות)
השלב האחרון הוא לחשב את הערך המספרי של סיביות הזוגיות (ערך כל סיבית זוגיות נקבע על פי מיקומה).
הערך המספרי של סיביות הזוגיות המחושבות בבדיקה הוא 11, דבר שמצביע על כך שהסיבית ה-11 במילת המידע (כולל סיביות הזוגיות) היא השגויה, ויש להפוך את ערכה.
אם נסיר את סיביות הזוגיות של קוד המינג, נחזור למילה המקורית 0110101.
יש לשים לב כי אם רק סיבית זוגיות אחת נכשלת, אז בוודאות היא הסיבית השגויה (ואפשר לבדוק זאת גם לפי שיטת הבדיקה לעיל).
לסיום, נניח כי שתי סיביות התחלפו, במקומות "x" ו-"y".
אם "x" ו-"y" מוגנים על ידי אותה סיביות זוגיות, הרי שסיבית הזוגיות הזו לא תגלה את השגיאה בשניהם.
אולם, לפחות סיבית זוגיות אחת תתגלה שגויה, כיוון ש-x ≠ y והם חייבים להיות שונים לפחות בסיבית אחת בייצוג שלהם (קיימת הצגה בינארית יחידה לכל מספר, וכל מספר מיוצג על ידי הצגה אחרת).
על כן קוד המינג מזהה שקיימת שגיאה, אולם הוא אינו יכול להבדיל שגיאה זו משגיאות של סיבית בודדת, ובפרט לתת אינדיקציה בנוגע למקום הנכון שבו אירעה השגיאה.
כיום, "קוד המינג" מתייחס למעשה לקוד המינג הספציפי (7,4), אשר הוצג לראשונה בשנת 1950. קוד המינג זה מוסיף 3 סיביות זוגיות על כל 4 סיביות מידע של ההודעה.
בדומה לקוד המינג הכללי, האלגוריתם של קוד המינג (7,4) מסוגל לתקן כל שגיאה בסיבית בודדת, ולזהות כל שגיאה בסיבית בודדת או שתי סיביות.
דבר זה אומר שעבור ערוצי שידור שבהם בדרך כלל לא קורים פרצי שגיאה, קוד המינג (7,4) אפקטיבי למדי (שכן הסבירות לשתי שגיאות ב-7 סיביות היא נמוכה מאוד, והערוץ צריך להיות רועש למדי כדי שמצב כזה יקרה).
על מנת להגדיל את אפשרויות התיקון ניתן להשתמש בטכניקה הבאה: נחלק את המילים (כעת מילה היא רצף מקודד בקוד המינג של 7 אותיות) שברשותנו לקבוצות בנות 7 מילים.
כעת במקום לשדר מילה אחר מילה, נשדר בכל פעם 7 סיביות ממילים שונות.
כך, אם יש פרץ שגיאה, שבדרך הורס מספר גדול של סיביות, ניתן יהיה לתקן, כי בכל מילה תהרס רק סיבית אחת.
דוגמה לפענוח קוד המינג (7,4)
נסתכל על אותה מילת המידע "0110101" (באורך 7 סיביות, הנקראת משמאל לימין) כאשר היא כוללת בתוכה את ה-nible (יחידת מידע של 4 סיביות) שערכו "1101" ועוד 3 סיביות המינג.
נשים את המידע בטבלה הבאה ונסמן את סיביות ההמינג באות H:
כעת נחשב את ערכי סיביות ההמינג לפי קוד המינג, כך שכל סיבית המינג תהיה פעולת XOR בין כל הסיביות הסוכמות אותה, למשל 1+2=3 אז b3 יופיע גם ב-b1=H וגם ב-b2=H.
עבור nible (ארבע סיביות) נקבל:
כל שנותר לעשות הוא לחשב את ערכי סיביות ההמינג לפי קוד המינג ולראות אם הן תואמות למידע שקיבלנו בהתחלה:
ניתן לראות כי סיביות b1, b2 אינן תואמות למקור.
נסכום אותם ונקבל את הסיבית השגויה: 1+2=3 כלומר הסיבית השגויה היא סיבית b3, נהפוך אותה ונקבל את המידע הנכון: "0100101", כאשר ה-nible הנכון הוא: "0101".
באופן מעשי, קודי המינג משתמשים במכפלת מטריצות מיוחדות הקרויות "מטריצות המינג" כדי לממש את הפעולות של יצירת הקוד ובדיקת הזוגיות.
עבור קוד המינג (7,4), משתמשים בשתי מטריצות קשורות זו לזו – מטריצת יצירת הקוד G ומטריצת בדיקת הזוגיות H:
ארבע השורות הראשונות של G מייצגות את מטריצת היחידה , כאשר שלוש השורות האחרונות מהוות מיפוי מ-4 סיביות המידע ל-3 סיביות הזוגיות.
וקטורי העמודה ב-G מהווים בסיס לגרעין של H.
מטריצת היחידה מעבירה את וקטור המידע אל מעבר לשלב המכפלה (מטריצת היחידה מהווה איבר יחידה ביחס למכפלת מטריצות).
בניגוד למה שנאמר לעיל, כאן סיביות הזוגיות מופיעות בסוף מילת הקוד (סידור סיביות הזוגיות כפי שהוצג מקודם נועד לנוחיות ההצגה וההבנה, ואין לו משמעות עקרונית בקוד עצמו).
באופן דומה, שלוש העמודות האחרונות של H מייצגות את מטריצת הזהות , כאשר ארבע העמודות הראשונות מייצגות את המיפוי (הזהה למיפוי של מטריצה G) בין סיביות המידע לסיביות הזוגיות.
לצורך ביצוע האלגורתמים של יצירת הקוד והבדיקה, מייצגים את מילת המידע בתור וקטור עמודה.
לדוגמה, אם מילת המידע שלנו היא "1011", נקבל את הווקטור:
נניח כי ברצוננו לשדר את המידע מעל ערוץ רועש.
על כן, ניקח את המכפלה של G ו-p, כאשר המכפלה מתבצעת במודולו-2, ונקבל את מילת הקוד x שיש לשדר (נשים לב שמילת הקוד אכן באורך 7 סיביות, וסיביות הזוגיות מופיעות בסוף המילה):
אם שום שגיאה לא אירעה במהלך השידור, הרי שמילת הקוד המתקבלת r זהה למילת הקוד המשודרת x:
כדי לראות אם אירע שיבוש במילת הקוד, המקבל צריך להכפיל את H עם r.
ביצוע המכפלה הזו (שוב במודולו-2) מניב את התוצאה:
כיוון שקיבלנו את וקטור האפס, המקבל יכול להסיק כי שום שגיאה לא אירעה.
וקטור האפס מציין שלא אירעו שגיאות כיוון שכאשר וקטור המידע מוכפל עם G, הווקטור המתקבל מהמכפלה מהווה צירוף ליניארי של הבסיס של H.
לכן, כל עוד לא מתבצע שום שינוי בזמן השידור, r ימשיך להיות בגרעין של H, והמכפלה תמשיך להניב את וקטור האפס.
עכשיו נניח כי אירעה שגיאה בסיבית בודדת.
כאשר ביטוי זה הוא במודולו-2, ו- הוא וקטור היחידה ה-i, כלומר וקטור עמודה שכל האיברים שלו שווים לאפס, פרט לאיבר ה-i, אשר שווה ל-1. על כן, הביטוי הנ"ל מציין כי אירעה שגיאה בסיבית ה-i של המידע.
עתה, אם נכפיל וקטור זה ב-H:
כיוון ש-x הוא המידע המשודר, הוא ללא שגיאות, ולכן תוצאת המכפלה של H ו-x הוא אפס (כפי שראינו קודם).
הכפלת H עם וקטור היחידה ה-i מניבה בתוצאה את העמודה ה-i של H, ועל כן אנו יודעים כי השגיאה אירעה בסיבית שמספר סידורה הוא כמו העמודה שקיבלנו, כלומר שהסיבית השגויה היא הסיבית ה-i, ועל כן נוכל לתקן את השגיאה בעזרת מידע זה.
לדוגמה, נניח כי המידע המתקבל הוא:
אשר מתאים לעמודה השנייה של H.
על כן, השגיאה אירעה בסיבית השנייה, ולכן ניתן לתקנה.
לא מסובך להראות כי רק שגיאות בסיבית בודדת ניתן לתקן על ידי שימוש בסכמה זו.
פרט לכך, ניתן להשתמש בקודי המינג כדי לזהות שגיאות בסיבית בודדת או בשתי סיביות, פשוט על ידי בחינת המכפלה של וקטור המידע עם H – קיימת שגיאה ודאית אם המכפלה אינה שווה לווקטור האפס.
עם זאת, כפי שנאמר, בלתי אפשרי להבדיל בין שגיאות בסיבית בודדת לשגיאות בשתי סיביות בשימוש קוד המינג בלבד.
קוד המינג עם סיבית זוגיות נוספת
ניתן להשתמש בסיבית זוגיות נוספת, כדי לשפר את יכולות הזיהוי שגיאה של קוד המינג.
סיבית הזוגיות הנוספת בודקת את כל הסיביות של מילת הקוד הנוצרת בקוד המינג (כלומר היא בודקת את סיביות המידע ואת סיביות הזוגיות של המינג).
פעולה כזו מגדילה את מרחק המינג מ-3 ל-4. בעקבות כך, ניתן לזהות את כל השגיאות בסיבית בודדת, בשתי סיביות או בשלוש סיביות.
כמו כן, ניתן להבדיל בוודאות בין שגיאות בשתי סיביות או שגיאה בסיבית בודדת.
על כן, ניתן לפחות לזהות את השגיאות בשתי סיביות, ולסמנן כלא ניתנות לתיקון (ובכך לבקש שידור מחדש):
כאשר מבצעים תיקון שגיאה, אם מזהים שגיאה בסיבית הזוגיות הנוספת וגם קוד המינג מציין שישנה שגיאה, שגיאה זו ניתן לתקן.
לעומת זאת, כאשר לא מזהים שגיאה בסיבית הזוגיות, אולם קוד המינג מזהה שקיימת שגיאה, ניתן להניח כי הדבר נובע משגיאה בשתי סיביות, אולם לא ניתן לדעת בוודאות באיזה סיביות השגיאה אירעה.
ניתן למדוד את נצילות שידור הסיביות על ידי הנוסחה:
m – מספר הסיביות במילה.
H – מספר סיביות המינג.
קוד ליניארי הוא קוד, כלומר, אוסף של וקטורים מעל שדה סופי בן איברים, המהווה מרחב וקטורי.
המבנה המוגבל של קודים אלה מאפשר לאפיין ולחקור אותם באופן תאורטי, וליישם שיטות פשוטות ויעילות לקידוד ופענוח שלהם (כדוגמת פענוח סינדרומי, שיוצג בהמשך; גם מציאת מרחק מינימלי בקוד ליניארי ניתנת לביצוע יעיל בהרבה מאשר במקרה הכללי).
בתקשורת, משמשים קודים ליניאריים לתיקון ואיתור שגיאות באמצעות הוספת יתירות למסר הנשלח.
למשל, קוד המינג הבינארי מאורך 7 הוא קוד ליניארי המאפשר שידור מידע של 4 סיביות (מספרים בין 0 ל-15) באמצעות מילים בנות 7 סיביות.
בתמורה ליתירות, מבטיח הקוד את האפשרות לתקן כל שגיאה בודדת.
קוד ליניארי מאורך , ומימד הוא תת-מרחב מממד של המרחב הווקטורי , כאשר הוא השדה הסופי בן האיברים.
קוד כזה מכונה גם קוד -ארי, (עבור , הקוד מכונה קוד בינארי, ועבור , טרנארי) או במקרה שיש עניין לציין את מרחק הקוד , קוד .
קוד ליניארי מכיל איברים, וניתן להצגה באמצעות בסיס בן איברים.
מטריצה אשר שורותיה הן בסיס לקוד מכונה מטריצה יוצרת של הקוד.
לכל שתי מילות קוד שונות מגדירים (כאשר מציין את מרחק המינג בין המילים, ו- את משקל המילה - כלומר, מספר המקומות בהם היא שונה מאפס), ומרחק הקוד מוגדר להיות .
מכך ניתן להסיק שמרחק הקוד של קוד ליניארי שווה למשקל המינימלי של מילות הקוד השונות מאפס: .
ככל מרחב ליניארי, גם לקוד קיים משלים אורתוגונלי, המהווה גם קוד ליניארי, מסומן ונקרא הקוד הדואלי של .
בהינתן מטריצה יוצרת של , מתקיים
מטריצה יוצרת של קוד זה מכונה מטריצת בדיקת זוגיות של , ומקיימת כאשר היא מטריצה יוצרת של , ו- היא מטריצת בדיקת זוגיות שלו.
בשיטת הפענוח הסינדרומי נעשה שימוש במטריצה זו לפענוח .
בספרות אין אחידות בסימון הפרמטרים של קוד ליניארי.
בעוד שבחלק מהספרים מדובר בקוד ליניארי, וקוד בלתי ליניארי (כאשר בסימון הראשון משמעות ממד המרחב בעוד שבשני הוא מספר המילים המדויק בקוד), בחלק מהספרים נהוג סימון הפוך.
בערך זה נעשה שימוש בסימון הראשון (הסוגריים המרובעים) לסימון קוד ליניארי.
בהינתן קוד ליניארי , ניתן לחלק את המרחב למחלקות מהצורה לכל .
כלומר, לאוספי כל הווקטורים המתקבלים מהוספת וקטור כלשהו (לאו דווקא מילת קוד) לכל איברי .
המחלקות המתקבלות על ידי שוות כולן בגודלן לגודלו של , דהיינו מכילות איברים כל אחת.
למחלקות הללו קיימים נציגים רבים.
למעשה, כזכור מתורת החבורות, קיים שוויון בין שתי מחלקות אם ורק אם .