МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра физической электроники и технологии
ОТЧЕТ по лабораторной работе №5
по дисциплине «Информационные технологии» Тема: Алгоритмы и программы решения задач комбинаторики
Студентка гр. 0207 |
|
Лиоско Е.П. |
Преподаватель
Санкт-Петербург
2021
Алгоритм «Поиска моды» (Mode Search)
Цель работы.
Изучение и программирование стандартного алгоритма «поиска моды».
Блок-схема программы для сортировки выбором.
Текст программы 1.
clc;
clear all; 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 % рассмотрим весь массив
2
j=i;
while (j<N) && (s(j)==s(j+1)) % пока элемент повторяется,
а его номер в массиве меняется, и номер этого элемента <=8 mt=mt+1;
j=j+1;
end i=i+mt;
if mt>mc % сохраняем кол-во повторений (>1) в переменной
mc
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
Таблица 1 листингов трех версий вектора S(8).
|
Листинг 1 |
|
|
Листинг 2 |
|
Листинг 3 |
Значение моды : |
|
Значение моды : |
|
|
||
|
7 |
|
|
4 |
|
|
Индекс |
начала |
Индекс |
начала |
|
||
последовательности |
последовательности |
|
||||
значений моды: |
|
значений моды: |
|
No mode |
||
|
4 |
|
|
1 |
|
|
|
|
|
|
|
||
Количество значений mc |
Количество значений mc |
|
||||
в |
последовательности |
в |
последовательности |
|
||
моды: |
|
моды: |
|
|
||
|
5 |
|
|
5 |
|
|
3
Текст программы 2.
clear all;
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)) % пока элемент повторяется,
а его номер в массиве меняется, и номер этого элемента <=8 mt=mt+1;
j=j+1;
end i=i+mt;
if mt>mc % сохраняем кол-во повторений (>1) в переменной
mc
mc=mt; im=i-mt;
end mt=1;
end toc;
if mc>1 % если номер элемента > 1 disp('Значение моды :'); disp(s(im));
disp('Индекс начала последовательности значений моды:'); disp(im);
disp('Количество значений mc в последовательности моды:'); disp(mc);
else disp('No mode'); end
function[vector]=quicksort(vector)
if ~isempty(vector)% если вектор пустой, программа остановится
global cm; cm=cm+1; pivot=vector(1);
A1=quicksort(vector(vector<pivot));
A2=vector(vector==pivot);
A3=quicksort(vector(vector>pivot)); vector=[A1 A2 A3];
end end
4
Таблица 2.
i |
N |
t, сек |
1 |
104 |
0.017666 |
2 |
105 |
0.032427 |
3 |
106 |
0.128400 |
4 |
107 |
1.118960 |
Таблица 3.
i-j |
|
|
|
|
|
1-2 |
10 |
1,8 |
1-3 |
100 |
7,3 |
1-4 |
1000 |
63,3 |
KN=Nj/Ni, Kt=tj/ti
Вывод.
Временя поиска моды увеличивается с увеличением размерности вектора.
5