Создание бесплатной программы для тестирования студентов

Основные используемые переменные, константы, процедуры и функции. Нахождение максимальной клики в заданном неориентированном графе с помощью алгоритма Брона-Кербоша. Отслеживание правильности использованного алгоритма и заполнения матрицы смежности.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 14.02.2020
Размер файла 215,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

1. Введение

2. Индивидуальное задание

3. Стратегия решения

3.1 Краткая теория

3.2 Реализованный алгоритм

4. Рабочий проект

4.1 Основные используемые переменные, константы, процедуры и функции

5. Руководство пользователя

6. Листинг

7. Примеры работы программы (скриншоты)

8. Тестирование и отладка программы

1.

1. Введение

Графы имеют очень большое значение во многих областях науки. Они помогают решить большое количество задач, связанных с вычислительной техникой. Очень часто алгоритмы для решения задач на графах реализуются на ЭВМ. Это связано с тем, что на практике решения таких задач могут быть очень громоздкими и занимают много времени. Чтобы решить эти проблемы, а также повысить точность вычислений решение подобных задач эффективнее всего реализовать на ЭВМ.

Для разработки программы, которая решает задачи на графах требуются большие знания в области дискретной математики, компьютерной графики и программирования, так как алгоритмы решений являются сложными логическими системами и требуют создания комплексных структур данных.

Это все позволит студенту получить хороший опыт и навыки при работе с подобными приложениями.

В этой курсовой работе данная задача решается с использованием языка программирования Delphi.

2. Индивидуальное задание

Вариант №24

Для заданного неориентированного графа найти максимальный по включению полносвязный подграф.

3. Стратегия решения

3.1 Краткая теория

В теории графов кликой неориентированного графа называется подмножество его вершин, любые две из которых соединены ребром. Клики имеют очень важное значение в теории графов и используются во многих других математических задачах. Также клики изучаются и в информатике. Несмотря на всю сложность, изучаются большое количество алгоритмов для поиска клик [1].

Изучение полных подграфов началось ещё с формулировки теоремы Рамсея в терминах теории графов Эрдёшем и Секерешем. Сам термин «клика» был введен при работе Люка и Пери, использовавшие полные подграфы при изучении социальных сетей для создания клики людей, то есть групп людей, которые знакомы друг с другом [4].

3.2 Реализованный алгоритм

Для решения поставленной задачи было необходимо использовать алгоритм, с помощью которого программа искала бы максимальную клику в заданном неориентированном графе. Был реализован алгоритм Брона - Кербоша для нахождения клик. Алгоритм хорош тем, что он достаточно понятен и относительно не сложен для реализации.

Пусть задан неориентированный граф G1 матрицей смежностей M1

Рис. 3.1 Неориентированный граф и матрица смежностей

Если выделить клику из этого графа и представить ее в виде матрицы смежностей, то получим матрицу вида:

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

Чтобы найти клику в неориентированном графе необходимо выделить подматрицы, такие как указаны выше, в матрице смежностей. Множество вершин, образующее эту матрицу и будет множеством вершин клики. Так как исходная матрица смежностей симметрична относительно главной диагонали, то поиск подматриц будет осуществляться только в ее верхнем или нижнем треугольнике [2-3].

Шаг 1.

Двигаемся по матрице как показано на рис. 3.1 в поисках первой попавшийся единицы. Запоминаем ее координаты (R,C).

Рис. 3.2 Пример работы алгоритма

Шаг 2.

Двигаемся в поисках следующей единицы по адресу (R,C1)

Шаг 3.

Начинаем спускаться по столбцу (С1) для нахождения единицы, причем искать ее нужно по адресу (С,С1), так как в исходной матрице столбцы попарно смежных вершин не обязательно соседствуют. Запоминаем строку каждой найденной таким образом единицы для поиска в следующих столбцах. Увеличиваем длину множества вершин на 1.

Количество повторений Шага 3 равно текущему размеру множества вершин.

Если по указанному адресу мы не встречаем единицы, значит данный столбец не образует подматрицу смежностей клики - пропускаем его. Начинаем Шаг 2.

Если размер множества вершин образующих клику больше 2 то запоминаем это множество.

Так до конца строки.

Повторяем Шаг 1 для всех единиц в строке.

Таким образом проходим всю матрицу. На выходе получаем несколько множеств вершин, отбираем среди них только оригинальные, не содержащие в себе других подмножеств.

Отобранные подмножества и есть клики заданного графа.

4. Рабочий проект

На окне программы отображены 3 кнопки (SetSize_btn, RandomGraph_btn, Solve_btn); таблица, являющаяся матрицей смежности (AdjMtrx_strGrd); окно отображения графа (Graph_img); надпись, указывающая количество вершин (Size_spEdt); надпись, указывающая множество вершин максимальной клики графа (Cluqie_lbl).

