Добавил:
Адепт твердотельной электроники, последователь учений Михайлова Н.И. Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы 2 Семестр / 0207 Маликов БИ Лабораторная работа №5.1.pdf
Скачиваний:
5
Добавлен:
18.06.2024
Размер:
541.3 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Санкт-Петербургский государственный электротехнический университет "ЛЭТИ"

Факультет электроники Кафедра радиотехнической электроники

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к лабораторной работе №5.1 по дисциплине "Информационные

технологии"

Доцент, к.т.н.

И.А. Рябцев

Студент гр.0207

Б.И. Маликов

Санкт-Петербург

2021

Цель работы.

Изучение и программирование стандартного алгоритма «поиска моды».

Задание.

Задан вектор исходных данных S(N) отсортированный по возрастанию значений его элементов, и алгоритм поиска моды, наиболее часто встречающегося (повторяющегося)

значения S(im) элементов в векторе.

1.Реализовать в Matlab алгоритм поиска моды для вектора исходных данных S(8) в Программе 1;

2.Вставить комментарии к операторам Программы 1;

3.Проверить программу Matlab на трех версиях (A-C) вектора исходных

2

данных S(8);

4.Составить Таблицу 1 из трех столбиков для отдельных листингов трех версий вектора S(8), включающих: значение моды S(im), индекс начала последовательности значений моды im и количество значений mc в последовательности моды;

5.Составить в Matlab Программу 2, добавив в Программу 1 формирование исходного вектора S(N). Для этого использовать функции rand и fix: s=fix(50*rand ([1 N)) так же, как в программе к лабораторной работе 4.1 «Быстрая сортировка»;

6.Вставить в Программу 2 ранее разработанный модуль Quick Sort из лабораторной работе 4.1 «Быстрая сортировка» для сортировки исходного вектора S(N);

7.Вставить Программу 2 стандартные функции tic, toc для оценки времени поиска моды;

8.Определить зависимость времени поиска моды (наибольшее из 20 прогонов программы) для векторов S(10^4), S(10^5), S(10^6), S(10^7);

9.Составить Таблицу 2 из четырех строк (i=1-4), включив три столбика: с номером вектора, его размерностью и временем поиска моды t;

10.Составить Таблицу 3 из трех строк и трех столбиков. В первом столбике разместить комбинации (i-j: 1-2, 1-3, 1-4). Рассчитать

коэффициенты: KN=Nj/Ni, Kt=tj/ti и разместить полученные значения во втором и третьем столбиках;

11.Оформить отчет, включив в него тексты Программ 1, 2 и Таблицы 1, 2. В выводы включить закономерность изменения времени поиска моды от изменения размерности вектора (Kt ~ KN);

Выполнение заданий.

1. Реализуем в Matlab алгоритм поиска моды для вектора исходных данных S(8):

clear all; %удалим все переменные из текущей рабочей области clc;

N=8; %указываем начальные условия mt=1;

mc=1;

im=1;

i=1;

s=[4 4 4 7 7 7 7 7]; %задаем массив; два других массива для проверки: s=[4 4 4 4 4 7 7 7]

и s=[1 2 3 4 5 6 7 8];

while i<N-1 %пробег по всему массиву j=i; %j принимает значение i

while (j<N) && (s(j)==s(j+1)) %накладываем условие: пока элемент повторяется mt=mt+1;

j=j+1;

3

end i=i+mt;

if mt>mc %условие: если mt>1 mc=mt; %mc принимает значение mt im=i-mt;

end mt=1; end

if mc>1 %накладываем условие: если номер<1 disp('Мода:'); %вывод результата

disp(s(im));

disp('Индекс начала последовательности значений моды:'); disp(im);

disp('Количество значений mc в последовательности моды:'); disp(mc);

else disp('No mode'); %если не совпадает ни одно из условий end

2. Проверим программу Matlab на трех версиях (A-C) вектора исходных данных S(8). Составим Таблицу 1 из трех столбиков для отдельных листингов трех версий вектора S(8), включающих: значение моды S(im), индекс начала последовательности значений моды im и количество значений mc в последовательности моды:

 

s=[4 4 4 7 7 7 7 7]

s=[4 4 4 4 4 7 7 7]

s=[1 2 3 4 5 6 7 8]

 

 

 

 

S(im)

Мода:

Мода:

No mode

7

4

 

 

 

 

 

 

 

Индекс начала

Индекс начала

 

im

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

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

 

значений моды:

значений моды:

 

 

 

 

4

1

 

 

Количество

Количество

 

 

значений mc в

значений mc в

 

mc

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

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

 

 

моды:

моды:

 

 

5

5

 

3. Составим в Matlab Программу 2, добавив в Программу 1 формирование исходного вектора S(N):

Алгоритм быстрой сортировки: function[vector]=quicksort(vector)

if ~isempty(vector) global cm; cm=cm+1;

4

pivot=vector(1);

A1=quicksort(vector(vector<pivot));

A2=vector(vector==pivot);

A3=quicksort(vector(vector>pivot)); vector=[A1 A2 A3];

end end

Модифицированная программа: clear all;

clc;

N=10^4; %также рассмотрим значения N=10^5; N=10^6; N=10^7; mt=1;

mc=1;

im=1;

i=1;

s=fix(50*rand ([1 N])); tic;

y=quicksort(s); while i<N-1 j=i;

while (j<N) && (s(j)==s(j+1)) mt=mt+1;

j=j+1; end i=i+mt; if mt>mc mc=mt; im=i-mt; end mt=1; end

toc;

if mc>1 disp('Мода :'); disp(s(im));

disp('Индекс начала последовательности значений моды:'); disp(im);

disp('Количество значений mc в последовательности моды:'); disp(mc);

else disp('No mode'); end

5