אדום נחמד כתב:
הפועל כתב:
its-sick כתב:
הפסאודו אקראיות היא קצרת טווח
אני לא מבין כמעט כלום בדחיסה, אבל ממה שזכור לי זה משפט המפתח, כי חלון הדחיסה הוא די קטן.
תסביר את עצמך..
איציק טען שהאקראיות היא קצרת טווח, כלומר לאורך זמן אתה תראה פטרנים ותוכל לדחוס.
מצד שני, הרגע הסברתי שלמעשה הקובץ לא נדחס באמת, אלא רק הייצוג אסקי שלו..
עכשיו, למה התכוונת?
אני לא מבין כלום בפסודו-אקראיות, וכו'. אם איציק אומר, אני מאמין לו. אני אסביר רק לגבי מה שאני התכוונתי, ואני אתן פה הסבר מהזיכרון למשהו ששמעתי מזמן ולא התעמקתי בו מעולם. מי שמבין יותר מוזמן לתקן אותי.
ממה שזכור לי דחיסה בהכללה גסה מאד עובדת ע"י שמירת "מילון", כאשר הקידוד שלו עובד תחת ההנחה שאין באמת חלוקה יוניפורמית מושלמת.
כלומר יש "אותיות"/"מילים" במילון שיחזרו לעיתים קרובות, ואפשר לקודד אותן בקידוד קצר יותר. נניח למשל שכל הקובץ שלך מורכב משלוש מילים AAA BBB CCC
תוכל לדחוס את הקובץ שלך עם המילון A B C, ולשמור את המילון עצמו בצד
A => AAA
B=> BBB
וכו
בפתיחה מחדש, תצטרך לקרוא את המילון ולפתוח את הקובץ.
כדי לעשות את התהליך מהיר, לא עושים מילון על כל הקובץ, שיכול להיות ענקי כמובן.
פירושו של דבר שהמילון יהיה גדול מאד, והדחיסה והפתיחה יהיו מאד איטיים. לפעמים עוד סיבה היא גם הנחה שיש spatial locality למילים - בקטעים רחוקים אחד מהשני, יהיו פחות מילים דומות. זה נכון בהרבה מקרים.
בכל מקרה אז משתמשים בחלון דחיסה - מחלקים את הקובץ לקטעים קטנים (נניח בגודל קבוע 1MB כל אחד) ולכל אחד מהם עושים מילון משל עצמו.
אם בכל קטע קטן בפני עצמו יש אקראיות מוחלטת והתפזרות אחידה וכו', אז הדחיסה המקסימלית שתוכל להגיע היא מה שתיארת - דחיסה של 10 ביטים ל-3 ביטים.
אם תגדיל את הקטעים שאתה משתמש בהם (נניח שוב בגודל קבוע של 128MB כל אחד), ומדובר בדאטה שיש בתוכו בכל זאת התפזרות לא אחידה כלשהי בתוך 'קטעים בגודל שכזה, אז אולי תאט את התהליך אבל תקבל דחיסה יותר טובה.
אלו היו 60 שניות של מה שנדמה לי שאני יודע על דחיסה
