Задача о размещениях

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование
  • 22 22 страницы
  • 0 + 0 источников
  • Добавлена 26.06.2012
1 000 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
Фрагмент для ознакомления

src, tmpr.dest] = tmpr.weight;
if (!_IsOrient)
tmp[tmpr.dest, tmpr.src] = tmpr.weight;
}
return tmp;
}
///


/// Получение медианы
///

/// Метка медианы
public String GetMedian()
{
float[,] DN = GetDN();
float min,tmp;
int ind;

ind = -1;
min = 0;

for (int i = 0; i < _VertexCount; i++)
{
tmp = 0;
for (int j = 0; j < _VertexCount; j++)
{
if (DN[i, j] < 0)
{
tmp = DN[i, j];
break;
}
else
{
tmp += DN[i, j];
}
}
if (tmp > 0)
{
if (min > tmp)
{
min = tmp;
ind = i;
}
else
{
if (min <= 0)
{
min = tmp;
ind = i;
};
}
}
}
if (ind > -1)
{
return _VertexLabels[ind];
}
return null;
}
///
/// Получение матрицы кратчайших расстояний
///

/// Двумерный массив кратчайших расстояний
public float[,] GetDN()
{
float[,] DN_1 = GetD0();
int cnt = 1;
float[,] DN = new float[_VertexCount, _VertexCount];

/// Пока количество итераций меньше количества вершин
while (cnt < _VertexCount)
{
for (int i=0; i < _VertexCount; i++)
for (int j = 0; j < _VertexCount; j++)

{
/// Для каждой пары вершин
/// Получаем текущее кратчайшее расстояние
float min = DN_1 [i, j];
/// Lkz всех третьих вершин проверяем
for (int k = 0; k < _VertexCount; k++)
{

// Не явлеятся путь через неё короче
if ( DN_1[i,k] >= 0)
if (DN_1[k, j] >= 0)
{
if (min >= 0)
{
min = DN_1[i, k] + DN_1[k, j] > min ? min : DN_1[i, k] + DN_1[k, j];
}
else
{
min = DN_1[i, k] + DN_1[k, j];
}
}
}
DN[i,j] = min;
}
DN_1 = DN;
cnt++;
}
return DN;
}
///
/// Свойство количество вершин - тьолько для чтения
///

public int VertexCount
{
get {
return _VertexCount;
}
}
}
}


Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Medians
{
static class Program
{
///
/// The main entry point for the application.
///

[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
}
}

Тестирующие примеры
Пример № 1
Исходные данные
(Ребро – Ребро: Вес)
1-2:4
1-3:5
1-6:2
Результаты работы программы
Матрица весов
0 4 5 2
∞ 0 ∞ ∞
∞ ∞ 0 ∞
∞ ∞ ∞ 0
Матрица длин кратчайших путей
0 4 5 2
∞ 0 ∞ ∞
∞ ∞ 0 ∞
∞ ∞ ∞ 0
Медиана - 1
Пример № 2
Исходные данные
(Ребро – Ребро: Вес)
1-2:4
1-3:5
1-6:2
6-1:0,5
Результаты работы программы
Матрица весов
0 4 5 2
∞ 0 ∞ ∞
∞ ∞ 0 ∞
0,5 ∞ ∞ 0
Матрица длин кратчайших путей
0 4 5 2
∞ 0 ∞ ∞
∞ ∞ 0 ∞
0,5 4,5 5,5 0
Медиана – 6
Пример № 3
Исходные данные
(Ребро – Ребро: Вес)
1-2:4
1-3:5
1-6:2
6-1:0,5
7-8:9
Результаты работы программы
Матрица весов
0 4 5 2 ∞ ∞
∞ 0 ∞ ∞ ∞ ∞
∞ ∞ 0 ∞ ∞ ∞
0,5 ∞ ∞ 0 ∞ ∞
∞ ∞ ∞ ∞ 0 9
∞ ∞ ∞ ∞ ∞ 0
Матрица длин кратчайших путей
0 4 5 2 ∞ ∞
∞ 0 ∞ ∞ ∞ ∞
∞ ∞ 0 ∞ ∞ ∞
0,5 4,5 5,5 0 ∞ ∞
∞ ∞ ∞ ∞ 0 9
∞ ∞ ∞ ∞ ∞ 0
Медианы нет

Вопрос-ответ:

Что означает фрагмент кода "if (!_IsOrient) tmp = tmpr.weight{ if (min -1) { return _VertexLabels[ind]; } return null; }"?

Данный фрагмент кода отвечает за получение метки вершины с минимальным весом в невзвешенном ориентированном графе. Если условие !_IsOrient истино, то значение переменной tmp присваивается весу tmpr.weight. Затем проверяется условие min - 1 и, если оно истинно, возвращается метка вершины с индексом ind. В противном случае возвращается значение null.

Что означает двумерный массив кратчайших расстояний?

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

Как получить медиану?

Для получения медианы нужно вызвать функцию GetMedian(). Она возвращает метку медианы. Медиана - это значение, которое делит упорядоченный набор чисел на две равные части. В данной статье не указано, по какому принципу вычисляется медиана, поэтому возможно она реализована по какому-то специфическому алгоритму.

Что делает данная часть кода: if (!_IsOrient) tmp = tmpr.weight{ if (min -1) { return _VertexLabels[ind]; } return null; }

Эта часть кода проверяет условие, если граф неориентированный, то переменная tmp присваивается значению tmpr.weight. Затем происходит проверка условия, если min -1, то возвращается значение _VertexLabels[ind], в противном случае возвращается значение null.

Что представляет собой двумерный массив кратчайших расстояний?

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

Что делает данный код: public float GetDistance(int i, int j)

Данный код возвращает значение расстояния между вершинами i и j в графе. Расстояние вычисляется на основе двумерного массива кратчайших расстояний.

Что такое медиана в контексте данной статьи?

Медиана в данной статье относится к графу и представляет собой вершину, которая находится в середине пути между двумя самыми удаленными вершинами. То есть, если рассматривать путь между двумя вершинами, то медиана будет находиться на равном удалении от обеих этих вершин.

Какова сложность вычисления матрицы кратчайших расстояний в данной статье?

Сложность вычисления матрицы кратчайших расстояний в данной статье зависит от алгоритма, используемого для вычисления. Если используется алгоритм Флойда-Уоршелла, то сложность будет O(n^3), где n - количество вершин в графе. Если используется алгоритм Дейкстры или Беллмана-Форда для каждой вершины, то сложность будет O(n^2 log n) в сумме для всех вершин.

Какие условия нужно выполнить, чтобы вернуть _VertexLabels[ind]?

Условия: !_IsOrient и tmpr.weight.min - 1.