4.1 Основные используемые переменные, константы, процедуры и функции

N - переменная в которой находится значение размера графа.

Len - переменная, обозначающая текущую длину клики графа.

GrafMass - числовой двумерный массив, выполняющий роль матрицы смежностей.

Clique - числовой массив, в котором записано множество вершин максимальной клики.

IndClMass - числовой массив, в котором записаны индексы максимальной клики.

DrawGraph - процедура для рисования графа.

Rec - процедура нахождения максимальной клики.

5. Руководство пользователя

Данная программа реализует нахождение максимальной клики в заданном неориентированном графе с помощью алгоритма Брона - Кербоша.

Входными данными является количество вершин и матрица смежностей графа.

Выходными данными является изображение графа и окно, в котором содержится множество вершин максимальной клики.

Максимально число вершин графа в этой программе неограниченно.

В данной программе реализуется следующий алгоритм: перед его работой заполняется матрица смежностей. Из этой матрицы выделяются подматрицы, также симметричные относительно главной диагонали. Множество вершин, образующее эту матрицу и будет множеством вершин клики. Оно выводится в окне по окончанию работы алгоритма.

Того чтобы указать количество вершин графа нужно ввести необходимое значение на поле отображения вершин и нажать кнопку «Задать размер». Чтобы добавить вершину нужно нажать на стрелку «вверх» на окне отображения вершин, а чтобы убрать вершину, нужно нажать на стрелку «вниз» на том же окне. Чтобы сгенерировать матрицу смежностей для графа нажмите на кнопку «Матрица смежностей». Чтобы изобразить граф и найти его максимальную клику, необходимо нажать на кнопку «Нарисовать граф и найти клику».

6. Листинг

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids, Spin, ExtCtrls;

type

{ TForm1 }

TForm1 = class(TForm)

Graph_img: TImage; //компонент для отрисовки графа

RandomGraph_btn: TButton;

Size_spEdt: TSpinEdit;

AdjMtrx_strGrd: TStringGrid;

SetSize_btn: TButton;

Solve_btn: TButton;

Cluqie_lbl: TLabel;

procedure FormCreate(Sender: TObject);

procedure RandomGraph_btnClick(Sender: TObject);

procedure SetSize_btnClick(Sender: TObject);

procedure Solve_btnClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

var N, Dlin_cliq, i_poz: Integer; //N-размер графа, Dlin_cliq-длина клики, i_poz-на какую позицию записывать

GrafMass: array[0..100, 0..100] of Integer; //граф

Clique: array[0..100] of Integer; //клика

IndClMass: array[0..100] of Integer; //индексы для клики

implementation

{$R *.dfm}

procedure rec(stolb, Len: Integer); //stolb - текущий столбец, Len - текущая длина клики

var i, j: Integer;

begin

if Len > Dlin_cliq then begin //нашли решение

for i:= 0 to Len-1 do

Clique[i]:= IndClMass[i];

Dlin_cliq:= Len;

end;

for i:= stolb to N-1 do begin

for j:= 0 to i_poz-1 do

if GrafMass[IndClMass[j]][i] = 0 then break;

if j > N+1 then j:= 0;

if j = i_poz then begin

IndClMass[i_poz]:= i;

i_poz:= i_poz+1;

rec(stolb+1, Len+1);

end;

rec(stolb+1, Len);

end;

end;

procedure DrawGraph();

var

X, Y: array [0..100] of Integer; //координаты вершин на экране

j, i: Integer;

begin

Form1.Graph_img.Canvas.FillRect(Form1.Graph_img.ClientRect); //очистка экрана

for i:= 0 to N-1 do begin

X[i]:= Random(Form1.Graph_img.Width); //случайные значения позиций

Y[i]:= Random(Form1.Graph_img.Height);

Form1.Graph_img.Canvas.Ellipse(X[i]-10,Y[i]-10,X[i]+10,Y[i]+10);

end; //рисуем вершины

for j:= 0 to N-1 do begin

for i:= j+1 to N do

if GrafMass[j][i] = 1 then begin //рисуем линии

Form1.Graph_img.Canvas.MoveTo(X[j],Y[j]);

Form1.Graph_img.Canvas.LineTo(X[i],Y[i]);

end;

Form1.Graph_img.Canvas.TextOut(X[j]-5,Y[j]-5,IntToStr(j+1)); //пишем номера вершин

end;

end;

procedure TForm1.RandomGraph_btnClick(Sender: TObject);

var i, j: Integer;

begin

N:= Size_spEdt.Value;

for j:= 0 to N-1 do

for i:= j to N-1 do

if j = i then AdjMtrx_strGrd.Cells[i,j]:= '0' //на диагонали 0

else begin

AdjMtrx_strGrd.Cells[i,j]:= IntToStr(Random(2)); //в остальных - рандом и симметрия

