Простой, но эффективный метод сжатия данных

В области биоинформатики люди часто имеют дело с различными последовательностями данных, такими как ДНК, РНК и белок. Один общий аспект (который также представляет собой серьезную проблему) независимо от типа последовательности - это объем данных, которые необходимо обработать. В этой статье мы сузим обсуждение до последовательностей ДНК.

По сравнению с прошлым, у нас есть доступ к огромным объемам данных о последовательностях ДНК благодаря прогрессу в технологиях высокопроизводительного секвенирования. Например, методы секвенирования нового поколения позволяют получить данные объемом в сотни и тысячи гигабайт для одного организма. Обработка этих огромных объемов данных создает интересную, но сложную задачу в области информатики.

Перспектива компьютерных наук

1. Битовое кодирование последовательностей ДНК

Битовое кодирование - это простой, но эффективный метод сжатия данных. Основная идея состоит в том, чтобы уменьшить количество битов, используемых для представления одного нуклеотида.

В стандарте C один символ представлен 8 битами или 1 байтом (тип данных char). Используя восемь битов, мы можем представить 2⁸ разных символа. Однако последовательности ДНК состоят только из 4 алфавитов {A, C, G и T}, которые могут быть представлены только двумя битами. Мы можем использовать это в наших интересах.

Это снизило бы потребление памяти на 75%. Например, если исходная последовательность занимает 100 ГБ, закодированная версия будет занимать только 25 ГБ, что является значительным сокращением.

Как мы можем это сделать?

Предположим, что длина последовательности ДНК равна n,

Шаг 1: Выделите память размером (n * 2) / 8 байтов [n символов требует n * 2 битов. Разделите на 8 для преобразования байтов]

Шаг 2: Для каждого символа в данной последовательности ДНК установите соответствующие биты в выделенной памяти.

2. Каковы преимущества битового кодирования?

Давайте посмотрим на типичные этапы обработки данных.

Данные изначально хранятся на диске (также может быть облачным хранилищем). Затем нам нужно загрузить данные в ОЗУ, прежде чем они будут загружены в кеш для обработки ЦП. Я перечислил некоторые из преимуществ ниже.

  1. Сокращение операций ввода-вывода

Операции ввода / вывода (IO) - одна из самых дорогостоящих и медленных операций. Передача данных между диском и ОЗУ происходит намного медленнее, чем между ОЗУ и ЦП. Битовое кодирование сократит время, затрачиваемое на ввод-вывод, на 75%, что значительно снизит общее потребление времени приложением (как между диском и ОЗУ, так и ОЗУ и ЦП).

2. Более быстрые вычисления

Операции ЦП будут выполняться быстрее, если размер символов уменьшится. Например, предположим, что вы хотите сравнить две последовательности ДНК. При сравнении исходной последовательности для каждого нуклеотида / символа ЦП должен проверить 8 бит (в худшем случае). Однако после кодирования он должен проверять только 2 бита на символ (в худшем случае), что приведет к более быстрым операциям.

3. Лучшее использование сети

Когда мы работаем в распределенной среде, битовое кодирование уменьшит объем передаваемых данных. Это уменьшит сетевой трафик, а также время, затраченное на обмен данными.

Надеюсь, вам понравилась эта статья !!!