התמרת בורווס-וילר

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה לניווט קפיצה לחיפוש

התמרת בורווס-וילראנגלית: Burrows–Wheeler transform) היא שיטה לסידור מחרוזת תווים לרצפי תווים חוזרים. סידור זה של המחרוזת מסייע לדחיסת נתונים, שכן קל לדחוס מחרוזת שבה רצפים של תווים חוזרים למשל באמצעות קידוד אורך חזרה (Run-length encoding) או בשיטת העברה קדימה (Move-to-front transform). תכונה חשובה של התמרה זו היא היכולת לשחזר את הקלט, ללא צורך באחסון של מידע נוסף. שיטה זו מאפשרת אפוא לשפר ביצועים של אלגוריתמי דחיסת טקסט במחיר נמוך. התמרת בורווס-וילר נמצאת בשימוש ביישומי דחיסה שונים, כדוגמת אלגוריתם הדחיסה bzip2 ולה שימושים חשובים גם בתחום הביואינפורמטיקה.

האלגוריתם קרוי על שמם של שני מדענים בריטים אשר הציעו אותו לראשונה, מייקל בורווס (Michael Burrows) ודיוויד וילר (David Wheeler). האלגוריתם פורסם לראשונה ב-1994 במסגרת עבודתם במרכז מחקר בפאלו אלטו שבקליפורניה.[1] האלגוריתם מבוסס על אלגוריתם שלא פורסם שווילר פיתח עוד ב-1983 בעבודתו במעבדות בל.

תיאור[עריכת קוד מקור | עריכה]

התמרת בורווס-וילר נעשית באמצעות מיון לקסיקוגרפי של כל הרוטציות של מחרוזת הקלט. כאשר אלו מופיעות בטבלה שורה אחר שורה, ממיינים את השורות, ומחזירים את העמודה האחרונה בטבלה, ואת מספר השורה המתאים למחרוזת המקורית. לדוגמה עבור המילה BANANA נוסיף תו מיוחד ^ שיציין את תחילת המילה, ותו $ שיציין את סופה וההתמרה תפעל כבדוגמה:

התמרת BWT
קלט כל
הרוטציות
מיון השורות לפי סדר לקסיקוגרפי בחירת העמודה
האחרונה
פלט
עמודה אחרונה
^BANANA$
^BANANA$
$^BANANA
A$^BANAN
NA$^BANA
ANA$^BAN
NANA$^BA
ANANA$^B
BANANA$^
ANANA$^B
ANA$^BAN
A$^BANAN
BANANA$^
NANA$^BA
NA$^BANA
^BANANA$
$^BANANA
ANANA$^B
ANA$^BAN
A$^BANAN
BANANA$^
NANA$^BA
NA$^BANA
^BANANA$
$^BANANA
BNN^AA$A

בעמודת "בחירת העמודה האחרונה", השורה השביעית היא שורה עם מחרוזת הקלט המקורי, והפלט צריך להכיל את מספר השורה המתאימה או באופן שקול ניתן להסיק זאת לפי תו $ שיופיע בסוף שורה זו.

התמרת בורווס-וילר היא הפיכה: בהינתן פלט של BWT, ניתן לשחזר את העמודה הקודמת בטבלה באמצעות מיון, וכך ניתן לחזור על הפעולה עד לקבלת המחרוזת המקורית. לדוגמה:

התמרת שחזור (ה - הוספה, מ - מיון)
קלט
BNN^AA$A
ה 1 מ 1 ה 2 מ 2 ה 3 מ 3 ה 4 מ 4
B
N
N
^
A
A
$
A
A
A
A
B
N
N
^
$
BA
NA
NA
^B
AN
AN
$^
A$
AN
AN
A$
BA
NA
NA
^B
$^
BAN
NAN
NA$
^BA
ANA
ANA
$^B
A$^
ANA
ANA
A$^
BAN
NAN
NA$
^BA
$^B
BANA
NANA
NA$^
^BAN
ANAN
ANA$
$^BA
A$^B
ANAN
ANA$
A$^B
BANA
NANA
NA$^
^BAN
$^BA
ה 5 מ 5 ה 6 מ 6 ה 7 מ 7 ה 8 מ 8
BANAN
NANA$
NA$^B
^BANA
ANANA
ANA$^
$^BAN
A$^BA
ANANA
ANA$^
A$^BA
BANAN
NANA$
NA$^B
^BANA
$^BAN
BANANA
NANA$^
NA$^BA
^BANAN
ANANA$
ANA$^B
$^BANA
A$^BAN
ANANA$
ANA$^B
A$^BAN
BANANA
NANA$^
NA$^BA
^BANAN
$^BANA
BANANA$
NANA$^B
NA$^BAN
^BANANA
ANANA$^
ANA$^BA
$^BANAN
A$^BANA
ANANA$^
ANA$^BA
A$^BANA
BANANA$
NANA$^B
NA$^BAN
^BANANA
$^BANAN
BANANA$^
NANA$^BA
NA$^BANA
^BANANA$
ANANA$^B
ANA$^BAN
$^BANANA
A$^BANAN
ANANA$^B
ANA$^BAN
A$^BANAN
BANANA$^
NANA$^BA
NA$^BANA
^BANANA$
$^BANANA
פלט
^BANANA$

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ Burrows, Michael; Wheeler, David J. (1994), A block sorting lossless data compression algorithm, Technical Report 124, Digital Equipment Corporation