تبدیل باروز-ویلر
تبدیل باروز-ویلر یک الگوریتم است که چیدمان حروف در کلمات را تغییر می‌دهد. ان روش برای فشرده‌سازی داده‌ها بسیار مناسب است. اگر متنی که می‌خواهیم آن را فشرده کنیم شامل حروف تکراری ترجیحاً پشت سر هم باشد می‌توان از روش‌های دیگر فشرده سازی نظیر کدبندی طول اجرا (به انگلیسی: Run-length encoding) استفاده کرد. اما در حالات دیگر روش BWT بسیار مناسب می‌باشد مخصوصاً اینکه BWT الگوریتمی برگشت‌پذیر است. یعنی می‌توان متن فشرده سازی شده را به متن اولیه تبدیل کرد. در حقیقت این کار روشی است که فارغ از هر الگوریتم فشرده سازی که در آن استفاده می‌شود، با کمی محاسبات بیشتر میزان فشرده سازی را افزایش دهد. BWT توسط مایکل باروز و دیوید ویلر در سال ۱۹۹۴ معرفی شد، زمانی که باروز در یک شرکت به نام DEC Systems Research Center مشغول به کار بود.
روش به دست آوردن BWT برای کلمهٔ EXAMPLE در شکل زیر نشان داده شده‌است. در ابتدا یک علامت مانند $ در انتهای آن قرار می‌دهیم تا بتوانیم کلمه را شیفت دورانی دهیم. خروجی‌های مربوط به شیفت در ستون سمت چپ آورده شده‌است. سپس در ستون سمت راست کلمات به دست آمده را به ترتیب حروف الفبا (به انگلیسی: Lexicographical order) مرتب می‌کنیم. ستون آخر که در شکل زیر به رنگ قرمز نمایش داده شده‌است، یعنی EXL$PAME همان (BWT(EXAMPLE می‌باشد. شبه کد مربوط به این الگوریتم به شکل زیر می‌باشد:
تا قبل از این روشی که گفته شد برای فشرده سازی استفاده می‌شود. حال اگر BWT یک کلمه را داشته باشیم چگونه باید بفهمیم اصل آنچه بوده‌است؟ برای این کار ابتدا حروف را شماره گذاره می‌کنیم. چون ممکن است در متن حروف تکراری داشته باشیم. مثلاً در مثال خودمان خواهیم داشت: E1-X1-A1-M1-P1-L1-E2 و ۱$. برای بدست آوردن ماتریس مرتب شدهٔ اولیه ستوان آخر را که از نتیجهٔ فشرده سازی داریم. ستوان اول هم با مرتب کردن ستوان آخر بر اساس حروف الفبا به دست می‌آید. در ادامه به سطر اول نگاه می‌کنیم که ۱$ است. باید بفهمیم در کلمه اصلی بعد از این حرف چه حرفی قرار می‌گرفته‌است. با توجه به اینکه ما ماتریس را از طریق شیفت دورانی ساخته‌ایم پس اگر حرف ۱$ را در ستون آخر پیدا کرده و ببینیم در مقابل آن در سطر اول چه حرفی قرار دارد آن حرف، حرف بعدی ما در کلمه نهایی خواهد بود. همین کار را مدام انجام می‌دهیم تا کلمهٔ کامل به دست آید. برای درک بهتر به مثال زیر توجه کنید: همان‌طور که در بالا توضیح داده شد حرف بعد از ۱$ که X1 است را به دست آوردیم. حال به طریق مشابه می‌بینیم که X1 در کجای ستون آخر آمده‌است و حرف نظیر آن در ستون اول چیست؛ بنابراین می‌بینیم که مقابل آن A1 قرار دارد.
سپس A1 را در ستون آخر پیدا می‌کنیم و حرف نظیر آن در ستون اول را به عنوان حرف بعدی انتخاب می‌کنیم:
همین‌طور پیش می‌رویم تا سطر اول کامل شود:
سپس اعداد را حذف می‌کنیم و سطر اول را شیفت دورانی می‌دهیم تا $ در انتهای کلمه قرار بگیرد. اینگونه ما به کلمهٔ اولیه رسیده‌ایم:$EXAMPLE
شبه کد مربوط به این الگوریتم به شکل زیر است:
function inverseBWT (string s) روش‌هایی برای پیاده‌ساز بهتر خود الگوریتم وجود دارد تا حافظهٔ کمتری را اشغال کند. یا مثلاً ما نیازی نداریم حرف EOF را به کلمه ورودی اضافه می‌کنیم بلکه می‌توانیم برای آن یک اشاره گر نگه داریم. توضیحات بیشتر این الگوریتم را می‌توان در مطالعه کرد.
کد مربوط به ساخت BWT به زبان پایتون در زیر آورده شده‌است:(برای درک بیشتر ۰۰۲\ , ۰۰۳\ به اسکی (استاندارد) مراجعه کنید. این دو کاراکتر مشخص کننده انتها و ابتدای کلمه هستند) def bwt(s): برنامهٔ مربوط به معکوس BWT هم به شکل زیر می‌باشد:
def ibwt(r): روش زیر یک روش بهینه برای پیاده‌سازی BWT می‌باشد: def bwt(s):
def ibwt(r,indexlist):
برای درک اینکه این الگوریتم چگونه به کمتر کردن حجم کمک می‌کند، متنی را در نظر بگیرید که در آن یک لغت خاص زیاد تکرار شده باشد مثلاً کلمه بیا، بعد از اجرا این تبدیل تمامی موارد تکرار شدن این کلمه در کنار هم مرتب می‌شوند و قرار می‌گیرند مثلاً به صورت «اب» که در این صورت می‌دانیم «ی» مربوط به این زیر رشته در آخر جمله است. پس تعداد زیادی ی پشت سر هم در آخر رشته تکرار می‌شود که این امر، کار فشرده‌سازی را برای بعضی الگوریتم‌های فشرده‌سازی متدوال ساده‌تر می‌کند.
همان‌طور که پیش از این نیز ذکر شد، الگوریتم BWT در فشرده سازی کاربرد زیادی دارد. اما می‌توان در کاربردهای دیگری هم از آن استفاده کرد که یکی از آن‌ها تطبیق الگو می‌باشد. BWT یک روش سریع برای پیدا کردن الگوها در متن می‌باشد. از کاربردهای دیگر آن می‌توان به خوشه بندی اشاره کرد که در حوزه بینایی رایانه‌ای و ترجمه ماشینی استفاده می‌شود.
ظهور تعیین توالی دی‌ان‌ای در اواخر سال ۲۰۰۰ میلادی، باعث شد که کاربرد دیگری از BWT نمایان شود. در تعیین توالی دی‌ان‌ای، دی‌ان‌ای به قطعات کوچک‌تری تقسیم می‌شود که به هر کدام یک خوانده (به انگلیسی:read) می‌گویند. در بسیاری از آزمایش‌ها نیاز است که این خوانده‌ها به ژنوم مرجعی تطبیق داده شوند. در راستای کاهش حافظهٔ مورد نیاز برای هم‌ترازسازی توالی، الگوریتم‌های متنوعی استفاده شده‌اند (مانند Bowtie, BWA, SOAP2) که از BWT استفاده می‌کنند.