Добавил:
I want to die Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 сем / 0207_Лиоско_ЛР5.pdf
Скачиваний:
37
Добавлен:
04.04.2022
Размер:
452.8 Кб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра физической электроники и технологии

ОТЧЕТ по лабораторной работе №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

Соседние файлы в папке 2 сем