Table of Contents
הקשר בין מיון ודיכוי
דחיסת נתונים ודיכאון בבסיס כל דבר מסטרימינג וידאו לאחסון בענן. בעוד שרוב המהנדסים מתמקדים בקידוד אנטרופי, שיטות מילון או שינוי coding, אחד לעתים קרובות צופה מאיץ הוא מיון אלגוריתמים לעשות יותר מאשר סדר נתונים; הם להפחית אנטרופיה, לאפשר זיהוי, ומבנה מידע כך למנועי דחיסה יכולים לנצל אדמומיות עם מינימלית מעל ראש.
אלגוריתמים דחיסה ללא הפסד כגון Huffman coding, Run-long ⁇ (RLE), ואת Burrows-Wheeler להפוך (BWT) להסתמך על נתונים מכוונים או ממוזנים חלקית כדי להשיג יחסי דחיסה גבוהים.אפילו קודים אובדן כמו JPEG-2000 להשתמש בסוגיית גלי הגלים עבור קידוד יעיל.
כיצד מיון מפחית אנטרופיה
אנטרופיה, בתיאוריה של מידע, מודדת את כמות המידע הממוצעת הכלולה במקור.הטבעה גבוהה פירושה שהנתונים קרובים לדחוסים אקראיים וקשה לדחוס.מיין מפחית את הטרופיה המקומית על ידי שילוב ערכים דומים יחד.כאשר זהים או אסימונים מופיעים ברציפות, תוכניות פשוטות כמו חסימת קידוד ארוך-טווח יעיל מאוד.לדוגמה, רצף לא מפוספס של ע"י יכול להיות שני ערכים זהים; לאחר רצף זהה, לאחר מכן, לאחר מכן, הופך להיות יעיל מאוד.
ההפחתה האנטרופית אינה גלובלית; מיון מציג סוג אחר של מבנה.המדפס חייב להקליט את הסדר המקורי (באמצעות שינוי הפוך או הגשמה) כדי לאפשר שיקום ללא הפסד.אבל עלות אחסון כי ההסתה היא בדרך כלל נמוכה בהרבה מהחיסכון של אנטרופיה ההורדה.המסחר הזה הוא מרכזי לדחוסים מודרניים רבים.
המונחים: a Preprocessing Step
מערכות דחיסה רבות מתכוונות למיין כשלב עיבוד מוקדם.הבורים-וילאר משנים את החלוקה לבלוקים, ואז כל סיבובים מחזוריים של כל בלוק.התוצאה היא מחרוזת שעדיין מקומית מאוד - דמויות שלעתים קרובות co-ccur in the קלט להיות צמוד. פלט זה, לאחר טרנספורמציה בכיוון-נגד, מניבות הרבה אפס-ערכים על ידי, אשר לעתים קרובות עם חיתוך יעיל של עץ Hufft, באופן דומה.
דוגמה נוספת היא השימוש במיין בשיטות מילון Lempel-Ziv.המילון הוא לעתים קרובות מיושם כשולחן hash או עץ.אם המילון ממיין (למשל, רשימה מכוונת של ביטויים), חיפוש בינארי מקטין את זמן המראה מ- O(n) ל- O(log n) מהירות זו הופכת קריטית בצנרת דחיסות גבוהה, כגון אלה המשמשים ממש להעברת נתונים אמיתיים.
המונחים: Algorithms Used in Compression
לא כל אלגוריתמים ממיין מתאימים באותה מידה לעומסי עבודה בדחיסה.הבחירה תלויה בגודל נתונים, מגבלות זיכרון, והאם ניתן לעבד את הקלט במקום.
- (FLT:0) QuickcksortofFLT:1 משמש נרחב עבור סוג של בלוקים בשל ה- O(n log n) הממוצע זמן נמוך מעל ראש נמוך. ⁇ 2 רבים משתמשים במהירות עבור BWT suffix בנייה, אם כי ה- O(n2) הגרוע ביותר שלה יכול להיות בעייתי עבור קלטות סטיות לעתים קרובות ליפול או stros.
- (FLT:0)MergesortFLT:1 הוא יציב ומציע זמן מובטח O(n log n), מה שהופך אותו מתאים טוב עבור מיון חיצוני כאשר נתונים עולה על RAM.
- (FLT:0)RadixמייןFLT:1 הוא ליניארי במספר ה bits לכל מפתח, מה שהופך אותו אטרקטיבי עבור מיון integers (למשל, ערכי פיקסל, ספירת תדר) הוא בשימוש בכמה דחוסים למטרות מיוחדות עבור גרפיקה ונתונים מדעיים שבהם המפתחות הם של רוחב קבוע.
- (FLT:0) Introspective sort (Introsort)FLT) 1:1 מתחיל עם מהירות אך מתגים ל heapsort כאשר עומק סיור עולה על סף, שילוב מהירות עם בטיחות.זה כברירת מחדל בספריה סטנדרטית C++ מופיע צינורות רבים כי צריך התנהגות מזוודה גרועה.
המונחים: Lossless Compression Techniques
אלגוריתמים ללא הפסד מנצלים את הבזבוז ללא הרס מידע.מינו משתלב באופן טבעי לכמה מהם, לעתים קרובות כמבצע פרימיטיבי בתוך הצופן או כפוסט-פורמולציה.
Run-Length Encoding (RLE) עם נתונים מדומים
RLE מחליף סמלים זהים רצופים עם ספירה והסמל של גורם הדחיסה שלו תלוי לחלוטין על אורך ריצה.מיין את הקלט הראשון יכול להמיר רצף אקראי לתוך ריצות ארוכות, באופן דרמטי להגדיל את יעילותו של RLE. לדוגמה, תמונות פקס שחור-לבן (קבוצה 4) להשתמש קוץ באורך דו-ממדי, כי היתרונות של הסדר הטבעי של קווים גנריים, מיון לעתים קרובות משולב קוד-פר-פר-פר-אפ-פר-פר-פר-אפ כדי לייצר קוד-פר-פרצוף ארוך-ממדי כדי לייצר.
Huffman Coding ו-מיין Output
הקידוד Huffman בונה קוד תיקון אופטימלי המבוסס על תדרי סמל.האלגוריתם עצמו דורש מיון תדרים לבניית עץ בינארי ביעילות (בדרך כלל באמצעות תור עדיפות, שהוא מבנה ממיין) מעבר לכך, כאשר הפלט של שינוי ממיין הוא ניזון לתוך Huffman coding, חלוקת ההסתברות וכתוצאה מכך הוא יותר מעודף: סמלים גבוהים (כמו אפס) מתרחשים עם הסתברות גבוהה יותר, אפילו קוד קצר זה, כמו Cv1.
Lempel-Ziv Algorithms ו-Dictionaries
(המכונים LZ77, LZ78, וגזרותיהם (LZW, LZMA) שומרים על חלון מזחלות או מילון גדל של ביטויים.מונים מבנים נתונים, כגון עצים מאוזנים או מפתחות טבלת טבלה ממוינה, במהירות את החיפוש הארוך ביותר-תואם. לדוגמה, zlib משתמשת בטבלה hash אשר היתרונות שלה ממין של דליים מתקדמים יותר כמו Zgith-Fed.
Burrows-Wheeler Transform (BWT) ו-מיין
ה- BWT הוא אולי האיור הישיר ביותר של תפקידו של מיון בדחיסה.הוא בונה מריצה של כל הסיבובים המחזוריים של בלוק וסוג שורות lexically.העמודה האחרונה של מאטריקס מסוג זה הופכת לפלט המשתנה.מיין הוא צוואר הבקבוק חישובי; איכות הדחיסה תלויה לחלוטין באלגוריתם המנוי המשמש ליצירת מערך ה- suffixeual Sotrated to a new-Ftary or a first be aptro).
אריתמטית קוינג וסוג של ההסתברות
coding אריתמטי מספק דחיסה כמעט-אופטימלית עבור נקודות תורמות.אם הסיכויים של סמלים להשתנות עם ההקשר, מיון ההקשרים יכול לשפר את הדיוק של estimation הסתברות. קודים קידוד הסתגלות לעתים קרובות לשמור על רשימה מכוונת של זוגות הקשר בין-symbol כדי לאתר במהירות את ההפצה הרלוונטית.
התפקיד של מיון ב-Decompression Speed
דיכאון חייב לשחזר את הנתונים המקוריים במהירות, לעתים קרובות עם זיכרון מוגבל.מיין מאיץ את שיקום זה בכמה דרכים.
צו מהיר יותר עם מבנה נתונים ממיין
פורמטים דחוסים רבים מאחסנים metadata (אורך קוד, מדפים, ספירות ריצה) בסדר ממונן.לדוגמה, טבלאות קוד Huffman ממיין על ידי אורך קוד כדי להאיץ את המראה קודר. כאשר אורך קוד הם ללא דיסטוטונית לא מרתיע, הפעוט יכול להשתמש עץ Huffman canonical, אשר מפחית את החיפוש לפשוט פשוט על ידי ספירת קוד זה לעתים קרובות עושה את ה-ידי ה-reme.
המונחים: revision
ה- BWT הוא דוגמה בולטת: בהתחשב בעמודה האחרונה L ואינדקס מצביע על הדמות המקורית הראשונה, האלגוריתם בונה את העמודה הראשונה על ידי מיון L. שלב מיון זה הוא החלק הממושך ביותר של BWT decompression. Optimized יישום שימוש ברשימה מקושרת אינדקס או סוג (סוג של מטבע) כי האלפבית הוא קטן (בדרך כלל על ידי ספירה) סוג כזה של nverse) הוא סוג כזה של nn (n) עם nverse) עם nverse) הוא מאוד לא מקובל (n) עם nverse זמן tverse) עם nverse) הוא סוג כזה, אשר הופך nverse זמן קצר מאוד (n) עם nverse).
אפשרויות מקבילות
(המונח הוא כמובן מקבילה.לדחיסה, יישום רב-הנקרא יכול למיין בלוקים באופן עצמאי, ואז למזג תוצאות (סוג של merge) עבור דיכאון, את הטרנספורמציה המעוותת של כל בלוק ניתן למיין באופן עצמאי כמו גם כלים כמו pbzip2 ו- Pigz (הגיעת דחיסה דומה) ממינוף זה על ידי פיצול קלטות, דחיסה כל אחד עם שלב מיון משלה, ולאחר מכן, ולאחר מכן, ובכך לדחוס במהירות גבוהה יותר, כולל CPTD.
ניתוח השוואתי של מיון אלגוריתמים עבור Compression
בחירת האלגוריתם הנכון של מיון יכול לעשות את ההבדל בין דחיסה מהירה, ברמת הייצור לבין איטי.
Quicksort vs Mergesort vs Radix
| Algorithm | Time Complexity | Space Complexity | Best Use Case |
|---|---|---|---|
| Quicksort | O(n log n) average, O(n²) worst | O(log n) in-place | In‑memory block sorting (BWT) |
| Mergesort | O(n log n) guaranteed | O(n) auxiliary | External sorting, stable requirements |
| Radix Sort | O(n * k) (k = bit width) | O(n + 2^k) | Fixed‑width integer keys (frequency, pixel values) |
עבור BWT, Quicksort הוא נפוץ אבל סיכונים ערימה על פני זרימת נתונים פתולוגיים. חלק מהיישומים (למשל, bzip2) לעבור לנפילה אם עומק טיול עולה על גבול. מרgesort מציעה חיזוי בעלות של זיכרון נוסף. רדינקס הצטיין כאשר הטווח הוא קטן (למשל, מיון על ידי tes, אשר הם 256) ואז הופך טריוויאלי מאוד מהר.
המונחים: External sorting
כאשר דחיסת קבצים גדולים יותר מאשר RAM זמין, כל הנתונים לא ניתן למיין בזיכרון. אלגוריתמים חיצוניים (בדרך כלל גרסה של מיזוגsort אשר קורא וכותב קבצים זמניים) משמשים.כלי קומפרסציה כמו "bzip2" עבור קבצים גדולים לשבור את קלט לתוך בלוקים (למשל, 900 KB), כל בלוק בזיכרון, ולאחר מכן לכתוב את בלוקים דחוסים באופן זמני עבור דחיסות גדולות יותר כמו דחיסות אבטחה מסוג זה (אונדנטמי) או נתונים סטנדרטיים שונים (למשל, כגון דחיסה מוגבלת) או דחיסה מוגבלת (למשל, כלומר, כלומר, כלומר, כלומר, כלומר, 900 KB), או דחיסה מוגבלת יותר דחיסה מוגבלת יותר, 000) או דחיסה מוגבלת (למשל, 000 דחיסה מוגבלת (למשל, 000) או דחיסה מוגבלת של נתונים דחיסה מוגבלת של נתונים דחיסה מוגבלת (למשל, 000) או דחיסה מוגבלת (למשל, 000) באמצעות דחיסה מוגבלת (למשל, 000 נתונים סטנדרטית נתונים סטנדרטית נתונים סטנדרטיים סטנדרטיים סטנדרטיים) או דחיסה מוגבלת (למשל, 900 KB), כל בלוקים נתונים דחיסה מוגבלת) או דחיסה של אבטחה מוגבלת יותר דחיסה מוגבלת
הסתגלות והשפעה על קומפרסו
כמה דחוסים להתאים את האסטרטגיה הממיין שלהם בהתבסס על תכונות נתונים.לדוגמה, דחוס עשוי לזהות כי קלט כבר כמעט ממיין (למשל, טקסט לאחר BWT חלקית) ולהשתמש בסוג ההכנסה כנפילה, כי הוספת סוג הוא O(n) על נתונים כמעט מחוסנים (למשל, אחרים משתמשים timsort, אלגוריתם היברידי הנגזר ממיזוגים וסוג של Pythonst) אשר משמש כמה נתונים מראש.
יישומים מעשיים ואופטימיזציה
הסינרגיה בין מיון ודחיסה מופיעה במערכות רבות בעולם האמיתי.
המונחים: Database Compression
(למשל, Apache Parkt, ORC) מאחסן כל עמודה בנפרד ולעתים קרובות ממיין את השורות לשיפור הדחיסה.מיין על עמודה (או קבוצה של עמודות) משפר מאוד את הקידוד באורך מלא: אם העמודה ממיין, כל הערכים זהים הופכים להיות סמוכים, מניבים ריצות ארוכות שדחוסות למספר ע"י מסד נתונים מודרני, משתמשים גם במילון על מנת להגדיר מהירויות של חיפוש בלבד, אך ורק על ידי שימוש ברשימות של קבוצות של תכונות דומות, אך ורק על ידי איסוף.
צילום ווידאו קומפרספרסיון
בדחיסה אובדן, גללט משנה (למשל, JPEG-2000, Dirac) מסמן תמונה לתוך תת-bands of coefficients.comefficients אלה הם אז לכמת וקודד.מיין את ה- coefficients על ידי גודל לפני שקידוד (שלב שנקרא "ניהול אותות") מאפשר לקוד לשלוח את ה-Coefficients הגדול ביותר ראשון, השגת אלגוריתם מתקדם (Ricek-Aducing) ו-Aducing אותו באופן דומה (Ricial) של CHTC).
טקסט קומפרספרס
דחוסים טקסט כמו PPM (הסבר על ידי התאמה חלקית) לעתים קרובות למיין את ההקשרים שבהם מופיע סמל.עץ ה-Suffix או suffix המשמש תוכניות דחיסות טקסט רבות (למשל, עבור התאמות לטווח ארוך) דורש מיון כל suffixes של הקלט.זה זהה ל- BWT בעיקרון.compressors כגון zips עבור ההיסטוריה של שימוש בסימן IX2 נעשה בדרך כלל עם מודלים מטיפוס של קודמוטיבים.
אבטחת מידע ברשת
פרוטוקולי רשת לעתים קרובות דחוסים ראשים או תשלום.לדוגמה, דחיסת ראש IP (RFC 2507) משתמשת בסוגיית שדות ראשיים כדי לזהות דלטס. כמה פרוקסיות דחיסה שקוף סוג של תשלום ב-buffer לפני יישום zip-like דחיסה. בעוד ראש של מיון חיץ קטן הוא נמוך, את הרווחים ביחס יכול להיות משמעותי כי תשלומים מכוונים יש הרבה יותר של פרוטוקולים זהה.
מסקנה
אלגוריתמים ממיין הם הרבה יותר מאשר תרגילים אקדמיים; הם מנועים מעשיים המזרזים את דחיסת הנתונים ואת הדיכאון. על ידי צמצום האנטרופיה, המאפשרים שינויים מתוחכמות כמו BWT, ומהירות של חיפושים במילון, מיון מספק את המבנה כי אלגוריתמים דחיסה צריך להשיג יחס גבוה יותר, כמו גם מבנים ממוזנים המסייעים לפשט ולהאיץ אלפבית, במיוחד כאשר משתמשים באמצעים ליניאריים לספירה לספירה של דחיסות לספירה.
בעת תכנון צינור דחיסה, מהנדסים צריכים לשקול את הבחירה של מיון אלגוריתם בזהירות - מהירות איזון, זיכרון והתנהגות הגרועה ביותר מזוודה. בין אם באמצעות מהירות עבור חסימה שינויים, קרינה מסוג עבור פעולות ברמה גבוהה, או מיזוג חיצוני עבור נתונים בקנה מידה terabyte, אלגוריתם מיון הנכון יכול לעשות מערכת מהירה ויעילה.
(ב) ראו את ה-[[1924]], [[1924]], [[1924]]]], [[1924]], [[1924]]]], [[1924]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]