Задание 1. Подсчёт нуклеотидов

advertisement
Задание 1. Подсчёт нуклеотидов
Реализуйте алгоритм CountNucleotides(dna), который должен подсчитать число
оснований, входящих в молекулу ДНК, представленную строкой dna.
Молекула ДНК представляется строкой, содержащей символы 'A', 'C', 'G', и 'T',
соответствующие нуклеотидам аденину, цитозину, гуанину и тимину.
Вход: Строка dna, содержащая описание молекулы ДНК. Дополнительные баллы
предусмотрены за чтение входных данных из файла.
Выход: 4 числа, представляющие количество символов 'A', 'C', 'G', и 'T' в строке dna.
Пример входа
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC
Пример выхода
20 12 17 21
Другие примеры
Vibrio_cholerae.txt – полный геном бактерии Vibrio Cholerae.
Задание 2. Подсчёт вхождений шаблона
Определим Count(Text, Pattern) как число вхождений шаблона Pattern в строку Text в
качестве подстроки. Например, Count(ACAACTATGCATACTATCGGGAACTATCCT, ACTAT) = 3.
Обратите внимание, что Count(CGATATATCCATAG, ATA) равно 3 (а не 2) так как требуется
учитывать перекрывающиеся вхождения шаблона Pattern в Text.
Реализуйте алгоритм PatternCount.
Вход: Строки Text и Pattern.
Выход: Count(Text, Pattern).
Пример входа
GCGCG
GCG
Пример выхода
2
Другие примеры
Файлы:
PatternCount.txt – пример входа и выхода;
PatternCount1.txt и PatternCount2.txt – только вход.
Задание 3. Наиболее частая подстрока
Назовём шаблон Pattern наиболее частой подстрокой длины k в строке Text, если на этой
подстроке достигается максимум Count(Text, Pattern) среди всех подстрок длины k.
Например, ACTAT является наиболее частой подстрокой длины 5 строки
ACAACTATGCATACTATCGGGAACTATCCT, а ATA – наиболее частая подстрока длины 3
строки CGATATATCCATAG.
Реализуйте алгоритм FrequentWords, который находит наиболее частую подстроку
заданного размера в строке.
Вход: Строка Text и число k.
Выход: Все наиболее частые подстроки длины k из строки Text.
Пример входа
ACGTTGCATGTCGCATGATGCATGAGAGCT
4
Пример выхода
CATG GCAT
Другие примеры
Файлы:
frequent_words_data.txt – пример входа и выхода;
frequent_words_data1.txt … frequent_words_data3.txt – только вход.
Задание 4. Обратное дополнение
При построении двойной спирали ДНК нуклеотид аденин (А) из одной нити всегда
соединяется с тимином (Т) в другой, а гуанин (G) – с цитозином (C). Поэтому, говорят, что
А и Т являются дополнением друг друга, так же как и G и С. При этом направление
половин спирали является встречным.
Анализируя код на одной нити ДНК часто бывает нужно понять, какому коду второй нити
он соответствует. Для этого необходимо построить обратное дополнение к имеющемуся
коду. Например, коду AGTCGCATAGT соответствует обратное дополнение ACTATGCGACT.
Для получения обратного дополнения необходимо заменить все нуклеотиды на
дополняющие, и изменить порядок символов в строке на обратный.
Реализуйте алгоритм ReverseComplement(dna), вычисляющий обратное дополнение.
Вход: Строка dna, содержащая описание молекулы ДНК.
Выход: Строка, содержащая обратное дополнение к строке dna.
Пример входа
AAAACCCGGT
Пример выхода
ACCGGGTTTT
Задание 5. Поиск вхождений
Реализуйте алгоритм PatternMatching, который находит все вхождения шаблона в строку.
Вход: Строки Pattern и Text.
Выход: Все места вхождения шаблона Pattern в строку Text.
Пример входа
ATAT
GATATATGCATATACTT
Пример выхода
1 3 9
Другие примеры
Файлы:
pattern_matching_data.txt – пример входа и выхода;
pattern_matching_data1.txt … pattern_matching_data3.txt – только вход.
Оценка задания
Задание 1. Подсчёт нуклеотидов
- 10%.
Ввод данных из файла для задания 1
- 5 %.
Задание 2. Подсчёт вхождений шаблона
- 20 %.
Задание 3. Наиболее частая подстрока
- 25 %.
Задание 4. Обратное дополнение
- 20 %.
Задание 5. Поиск вхождений
- 20 %.
Download