Skip to content

Сизов Дмитрий. Технология SEQ-MPI. Подсчет числа несовпадающих символов двух строк. Вариант 27#4

Closed
SizovDmitry wants to merge 6 commits intolearning-process:masterfrom
SizovDmitry:sizov_d_string_mismatch_count
Closed

Сизов Дмитрий. Технология SEQ-MPI. Подсчет числа несовпадающих символов двух строк. Вариант 27#4
SizovDmitry wants to merge 6 commits intolearning-process:masterfrom
SizovDmitry:sizov_d_string_mismatch_count

Conversation

@SizovDmitry
Copy link
Copy Markdown
Contributor

Отчёт по задаче: "Подсчет числа несовпадающих символов двух строк"

Вариант: №27
Выполнил студент группы 3823Б1ФИ2: Сизов Дмитрий Игоревич
Работу проверили: преподаватель Нестеров Александр Юрьевич и преподаватель Оболенский Арсений Андреевич

Введение

В рамках данной работы реализован алгоритм подсчета несовпадающих символов в двух строках одинаковой длины, а также выполнена его параллелизация с использованием технологии MPI. Целью является ускорение вычислений за счет распределения работы между несколькими процессами.

Постановка задачи и формальное описание

Имеются две строки одинаковой длины. Требуется определить количество позиций, на которых символы в строках различаются.
Формально: пусть A и B — строки длины n. Необходимо вычислить:
count = количество таких i, что A[i] ≠ B[i] для 0 ≤ i < n

Пример

Строка A: "abcde"
Строка B: "abzdf"
Несовпадения: 2 (позиции 2 и 4)

Реализация разделена на модули

  • ops_seq.hpp и ops_seq.cpp — реализация последовательного алгоритма
  • ops_mpi.hpp и ops_mpi.cpp — реализация параллельного алгоритма
  • common.hpp — общее определение входных/выходных типов

Описание последовательной версии

Алгоритм проходит по всем символам строк и сравнивает их попарно. Каждое несовпадение увеличивает счетчик. Итог — общее количество отличий.

Описание параллельной версии

Параллельный алгоритм с использованием MPI делит входные строки на блоки, равномерно распределяемые между процессами. Каждый процесс сравнивает символы в своем участке и подсчитывает количество несовпадений. Частичные результаты объединяются с помощью MPI_Reduce, а итоговая сумма сохраняется на процессе с рангом 0.
Такой подход позволяет ускорить вычисления за счёт распределённой обработки данных.

Тестирования разделены на модули

  • functional/main.cpp — функциональные тесты
  • performance/main.cpp — производительные тесты

Функциональное тестирование

Функциональные тесты предназначены для проверки корректности работы алгоритма на заранее известных входных данных.
В рамках теста используются строки, считываемые из файла strings.txt. Файл содержит две строки, которые сравниваются с помощью обеих реализаций.
Ожидаемый результат рассчитывается в рамках теста: для каждой позиции двух строк выполняется сравнение, и при обнаружении различий счётчик увеличивается.
Результат, возвращаемый алгоритмом, сопоставляется с ожидаемым значением. Это позволяет удостовериться в корректности как последовательной, так и MPI-реализации.

Тестирование производительности

В тестировании на производительность формируются две строки по 1 миллиону символов.
Первая строка полностью состоит из символов 'a', вторая — копия первой, но с заменой первых 10% символов на 'b'.
Это гарантирует строго определённое число несовпадений (100 000), что позволяет точно проверить корректность результата.

@SizovDmitry SizovDmitry changed the title 1-27. Сизов Дмитрий Игоревич. 3823Б1ФИ2. Подсчет числа несовпадающих символов двух строк Сизов Дмитрий. Технология SEQ-MPI. Подсчет числа несовпадающих символов двух строк. Вариант 27 Oct 28, 2025
ErVasyaVC referenced this pull request in ErVasyaVC/ppc-2025-processes-informatics Dec 28, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant