Разработка и исследование ускоренного алгоритма калибровки моделей больших сетей по коэффициенту кластеризации
Изучение алгоритмов генерации случайных графов, разработка нового алгоритма, его реализация, проведение необходимых испытаний. Разбор методов генерации графов Барабаши-Альберт, Эрдеша-Реньи; графов с нелинейным правилом предпочтительного связывания.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 11.10.2017 |
Размер файла | 1,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
10. Юдин Е.Б. Методы структурной идентификации стохастических сетей и генерации случайных графов в задачах моделирования сложных систем: Дис. на соискание учёной степени канд. техн. наук. - Омск., 2012. - С. 47-65
11. Данные о сетях [Электронный ресурс]. - Режим доступа: http://vlado.fmf.uni-lj.si/pub/networks/data/, свободный. - Загл. с экрана. - Яз. англ.
12. Структура сети маршрутизаторов Интернет (2006 г.). URL: http://www.cise.ufl.edu/ research/sparse/mat/Pajek/internet.mat (дата обращения: 01.09.2009).
13. Структура сети участия актёров в общих фильмах. URL: http://www.nd.edu/~networks/resources/actor/actor.dat.gz (дата обращения: 03.02.2010).
14. Задорожный В.Н., Юдин Е.Б., Овчинникова Е.В., Ганеева М.И. Сравнение случайных графов с моделями сетей по диаметру // материалы IV регион. науч.-практ. конф (Омск, 2012). - ОмГТУ; 2012. - С. 100-101
15. Задорожный В.Н., Бояршинов К.Н. Структурные характеристики графов: коэффициенты кластеризации // материалы IV регион. науч.-практ. конф (Омск, 2012). - ОмГТУ; 2012. - С. 91-93
16. Юдин Е.Б., Ганеева М.И. Расчёт коэффициента кластеризации для присоединения в графай предпочтительного связывания // материалы V Всерос. науч.-практ. конф. студентов, аспирантов, работников образования и пром-сти (Омск, 23-26 апр. 2013 г.). - ОмГТУ; 2013. - С. 92-95
17. Юдин Е.Б., Овчинникова Е.В. О выборе вершины для присоединения в графах предпочтительного связывания // материалы V Всерос. науч.-практ. конф. студентов, аспирантов, работников образования и пром-сти (Омск, 23-26 апр. 2013 г.). - ОмГТУ; 2013. - С. 95-97
18. Сеть автономных систем Интернет, воссозданная на основе BGP таблиц URL: http://www-personal.umich.edu/~mejn/netdata/as-22july06.zip (дата обращения: 01.09.2009).
Приложение А.
(обязательное)
Листинг алгоритма с гарантированным появлением хотя бы одного треугольника при присоединении новой вершины.
import edu.uci.ics.jung.algorithms.generators.random.BarabasiAlbertGenerator;
import edu.uci.ics.jung.graph.DirectedSparseMultigraph;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.UndirectedSparseMultigraph;
import edu.uci.ics.jung.graph.util.EdgeType;
import edu.uci.ics.jung.graph.util.Pair;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
public class m6_PowerOrtGenerator<V,E> {
Para temp = new Para(0, 0);
Map<Para, List<E" pair_matrix = new HashMap();
Map<Integer, List<V" mapLayers = new HashMap();
int initN = 4;// addEd1 = 3;
Graph<V, E> graph;
protected PrefferentialAttachment attachRule;
protected Factory<V> vertexFactory;
protected Factory<E> edgeFactory;
protected double numEdgesToAttach[];
public m6_PowerOrtGenerator(Factory<V> vertexFactory,
Factory<E> edgeFactory, double[] probEdgesToAttach,PrefferentialAttachment attachRule)
{
double s=0.;
for (double d : probEdgesToAttach)
{
s=s+d;
}
assert Math.abs(s-1.)<0.000000001 :"Сумма вероятностей по различным значениям "
+ "числа добавляемых на шаге ребер должна равняться 1";
this.vertexFactory = vertexFactory;
this.edgeFactory = edgeFactory;
this.numEdgesToAttach= probEdgesToAttach;
this.attachRule =attachRule;
mRand = new Random();
}
public Graph<V, E> evolve(int step){//, int m, double lyamda, Graph<V, E> graph)
graph = new UndirectedSparseMultigraph();
int m =3;
initN = m + 1;
// инициализация полносвязного графа и добавление в слои
mapLayers.put(m, new LinkedList());
for (int i = 0; i < initN; i++) {
V n = vertexFactory.create();
graph.addVertex(n);
List<V> list = mapLayers.get(m);
list.add(n);
}
Object[] mass = graph.getVertices().toArray();
for (int i = 0; i < mass.length - 1; i++)
for (int j = i + 1; j < mass.length; j++) {
E link = edgeFactory.create();
graph.addEdge(link, (V) mass[i], (V) mass[j],
EdgeType.UNDIRECTED);
}
//поместить все рёбра в матрицу рёбер
for (E l0 : graph.getEdges())
{
Pair<V> pa = graph.getEndpoints(l0);
int min = graph.degree(pa.getFirst());
int max = graph.degree(pa.getSecond());
Para temp = null;
add2pair(max, min, l0);
}
// Обращаемся к матрице. Находим одно из рёбер и, тем самым,
// находим два требуемых узла. Остальные берём случайно
for (int i = 0; i < step; i++)
{
// разыгрываем две случайные величины, определяющие номера слоёв
int addEd= getNumAttachToAttach();
if(addEd==0)System.out.println("нельзя вершин без узлов");
// массив выбранных индексов
int[] indexes = new int[addEd];
Set<E> setLink = new HashSet();
List<V> listNodes = new LinkedList();
Map<Pair<V>,Pair<Integer" mapPairs = new HashMap();
formConPairVert(indexes,mapPairs);
Pair<V> pair= mapPairs.keySet().iterator().next();
// получаем список узлов для присоединения
listNodes.add(pair.getFirst());
if(indexes.length>1)listNodes.add(pair.getSecond());
for (int j = 0; j < indexes.length; j++)
{
//из тех, чьи индексы не вошли в Map
Iterator<Pair<Integer" it=mapPairs.values().iterator();
boolean isUse= false;
while (it.hasNext()){
Pair<Integer> pairK= it.next();
int k1=pairK.getFirst(), k2=pairK.getSecond();
if (j ==k1||j ==k2)isUse = true;
}
if(!isUse)
listNodes.add(mapLayers.get(indexes[j]).get(
mRand.nextInt(mapLayers.get(indexes[j]).size())));
}
// формируем список рёбер, которых затронут изменения
for (Iterator iterator = listNodes.iterator(); iterator.hasNext();)
{
V myNode = (V) iterator.next();
Collection<E> list_j = graph.getIncidentEdges(myNode);
for (Iterator<E> it = list_j.iterator(); it.hasNext();) {
E link = it.next();
setLink.add(link);
}
}
// удаляем из списка вершин, те, чьи степени изменятся
for (Iterator iterator = listNodes.iterator(); iterator.hasNext();)
{
V myNode = (V) iterator.next();
mapLayers.get(graph.degree(myNode)).remove(myNode);
}
// удаляем из списка рёбер такие, которых затронули изменения
for (E l0 : setLink)
{
Pair<V> pa = graph.getEndpoints(l0);
int min = graph.degree(pa.getFirst());
int max = graph.degree(pa.getSecond());
Para temp = null;
if (min > max)
temp = new Para(max, min);
else
temp = new Para(min, max);
pair_matrix.get(temp).remove(l0);
}
V new_n = vertexFactory.create();
// добавляем ребро в граф
Map<E, V> newEdges = new HashMap<E, V>();
for (Iterator iterator = listNodes.iterator(); iterator.hasNext();)
{
V myNode = (V) iterator.next();
E l1 = edgeFactory.create();
newEdges.put(l1, myNode);
graph.addEdge(l1, new_n, myNode);
}
// переносим в соответв слой новую вершину и все изменённые вершины
listNodes.add(new_n); // добавляем к числу удалённых вершин новую и заносим всё в слои
for (Iterator iterator = listNodes.iterator(); iterator.hasNext();)
{
V myNode = (V) iterator.next();
addToLayer(myNode, graph.degree(myNode));
}
// Добавляем новые рёбра в матрицу рёбер
for (E li : newEdges.keySet()) {
int min = addEd;
int max = graph.degree(newEdges.get(li));
add2pair(min, max, li);
}
//Добавляем изменённые рёбра в матрицу рёбер
for (E l0 : setLink) {
Pair<V> pa = graph.getEndpoints(l0);
int min = graph.degree(pa.getFirst());
int max = graph.degree(pa.getSecond());
add2pair(min, max, l0);
}
}
return graph;
}
private void formConPairVert(int[] indexes, Map<Pair<V>,Pair<Integer" map) {
int k1 = 0, k2 = 0;
V n1 = null, n2 = null;
E p = null;
do {
for (int j = 0; j < indexes.length; j++) {
indexes[j] = getK();
}
Arrays.sort(indexes);
// на основе индексов обращаемся к матрице и формируем список
// рёбер для выбора
List<E> listLink_ = new LinkedList();
for (int j = 0; j < indexes.length - 1; j++) {
for (int k = j + 1; k < indexes.length; k++) {
Para pr = new Para(indexes[j], indexes[k]);
if (pair_matrix.get(pr) != null
&& pair_matrix.get(pr).size() > 0)
listLink_.addAll(pair_matrix.get(pr));
}
}
n1 = null;
n2 = null;
if ((listLink_.size() > 0)) {
p = listLink_.get(mRand.nextInt(listLink_.size()));
if (p == null)
System.out.println("ff");
Pair<V> par = graph.getEndpoints(p);
int i1 = graph.degree(par.getFirst());
int i2 = graph.degree(par.getSecond());
boolean b1 = true, b2 = true;
for (int j = 0; j < indexes.length; j++) {
if (indexes[j] == i1 && b1) {
k1 = j;
b1 = false;
continue;
}
if (indexes[j] == i2 && b2) {
k2 = j;
b2 = false;
continue;
}
}
} else {
int i1 = mRand.nextInt(indexes.length);
int i2 = i1;
do
i2 = mRand.nextInt(indexes.length);
while (i2 == i1&&(indexes.length>1));//пока они равны и длина >1
k1 = i1;
k2 = i2;
n1 = mapLayers.get(indexes[i1]).get(
mRand.nextInt(mapLayers.get(indexes[i1]).size()));
n2 = mapLayers.get(indexes[i2]).get(
mRand.nextInt(mapLayers.get(indexes[i2]).size()));
}
listLink_.clear();
} while ((p == null) && (n1 == n2));
Pair<V> pair1;
if (p != null) {
pair1 = graph.getEndpoints(p);
} else
pair1 = new Pair(n1, n2);
Pair<Integer> pair2 =new Pair(k1, k2);
map.put(pair1, pair2);
}
private int getNumAttachToAttach() {
double s=0.;
double r1=mRand.nextDouble();
int addEd =0;
for (int j = 0; j < numEdgesToAttach.length; j++) {
s=s+numEdgesToAttach[j];
if(s>r1)
{
addEd = j;
break;
}
}
return addEd;
}
private void add2pair(int min, int max, E link) {
if (min > max)
{
int temp= max;
max=min;
min=temp;
}
Para para = new Para(min, max);
List<E> p = pair_matrix.get(para);
if (p == null) {
p = new ArrayList();
pair_matrix.put(para, p);
}
p.add(link);
}
Random mRand = new Random();
double f(int k) {
return attachRule.f(k);
}
private int getK() {
// разыгрываем
int k = 0;
double rand = mRand.nextDouble();
double tr = 0;
// считаем знаменатель
double sum = 0.0;
for (int op : mapLayers.keySet())
sum = sum + f(op) * mapLayers.get(op).size();
double sum2 = 0.0;
for (int l : mapLayers.keySet()) {
int A = mapLayers.get(l).size();
tr = tr + ((double) A * f(l)) / sum;
if (rand < tr) {
k = l;
break;
}
}
return k;
}
private void addToLayer(V n, int i) {
List<V> list = mapLayers.get(i);
if (list == null) {
list = new LinkedList();
mapLayers.put(i, list);
}
if (!list.contains(n))
list.add(n);
}
}
Листинг алгоритма с разбиением вершин для присоединения на пары, из которых производится поиск двух связных вершин (что обеспечивает образование треугольника при присоединении).
import edu.uci.ics.jung.algorithms.generators.random.BarabasiAlbertGenerator;
import edu.uci.ics.jung.graph.DirectedSparseMultigraph;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.UndirectedSparseMultigraph;
import edu.uci.ics.jung.graph.util.EdgeType;
import edu.uci.ics.jung.graph.util.Pair;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
public class m7_PowerOrtGenerator<V,E> {
Para temp = new Para(0, 0);
Map<Para, List<E" pair_matrix = new HashMap();
Map<Integer, List<V" mapLayers = new HashMap();
int initN = 4;// addEd1 = 3;
Graph<V, E> graph;
protected PrefferentialAttachment attachRule;
protected Factory<V> vertexFactory;
protected Factory<E> edgeFactory;
protected double numEdgesToAttach[];
int maxlayer=0;
public m7_PowerOrtGenerator(Factory<V> vertexFactory,
Factory<E> edgeFactory, double[] probEdgesToAttach,PrefferentialAttachment attachRule)
{
double s=0.;
for (double d : probEdgesToAttach)
{
s=s+d;
}
assert Math.abs(s-1.)<0.000000001 : "Сумма вероятностей по различным значениям "
+ "числа добавляемых на шаге ребер должна равняться 1";
this.vertexFactory = vertexFactory;
this.edgeFactory = edgeFactory;
this.numEdgesToAttach= probEdgesToAttach;
this.attachRule =attachRule;
mRand = new Random();
}
public Graph<V, E> evolve(int step){//, int m, double lyamda, Graph<V, E> graph)
maxlayer=0;
graph = new UndirectedSparseMultigraph();
int m =3;
initN = m + 1;
// Инициализация полносвязного графа. Добавление в слои
mapLayers.put(m, new LinkedList());
for (int i = 0; i < initN; i++) {
V n = vertexFactory.create();
graph.addVertex(n);
List<V> list = mapLayers.get(m);
list.add(n);
}
Object[] mass = graph.getVertices().toArray();
for (int i = 0; i < mass.length - 1; i++)
for (int j = i + 1; j < mass.length; j++) {
E link = edgeFactory.create();
graph.addEdge(link, (V) mass[i], (V) mass[j],
EdgeType.UNDIRECTED);
}
//Помещаем все рёбра в матрицу рёбер
for (E l0 : graph.getEdges()) {
Pair<V> pa = graph.getEndpoints(l0);
int min = graph.degree(pa.getFirst());
int max = graph.degree(pa.getSecond());
Para temp = null;
add2pair(max, min, l0);
}
// Обращаемся к матрице. Находим одно из рёбер и, тем самым,
// находим два требуемых узла. Остальные берём случайно
for (int i = 0; i < step; i++) {
// разыгрываем две случайные величины, определяющие номера слоёв
int addEd= getNumAttachToAttach();
if(addEd==0)System.out.println("нельзя вершин без узлов");
// массив выбранных индексов
int[] indexes = new int[addEd];
Set<E> setLink = new HashSet();
List<V> listNodes = new LinkedList();
Map<Pair<V>,Para> mapPairs = new HashMap<Pair<V>,Para>();
for (int j = 0; j < indexes.length; j++) {
indexes[j] = getK();
if(indexes[j]>maxlayer)maxlayer =indexes[j];
}
formConPairVert(indexes,listNodes);
// формируем список рёбер, которых затронут изменения
for (Iterator iterator = listNodes.iterator(); iterator.hasNext();) {
V myNode = (V) iterator.next();
Collection<E> list_j = graph.getIncidentEdges(myNode);
for (Iterator<E> it = list_j.iterator(); it.hasNext();) {
E link = it.next();
setLink.add(link);
}
}
// удаляем из списка вершины, те, чьи степени изменятся
for (Iterator iterator = listNodes.iterator(); iterator.hasNext();) {
V myNode = (V) iterator.next();
mapLayers.get(graph.degree(myNode)).remove(myNode);
} // удаляем из списка рёбер такие, которые затронули изменения
for (E l0 : setLink) {
Pair<V> pa = graph.getEndpoints(l0);
int min = graph.degree(pa.getFirst());
int max = graph.degree(pa.getSecond());
Para temp = null;
if (min > max)
temp = new Para(max, min);
else
temp = new Para(min, max);
pair_matrix.get(temp).remove(l0);
}
V new_n = vertexFactory.create();
// добавляем рёбра в граф
Map<E, V> newEdges = new HashMap<E, V>();
for (Iterator iterator = listNodes.iterator(); iterator.hasNext();) {
V myNode = (V) iterator.next();
E l1 = edgeFactory.create();
newEdges.put(l1, myNode);
graph.addEdge(l1, new_n, myNode);
}
// переносим в соответствующий слой новую вершину и все изменённые вершины
listNodes.add(new_n); // добавляем к числу удаленных вершин новую и заносим всё в слои
for (Iterator iterator = listNodes.iterator(); iterator.hasNext();) {
V myNode = (V) iterator.next();
addToLayer(myNode, graph.degree(myNode));
}
// Добавляем новые рёбра в матрицу рёбер
for (E li : newEdges.keySet()) {
int min = addEd;
int max = graph.degree(newEdges.get(li));
add2pair(min, max, li);
}
//Добавляем изменённые рёбра в матрицу рёбер
for (E l0 : setLink) {
Pair<V> pa = graph.getEndpoints(l0);
int min = graph.degree(pa.getFirst());
int max = graph.degree(pa.getSecond());
add2pair(min, max, l0);
}
}
System.out.println("^^"+count);
return graph;
} int count=0;
private void formConPairVert(int[] m, List<V> listNodes) {
int k1,k2;
Set<E> set = new HashSet();
if(m.length>1){
for (int i = 0; i < m.length/2; i++) {
if(m[i]>m[m.length/2+i]) {k1 = m[ m.length/2+i]; k2= m[i];}
else {k1 = m[i]; k2= m[ m.length/2+i];}
Para pr = new Para(k1, k2);
List<E> list =pair_matrix.get(pr);
E edge = null;
if(list!=null){
count++;
for (E e : list) {
if(!set.contains(e))
edge = e;
set.add(edge);
break;
}
}
if (edge != null) {
Pair<V> pair2= graph.getEndpoints(edge);
listNodes.add(pair2.getFirst());
listNodes.add(pair2.getSecond());
} else
{
V n1 = mapLayers.get(k1).get(
mRand.nextInt(mapLayers.get(k1).size()));
V n2 = mapLayers.get(k2).get(
mRand.nextInt(mapLayers.get(k2).size()));
listNodes.add(n1);
listNodes.add(n2);
}
}
// если есть нечётное ребро
if(m.length%2==1)
listNodes.add(mapLayers.get(m[m.length-1]).get(mRand.nextInt(mapLayers.get(m[m.length-1]).size())));
}
//если ребро одно
else {
listNodes.add(mapLayers.get(m[0]).get(
mRand.nextInt(mapLayers.get(m[0]).size())));
}
}
private int getNumAttachToAttach() {
double s=0.;
double r1=mRand.nextDouble();
int addEd =0;
for (int j = 0; j < numEdgesToAttach.length; j++) {
s=s+numEdgesToAttach[j];
if(s>r1)
{
addEd = j;
break;
}
}
return addEd;
}
private void add2pair(int min, int max, E link) {
if (min > max)
{
int temp= max;
max=min;
min=temp;
}
Para para = new Para(min, max);
List<E> p = pair_matrix.get(para);
if (p == null) {
p = new ArrayList();
pair_matrix.put(para, p);
}
p.add(link);
}
Random mRand = new Random();
double f(int k) {
return attachRule.f(k);
}
private int getK() {
// разыгрываем
int k = 0;
double rand = mRand.nextDouble();
double tr = 0;
// считаем знаменатель
double sum = 0.0;
for (int op : mapLayers.keySet())
sum = sum + f(op) * mapLayers.get(op).size();
double sum2 = 0.0;
for (int l : mapLayers.keySet()) {
int A = mapLayers.get(l).size();
tr = tr + ((double) A * f(l)) / sum;
if (rand < tr) {
k = l;
break;
}
}
return k;
}
private void addToLayer(V n, int i) {
List<V> list = mapLayers.get(i);
if (list == null) {
list = new LinkedList();
mapLayers.put(i, list);
}
if (!list.contains(n))
list.add(n);
}
}
Размещено на Allbest.ru
...Подобные документы
Основные понятия и определения теории графов: теоремы и способы задания графа, сильная связность графов. Построение блок-схем алгоритма, тестирование разработанного программного обеспечения, подбор тестовых данных, анализ и исправление ошибок программы.
курсовая работа [525,6 K], добавлен 14.07.2012Применение теории графов и алгоритмов на графах среди дисциплин и методов дискретной математики. Граф как совокупность двух множеств. Основные способы численного представления графа. Элементы и изоморфизмы графов. Требования к представлению графов в ЭВМ.
курсовая работа [162,2 K], добавлен 04.02.2011Этапы нахождения хроматического числа произвольного графа. Анализ примеров раскраски графа. Характеристика трудоемкости алгоритма раскраски вершин графа Мейниеля. Особенности графов, удовлетворяющих структуру графов Мейниеля, основные классы графов.
курсовая работа [1,1 M], добавлен 26.06.2012В статье рассмотрен подход к созданию моделей композитного документооборота на основе аппарата теории графов. Описаны методы детерминирования множеств для разработанной модели, предложена алгебра документооборота с использованием графов.
статья [346,4 K], добавлен 19.04.2006Обзор существующих подходов в генерации музыкальных произведений. Особенности создания стилизованных аудио произведений на основе современных нейросетевых алгоритмов. Выбор средств и библиотек разработки. Практические результаты работы алгоритма.
дипломная работа [4,0 M], добавлен 13.10.2017История возникновения, основные понятия и теоремы теории графов. Способы предоставления графов в компьютере. Матрица смежности, инциденций, списки смежности и массив дуг. Программа определения кратчайшего пути в графах. Язык программирования Delphi.
курсовая работа [823,5 K], добавлен 24.11.2010Алгоритмы, использующие решение дополнительных подзадач. Основные определения теории графов. Поиск пути между парой вершин невзвешенного графа. Пути минимальной длины во взвешенном графе. Понятие кратчайшего пути для графов с помощью алгоритма Флойда.
реферат [39,6 K], добавлен 06.03.2010Характеристика методов нечеткого моделирования и изучение системы кластеризации в пакетах прикладных программ. Разработка и реализация алгоритма для оптимизации базы правил нечеткого классификатора с помощью генетического алгоритма аппроксимации функции.
дипломная работа [1,9 M], добавлен 21.06.2014Возникновение информатики во второй половине XX столетия. Теория графов. Понятие и терминология теории графов. Некоторые задачи теории графов. Математическая логика и теория типов. Теория вычислимости и искусственный интеллект.
реферат [247,4 K], добавлен 15.08.2007Алгоритм декомпозиции графов и расчеты динамики логических сетей. Преобразование пространства булевых векторов. Описание блоков программной реализации и их взаимодействие. Разработка программы "слияния" статистик на основе алгоритма объединения.
дипломная работа [111,8 K], добавлен 07.03.2012Описание формальной модели алгоритма на основе рекурсивных функций. Разработка аналитической и программной модели алгоритма для распознающей машины Тьюринга. Разработка аналитической модели алгоритма с использованием нормальных алгоритмов Маркова.
курсовая работа [1,5 M], добавлен 07.07.2013Обзор области генерации сетевого трафика. Описание выбранных методов, моделей, алгоритмов решения задач. Создание модели поведения пользователя, распределение количества посещённых страниц сайта. Выбор средств реализации программного продукта (проекта).
курсовая работа [1,3 M], добавлен 30.06.2017Создание набора классов, реализующих функции генерации метаданых для заданного файла данных спутника MTSAT-1R. Существующие методы решения. Реализация алгоритма получения необходимых полей с нужными данными. Разработка структуры базы данных инвентаря.
курсовая работа [38,6 K], добавлен 17.07.2009История создания алгоритма Форда-Фалкерсона, краткое описание его алгоритма, особенности работы, анализ сложности. Создание распараллеленного варианта алгоритма и его краткое описание. Основные характеристики теории графов, специфика, пути и маршруты.
контрольная работа [246,3 K], добавлен 06.08.2013Исследование симметричных алгоритмов блочного шифрования. Минусы и плюсы алгоритма IDEA. Разработка программы аутентификации пользователя и сообщений на основе алгоритма IDEA. Выбор языка программирования. Тестирование и реализация программного средства.
курсовая работа [314,2 K], добавлен 27.01.2015Понятие фрактала, принципы создания изображения. Разработка алгоритма и режимов генерации ландшафта. Описание программы FracLandscapes.exe. в среде разработки Delphi 10. Примеры построения ландшафта с использованием различных режимов и количества изгибов.
курсовая работа [688,9 K], добавлен 04.05.2014Использование понятий из теории графов при разработке сетей и алгоритмов маршрутизации. Построение матрицы смежности и взвешенного ориентировочного графа. Результаты работы алгоритмов Дейкстры и Беллмана-Форда. Протоколы обмена маршрутной информацией.
курсовая работа [334,1 K], добавлен 20.01.2013- Численные расчёты динамики генных сетей на основе редукции графов в рамках синхронной булевой модели
Теория функционирования генных сетей. Разработка алгоритма анализа динамики генной сети с целью выявления всех её стационарных и циклических устойчивых состояний в рамках булевой модели генной сети. Создание программного средства, его реализующего.
курсовая работа [1,4 M], добавлен 28.02.2012 Использование информационных технологий для планирования размещения оптимальных точек водоснабжения, используя теорию графов. Функциональные возможности разрабатываемого приложения. Программная реализация основных модулей на основе алгоритма Флойда.
курсовая работа [818,3 K], добавлен 31.01.2012Написание программы для генерации случайных чисел, в которой реализуются возможности генерации абсолютно случайных чисел. Приложение на языке С/С++. Описание узла, содержащего данные; функций и методов работы; чтения данных из памяти и вывода их на экран.
курсовая работа [172,4 K], добавлен 23.05.2012