Разработка алгоритмов и программ для определения сходства семантических сетей на основе их сложности
Семантические сети как модели представления знаний. Основные методы определения сходства графовых моделей систем. Метод решения задач определения сходства семантических сетей на основе их сложности. Разработка алгоритмов и их программная реализация.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 17.12.2011 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
{
return left. index < right. index;
}
};
struct Node
{
vector <Adjacent> edgeEnds;
COLOR color;
Node ()
{
edgeEnds = vector <Adjacent> ();
color = WHITE;
}
};
class Graph
{
public:
Graph (int _maxHalfPathLength = 5, int _vertexWeight = 1, int _edgeWeight = 3);
string Fill (ifstream& INPUT_GRAPH);
void FindPatterns ();
void Output ();
~Graph () {}
private:
void DFSsearch (int currentVertex, int previousVertex, vector<DIRECTION> coveredWay);
vector <Node> nodes;
PatternTree insidePatternTree;
int maxHalfPathLength;
int edgesNumber;
};
#endif
__________________________________________________________________
graphPath. cpp
#include <iostream>
using std:: cin;
using std:: cout;
using std:: endl;
#include <iomanip>
using std:: setw;
#include <vector>
using std:: vector;
#include <algorithm>
#include <numeric>
#include "graphPath. h"
Graph:: Graph (int _maxHalfPathLength, int _vertexWeight, int _edgeWeight)
: maxHalfPathLength (_maxHalfPathLength), edgesNumber (0)
{
if (_maxHalfPathLength < 0 || _vertexWeight < 0 || _edgeWeight < 0)
throw xParams ();
insidePatternTree = PatternTree (_maxHalfPathLength, _vertexWeight, _edgeWeight);
insidePatternTree. buildTree ();
};
string Graph:: Fill (ifstream& INPUT_GRAPH)
{
char nextSymbol;
string graphName, fullGraphName;
do {
if (INPUT_GRAPH >> graphName) {
INPUT_GRAPH. get (nextSymbol);
fullGraphName += graphName;
if (nextSymbol! = '\n')
fullGraphName += " ";
}
else
return "";
}
while (nextSymbol! = '\n');
int verticesNumber;
INPUT_GRAPH >> verticesNumber;
nodes. resize (verticesNumber + 1);
int number;
int start, end;
start = 1;
int lineEnd = 0;
while (lineEnd < verticesNumber) {
INPUT_GRAPH >> number;
if (number == 0)
++start;
else {
end = number;
nodes. at (start). edgeEnds. push_back (Adjacent (end, OUT));
nodes. at (end). edgeEnds. push_back (Adjacent (start, IN));
++edgesNumber;
}
INPUT_GRAPH. get (nextSymbol);
if (nextSymbol == '\n')
++lineEnd;
}
INPUT_GRAPH >> nextSymbol; // Звездочка
for (vector<Node>:: iterator it = nodes. begin () +1; it! = nodes. end (); ++it)
{
std:: sort (it->edgeEnds. begin (), it->edgeEnds. end (), Compare ());
}
return fullGraphName;
}
void Graph:: DFSsearch (int currentVertex, int startVertex, vector<DIRECTION> coveredWay)
{
if (coveredWay. size () < maxHalfPathLength)
{
nodes. at (currentVertex). color = BLACK; // вершины красим черным, дуги серым
for (int next = 0; next < nodes. at (currentVertex). edgeEnds. size (); ++next) {
int oneMoreVertex = nodes. at (currentVertex). edgeEnds. at (next). index;
if (nodes. at (currentVertex). edgeEnds. at (next). visitColor == WHITE && nodes. at (oneMoreVertex). color == WHITE) {
vector<DIRECTION> coveredWayIncreased = coveredWay;
DIRECTION added = nodes. at (currentVertex). edgeEnds. at (next). direct;
coveredWayIncreased. push_back (added);
nodes. at (currentVertex). edgeEnds. at (next). visitColor = GRAY;
int oneMoreVertexEdgeEndIndex = - 1;
for (int count = 0; count < nodes. at (oneMoreVertex). edgeEnds. size (); ++count) {
if (nodes. at (oneMoreVertex). edgeEnds. at (count). index == currentVertex) {
oneMoreVertexEdgeEndIndex = count;
nodes. at (oneMoreVertex). edgeEnds. at (count). visitColor = GRAY;
break;
}
}
DFSsearch (oneMoreVertex, startVertex, coveredWayIncreased);
nodes. at (currentVertex). edgeEnds. at (next). visitColor = WHITE;
nodes. at (oneMoreVertex). edgeEnds. at (oneMoreVertexEdgeEndIndex). visitColor = WHITE;
}
}
nodes. at (currentVertex). color = WHITE;
}
if (coveredWay. size ()! = this->edgesNumber) // сам полупуть не нужно еще раз подсчитывать
insidePatternTree. definePattern (coveredWay);
}
void Graph:: FindPatterns ()
{
for (int index = 1; index < nodes. size (); ++index)
{
vector<DIRECTION> coveredWay;
DFSsearch (index, index, coveredWay);
}
for (int index = 2; index < insidePatternTree. P. size (); ++index)
{
insidePatternTree. P. at (index) /= 2;
}
}
void Graph:: Output ()
{
insidePatternTree. ShowBasesScheme ();
ofstream outfile1 ("DESCR. TXT");
ofstream outfile2 ("OUTPUT. TXT");
int sum = 0;
outfile2 << insidePatternTree. P. size () - 1 << endl; // pss_output block
for (int index = 1; index < insidePatternTree. P. size (); ++index)
{
int currentNumber = insidePatternTree. P. at (index) * insidePatternTree. ISC. at (index);
sum += currentNumber;
outfile1 << currentNumber;
outfile2 << insidePatternTree. P. at (index); // pss_output block
if (index! = insidePatternTree. P. size () - 1)
{
outfile1 << " ";
// outfile2 << " "; // remove when pss_output, cindex_output
outfile2 << endl; // pss_output block
}
}
outfile1 << endl << sum << endl;
// outfile2 << endl; // remove when pss_output, cindex_output
// outfile2 << sum << endl; // cindex_output block
outfile1. close ();
outfile2. close ();
}
__________________________________________________________________
driver. cpp
#include "enums. h"
#include "patternTree. h"
#include "graphPath. h"
#include "xFile. h"
#include "txtProcessor. h"
#include <ctype. h>
#include <string>
using std:: string;
#include <fstream>
using std:: ifstream;
using std:: ofstream;
#include <iostream>
using std:: endl;
using std:: cin;
using std:: cout;
const string input_graph = "INPUT. txt";
const string params_file = "Params. txt";
const int HALF_PATH_LENGTH = 5; // значения по умолчанию
const int VERTEX_WEIGHT = 1;
const int EDGE_WEIGHT = 3;
void assignParameters (const vector<int>& _params, int& _halfPathLength, int& _vertexWeight, int& _edgeWeight)
{
for (int paramIndex = 0; paramIndex < _params. size (); ++paramIndex) {
int nextParam = _params. at (paramIndex);
switch (paramIndex) {
case 0:
_halfPathLength = nextParam;
break;
case 1:
_vertexWeight = nextParam;
break;
case 2:
_edgeWeight = nextParam;
break;
default:
break;
}
}
}
int main ()
{
try
{
string nextGraphName;
vector<int> params = txtProc:: getParamsFromFile (params_file);
int halfPathLength = HALF_PATH_LENGTH; // присваиваем значения по умолчанию. Если заданы параметрами - потом меняем.
int vertexWeight = VERTEX_WEIGHT;
int edgeWeight = EDGE_WEIGHT;
assignParameters (params, halfPathLength, vertexWeight, edgeWeight);
ifstream INPUT_GRAPH (input_graph);
Graph ourGraph (halfPathLength, vertexWeight, edgeWeight);
nextGraphName = ourGraph. Fill (INPUT_GRAPH);
ourGraph. FindPatterns ();
ourGraph. Output ();
INPUT_GRAPH. close ();
}
catch (xFile e)
{
int c;
cout << "Unable to find file: " << e. GetFilename () << endl << "press any key to continue." << endl;
cin >> c;
exit (EXIT_FAILURE);
}
catch (xParams e) {
cout << "BadParameterValue in Params. txt" << endl << "press any key to continue." << endl;
int c; cin >> c; exit (EXIT_FAILURE);
}
return 0;
}
__________________________________________________________________
Размещено на Allbest.ru
Подобные документы
Средства формализации процесса определения спецификаций. Назначение языка (PSL) и анализатора определения задач (PSA). Разработка алгоритма решения задачи, критерии оценки его сложности. Локальный и глобальный уровни повышения эффективности алгоритмов.
контрольная работа [144,9 K], добавлен 26.10.2010Классы и группы моделей представления знаний. Состав продукционной системы. Классификация моделей представления знаний. Программные средства для реализации семантических сетей. Участок сети причинно-следственных связей. Достоинства продукционной модели.
презентация [380,4 K], добавлен 14.08.2013Описание формальной модели алгоритма на основе рекурсивных функций. Разработка аналитической и программной модели алгоритма для распознающей машины Тьюринга. Разработка аналитической модели алгоритма с использованием нормальных алгоритмов Маркова.
курсовая работа [1,5 M], добавлен 07.07.2013Общее понятие алгоритма и меры его сложности. Временная и емкостная сложность алгоритмов. Основные методы и приемы анализа сложности. Оптимизация, связанная с выбором метода построения алгоритма и с выбором методов представления данных в программе.
реферат [90,6 K], добавлен 27.11.2012Представление знаний в когнитологии, информатике и искусственном интеллекте. Связи и структуры, язык и нотация. Формальные и неформальные модели представления знаний: в виде правил, с использованием фреймов, семантических сетей и нечетких высказываний.
контрольная работа [29,9 K], добавлен 18.05.2009Принципы разработки алгоритмов и программ на основе процедурного подхода и на основе объектно-ориентированного подхода. Реализация программы Borland Pascal 7.0, ее интерфейс. Разработка простой программы в среде визуального программирования Delphi.
отчет по практике [934,7 K], добавлен 25.03.2012Решение задачи средствами прикладных программ. Разработка алгоритмов и структур данных. Реализация задачи определения статистических данных по успеваемости на факультете на языке программирования C#. Программа перевода чисел в различные системы счисления.
курсовая работа [519,9 K], добавлен 03.01.2015Составление и программная реализация в среде Borland Delphi 7.0 алгоритмов итерационного и рекурсивного вариантов решения задачи поиска с возвращением. Исследование асимптотической временной сложности решения в зависимости от количества ячеек на плате.
курсовая работа [57,5 K], добавлен 25.06.2013Исследование асимптотической временной сложности решения шахматной задачи; разработка наиболее эффективных алгоритмов и структуры данных; аналитическая и экспериментальная оценка методов сокращения перебора в комбинаторных задачах; программная реализация.
курсовая работа [36,6 K], добавлен 25.06.2013Понятие алгоритма и анализ теоретических оценок временной сложности алгоритмов умножения матриц. Сравнительный анализ оценки временной сложности некоторых классов алгоритмов обычным программированием и программированием с помощью технологии Open MP.
дипломная работа [1,6 M], добавлен 12.08.2017