AdjMtrx_strGrd.Cells[j,i]:= AdjMtrx_strGrd.Cells[i,j]; end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Randomize;

RandomGraph_btnClick(RandomGraph_btn);

end;

procedure TForm1.SetSize_btnClick(Sender: TObject);

begin

N:= Size_spEdt.Value;

AdjMtrx_strGrd.ColCount:= N;

AdjMtrx_strGrd.RowCount:= N;

end;

procedure TForm1.Solve_btnClick(Sender: TObject);

var i, j: Integer;

begin

Dlin_cliq:= 0;

N:= AdjMtrx_strGrd.ColCount;

for j:= 0 to N-1 do //считываем граф и исправляем матрицу смежности (симметрия)

for i:= j to N-1 do begin

if AdjMtrx_strGrd.Cells[i,j] <> '0' then AdjMtrx_strGrd.Cells[i,j]:= '1';

AdjMtrx_strGrd.Cells[j,i]:= AdjMtrx_strGrd.Cells[i,j];

if j = i then AdjMtrx_strGrd.Cells[i,j]:= '0';

GrafMass[j][i]:= StrToInt(AdjMtrx_strGrd.Cells[i,j]);

GrafMass[i][j]:= GrafMass[j][i];

end;

DrawGraph(); //рисуем граф

for i:= 0 to N-1 do begin //поиск клики

i_poz:= 0;

rec(i, 0); end;

Cluqie_lbl.Caption:= 'Максимальная клика: ';

if Dlin_cliq = 1 then Cluqie_lbl.Caption:= Cluqie_lbl.Caption + 'клики нет'

else for i:= 0 to Dlin_cliq-1 do

if i < Dlin_cliq-1 then Cluqie_lbl.Caption:= Cluqie_lbl.Caption + Inttostr(Clique[i]+1) + ' -> '

else Cluqie_lbl.Caption:= Cluqie_lbl.Caption + Inttostr(Clique[i]+1);

end;

end.

7. Примеры работы программы (скриншоты)

Рис. 7.1 Начальное окно программы

Рис. 7.2 Работающее окно программы с графом, который состоит из 4 вершин и 3 ребер

8. Тестирование и отладка программы

алгоритм матрица граф неориентированный

В процессе данной работы в программе было проверено большое количество графов разной размерности. Это позволило проследить за правильностью использованного алгоритма и заполнения матрицы смежности. Также в процессе отладки и тестирования были проверены все кнопки: кнопка, которая задает размер графа, кнопка, задающая матрицу смежности и кнопка для рисования неориентированного графа и поиска его максимального полносвязного подграфа. После этого была произведена общая поверка программы, чтобы избежать возможных ошибок.

Рис. 8.1 Тестовый пример №1

«Работающая программа с графом, максимальная клика которого равна множеству вершин 1-2-3»

Рис. 8.2 Тестовый пример №2

«Работающая программа с графом, максимальная клика которого равна множеству вершин 1-2-4»

Рис. 8.3 Тестовый пример №3

«Работающая программа с графом, максимальная клика которого равна множеству вершин 2-3-4»

Список использованных источников

1. Зыков А.А - «Основы теории графов» 2004 г.

2. Научная библиотека - http://sci.sernam.ru/book_comb.php?id=35.

3. Образовательный портал - http://geum.ru/referat/ref-34265_1-1.php.

4. Свободная энциклопедия - https://ru.wikipedia.org.

Размещено на Allbest.ru

...

