לדלג לתוכן
שינוי מצב סרגל צד
Math-Wiki
חיפוש
יצירת חשבון
כלים אישיים
יצירת חשבון
כניסה לחשבון
דפים לעורכים שלא נכנסו לחשבון
מידע נוסף
שיחה
תרומות
ניווט
עמוד ראשי
שינויים אחרונים
העלאת קובץ
כלים
דפים המקושרים לכאן
שינויים בדפים המקושרים
דפים מיוחדים
מידע על הדף
עריכת הדף "
מבנים אלגבריים למדעי המחשב - ארז שיינר
" (פסקה)
דף
שיחה
עברית
קריאה
עריכה
גרסאות קודמות
עוד
קריאה
עריכה
גרסאות קודמות
אזהרה:
אינכם מחוברים לחשבון. כתובת ה־IP שלכם תוצג בפומבי אם תבצעו עריכות כלשהן. אם
תיכנסו לחשבון
או
תיצרו חשבון
, העריכות שלכם תיוחסנה לשם המשתמש שלכם ותקבלו גם יתרונות אחרים.
בדיקת אנטי־ספאם.
אין
למלא שדה זה!
==הרצאה 10 קידוד; פרק 8 מ[http://abstract.ups.edu/aata/ הספר]== *תעודת זהות בישראל. *עבור ספרת הביקורת של תעודת הזהות אנו לא מרשים שימוש בספרה X ולכן עובדים ב<math>\mathbb{Z}_{10}</math>. *הבעייה - זה אינו שדה ויש מחלקי אפס. למשל <math>5\cdot 0 = 5\cdot 2</math>, לכן הקוד לעיל לא יזהה בהכרח החלפת ספרה. *תאור מילולי של חישוב ספרת ביקורת (אלגוריתם Luhn): **לכל ספרה בתעודת הזהות ניתן משקל - 2 עבור הספרה הימנית ביותר (שאינה ספרת הביקורת) 1 עבור הבאה, וכך הלאה בסירוגין. **נכפיל כל ספרה במשקל שלה, אם הכפלנו ספרה ב2 וקיבלנו מספר בן שתי ספרות - נסכום את הספרות. **נסכום את כל התוצאות הללו. **המספר הקטן ביותר שנוסיף לסכום לעיל על מנת להשלים אותו לכפולה שלימה של 10, הוא ספרת הביקורת. *לדוגמא - מספר התעודת הזהות הראשון שניתן הוא 1. נכפול ב2 ונקבל 2. נשלים ל10 וספרת הביקורת היא 8, לכן תעודת הזהות היא 18. *לדוגמא - נניח שתעודת הזהות היא 1789 (כמובן ללא ביקורת). אזי 9 כפול 2 זה 18, ולכן נסכום 9, 8 כפול 1 זה 8, 7 כפול 2 זה 14 שנותן 5, ו1 כפול 1 זה 1. **סה"כ קיבלנו 9+8+5+1=22 ולכן ספרת הביקורת היא 8. *תאור מתמטי: *ראשית נביט בכפל ב2 **הספרות <math>\{0,1,2,3,4\}</math> נשלחות לספרות <math>\{0,2,4,6,8\}</math> בהתאמה. **הספרות <math>\{5,6,7,8,9\}</math> נשלחות לספרות <math>\{1,3,5,7,9\}</math> בהתאמה. **הספרות <math>\{5,6,7,8,9\}</math> כפול 2 שוות ל <math>10+x</math> ונשלחות ל<math>1+x</math>. **נשים לב כי פעמיים הספרה שקול ל <math>x</math> מודולו 10. **סה"כ הגדרנו את הפונקציה הבאה על הספרות <math>f(a)=\begin{cases}2a & a\leq 4 \\ 2a+1 & a\geq 5\end{cases}</math>. *שימו לב שכפל רגיל ב2 לא היה עובד, כיוון ש<math>2\cdot 5 = 2\cdot 0</math>. *מדוע אם כך בחרנו דווקא במשקל 2 שאינו זר ל 10 (ולכן אינו הפיך)? **ההפיכים מודולו 10 הם אי זוגיים. **ההפרש בין כל שניים מהם הוא זוגי, ולכן כל חילוף של שתי ספרות בהפרש 5 לא היה מתגלה. ** לדוגמא נניח כי המשקלים הם 1 ו3. **<math>1\cdot a+3\cdot (a+5)=a+3a+15=1\cdot(a+5)+3\cdot a</math>. *נניח שספרות תעודת הזהות הן <math>x_9,...,x_1</math> כאשר <math>x_1</math> היא ספרת הביקורת והימנית ביותר. *לפי החישוב לעיל ספרת הביקורת נבחרה כך ש <math>x_9+f(x_8)+x_7+...+f(x_2)+x_1=0</math>. *נעביר אגף ונקבל נוסחא לספרת הביקורת. *קל לראות שתעודת זהות שנפלה בה טעות בספרה אחת אינה תקינה יותר. **אם הספרה השונה היא במקום אי זוגי אז <math>1\cdot x_i\neq 1\cdot yi</math>. **אם הספרה השונה היא במקום אי זוגי אז <math>f(x_i)\neq f(y_i)</math> כיוון ש<math>f</math> חח"ע. *אם החלפנו את הספרות 0,9 במקומות סמוכים לא נזהה את השגיאה. **אכן, <math>1\cdot 0 + f(9) = 9 = 1\cdot 9 + f(0)</math>. *אם החלפנו שתי ספרות שונות במקומות סמוכים שאינן הזוג 0,9 אז נזהה את השגיאה. **אם שתי הספרות קטנות או שוות ל4, נקבל <math>x_i+2x_j-x_j-2x_i=x_j-x_i\neq 0</math>. **אם שתי הספרות גדולות או שוות ל5 נקבל <math>x_i+2x_j+1-x_j-2x_i-1=x_j-x_i\neq 0</math>. **אם <math>0\leq x_i\leq 4</math> אבל <math>5\leq x_j\leq 9</math> נקבל <math>x_i+2x_j+1-x_j-2x_i=x_j-x_i+1</math>. **הדרך היחידה ש<math>x_j-x_i+1=0</math>היא אם <math>x_j-x_i=9</math> וזה בדיוק הזוג 0,9. ===קוד לינארי=== *המידע שאנו מעוניים לשלוח הוא וקטור של ביטים <math>\mathbb{Z}_2^k</math>. *נכפיל את המידע במטריצה הבינארית <math>G=\begin{pmatrix} I_k \\ A\end{pmatrix}</math> ונקבל קוד ב<math>\mathbb{Z}_2^n</math>. *דוגמא **נביט במטריצה <math>G=\begin{pmatrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\\ 1 & 1 & 1\end{pmatrix}</math>. **כפל במטריצה זו מוסיף למידע באורך 3 ביט יתירות הבודק זוגיות (parity bit). *עבור <math>G=\begin{pmatrix} I_k \\ A\end{pmatrix}</math> נגדיר את המטריצה <math>H=\begin{pmatrix}A & I_{n-k}\end{pmatrix}</math>. *טענה: *לכל וקטור <math>Hv=0</math> אם ורק אם <math>v</math> הוא מהצורה <math>v=Gx</math>. **הוכחה: **כיוון ראשון: ***נוכיח ראשית ש<math>HG=0</math>, ולכן ברור שאם <math>v=Gx</math> אזי <math>Hv=0</math>. ***<math>HG=\begin{pmatrix}A & I_{n-k}\end{pmatrix}\begin{pmatrix}I_k \\ A\end{pmatrix}=A+A=0</math> (זכרו שאנו מעל השדה <math>\mathbb{Z}_2</math>). **בכיוון ההפוך: ***נניח כי <math>Hv=0</math> ונסמן <math>v=\begin{pmatrix}x\\u\end{pmatrix}</math> כאשר <math>x\in\mathbb{Z}_2^k</math>. ***נוכיח כי <math>Gx=v</math>. ***נסמן <math>Gx=\begin{pmatrix}x\\u'\end{pmatrix}</math>, צריך להוכיח כי <math>u=u'</math>. ***נתון כי <math>Hv=0</math>, ומכיוון קודם ידוע כי <math>HGx=0</math> ולכן ביחד <math>H(Gx-v)=0</math>. ***לכן <math>0=H(Gx-v)=H\begin{pmatrix}0\\u'-u\end{pmatrix}=\begin{pmatrix}A & I_{n-k}\end{pmatrix}\begin{pmatrix}0\\u'-u\end{pmatrix}=u'-u</math> **כלומר קוד <math>v</math> הינו תקין אם ורק אם <math>Hv=0</math>. *שימו לב כי נובע מההוכחה לעיל שעבור וקטור מידע <math>x</math> יש בדיוק וקטור יתירות יחיד <math>u</math> עבורו <math>\begin{pmatrix}x\\u\end{pmatrix}</math> תקין. *כלומר, ניתן לזהות כל כמות טעויות המשנה אך ורק את וקטור היתירות.
תקציר:
לתשומת לבך: תורמים אחרים עשויים לערוך או אף להסיר את תרומתך ל־Math-Wiki. אם אינך רוצה שעבודתך תהיה זמינה לעריכה על־ידי אחרים, אין לפרסם אותה פה.
כמו־כן, שמירת העריכה משמעה הבטחה שכתבת את הטקסט הזה בעצמך, או העתקת אותו ממקור שאינו מוגן בזכויות יוצרים (אפשר לעיין בדף
Math-Wiki:זכויות יוצרים
לפרטים נוספים).
אין לעשות שימוש בחומר המוגן בזכויות יוצרים ללא רשות!
ביטול
עזרה בעריכה
(נפתח בחלון חדש)