Подобные документы

  • Модификация алгоритма RPC таким образом, чтобы он не требовал входного параметра, но сохранил свою гибкость при решении задачи нахождения максимальной клики для разных графов. Метод ветвей и границ. Построение функции-классификатора. Листинг алгоритма.

    курсовая работа [197,8 K], добавлен 06.10.2016

  • Обеспечение универсальности функций тестирования при разработке программы для тестирования студентов. Бесплатное программное обеспечение. Анализ выбора среды программирования. Особенности среды Delphi и СУБД MySQL. Описание алгоритма и блок-схемы.

    курсовая работа [1,6 M], добавлен 01.02.2013

  • Проектирование программы в среде Delphi для тестирования знаний студентов по программированию, с выводом оценки по окончанию тестирования. Разработка экранных форм и алгоритма программы. Описание программных модулей. Алгоритм процедуры BitBtn1Click.

    курсовая работа [365,0 K], добавлен 18.05.2013

  • Вершина в заданном графе с различным количеством вершин. Результаты обработки графа программой MyProject.exe. Сопряжение модулей программы. Модуль вывода матрицы смежности. Тесты черного ящика. Комбинаторное покрытие условий тестами черного ящика.

    курсовая работа [44,8 K], добавлен 13.10.2012

  • Элементы и переменные, используемые для составления записи в Паскале. Основные числовые типы языка Turbo Pascal. Составление блок-схемы приложения, программирование по ней программы для вычисления функции. Последовательность выполнения алгоритма.

    лабораторная работа [256,9 K], добавлен 10.11.2015

  • Графы: определения, примеры, способы изображения. Смежные вершины и рёбра. Путь в ориентированном и взвешенном графе. Матрица смежности и иерархический список. Алгоритм Дейкстры - алгоритм поиска кратчайших путей в графе. Работа в программе "ProGraph".

    презентация [383,8 K], добавлен 27.03.2011

  • Программа формирования матрицы смежности по заданному списку окрестностей вершин ориентированного графа. Формирование динамического списка дуг ориентированного графа по заданному списку окрестностей. Анализ временной и емкостной сложности алгоритма.

    курсовая работа [8,1 M], добавлен 07.09.2012

  • Определение понятий - клика, подграф, неориентированный граф. Реализация алгоритма Брона-Кербоша псевдокодом для быстрого поиска клик. Описание классов для выполнения операций над графом и его матрицей. Использование в программе нестандартных компонентов.

    курсовая работа [410,1 K], добавлен 02.01.2011

  • Разработка приложения для шифрования данных с помощью алгоритма DES5: процесс шифрования, расшифрования, получение ключей. Спецификация программы, процедуры и функции; описание интерфейса пользователя. Реализация задачи в среде программирования DELPHI.

    курсовая работа [812,6 K], добавлен 27.03.2012

  • Основные функции, требования и характеристики системы тестирования. Создание современной модели WEB-сервиса тестирования знаний студентов с помощью средств WEB-разработки. Описание пользовательского интерфейса сайта, этапы прохождения тестовых заданий.

    курсовая работа [6,4 M], добавлен 14.07.2012

  • Разработка программы тестирования студентов по MS PowerPoint с кодом на языке Delphi. Создание алгоритма для решения функциональных требований задачи. Описание переменных, вспомогательных процедур, входных и выходных данных для реализации программы.

    курсовая работа [1,5 M], добавлен 21.09.2010

  • Понятие информационной безопасности. История развития криптографии. Функции информационных моделей. Переменные, используемые при разработке прикладной программы для шифрования и дешифрования сообщений с помощью шифра Цезаря. Блок-схема общего алгоритма.

    курсовая работа [975,5 K], добавлен 11.06.2014

  • Разработка алгоритма реализации на ЭВМ процесса поиска кратчайшего пути в графе методом Дейкстры. Программная реализация алгоритма поиска кратчайшего пути между двумя любыми вершинами графа. Проверка работоспособности программы на тестовых примерах.

    реферат [929,8 K], добавлен 23.09.2013

  • Блок-схема алгоритма Флойда. Разработка его псевдокода в программе Microsoft Visual Studio. Программа реализации алгоритмов Беллмана-Форда. Анализ трудоемкости роста функции. Протокол тестирования правильности работы программы по алгоритму Флойда.

    курсовая работа [653,5 K], добавлен 18.02.2013

  • Переменные и операции языка СИ: используемые символы, константы, идентификаторы и ключевые слова. Использование комментариев в тексте программы. Типы данных и их объявление. Приоритеты операций и порядок вычислений. Функции, переменные, макроподстановки.

    учебное пособие [135,0 K], добавлен 17.02.2012

  • Анализ алгоритмов нахождения кратчайших маршрутов в графе без отрицательных циклов: Дейкстры, Беллмана-Форда и Флойда-Уоршалла. Разработка интерфейса программы на языке C++. Доказательство "правильности" работы алгоритма с помощью математической индукции.

    курсовая работа [1,5 M], добавлен 26.07.2013

  • Описание принципа работы генетического алгоритма, проверка его работы на функции согласно варианту на основе готовой программы. Основные параметры генетического алгоритма, его структура и содержание. Способы реализации алгоритма и его компонентов.

    лабораторная работа [20,2 K], добавлен 03.12.2014

  • Последовательность работ при разработке объектно-ориентированных программ. Виды синтаксических анализаторов и способы их применения. Описание алгоритма и анализ результативности работы программы, написанной на языке С, ее константы, переменные и функции.

    курсовая работа [441,7 K], добавлен 03.07.2011

  • Этапы процедуры принятия решений. Разработка математического алгоритма. Блок-схема алгоритма работы программы. Разработка программы на языке программирования С++ в среде разработки MFC. Текст программы определения технического состояния станка с ЧПУ.

    курсовая работа [823,0 K], добавлен 18.12.2011

  • Составление программы вычисления матрицы и программы вычисления интеграла с погрешностью, не превышающей заданную величину. Схема алгоритма и её описание. Инструкция по использованию разработанной программы и проверка правильности е функционирования.

    курсовая работа [54,8 K], добавлен 27.10.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.