Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 31.05.2009
Сообщений: 6
1

алгоритм ближайшего соседа

31.05.2009, 11:14. Показов 7832. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пункты обхода (вершины) должны последовательно включаются в маршрут, причем, каждый очередной включаемый пункт должен быть ближайшим к последнему выбранному пункту среди всех остальных, ещё не включенных в состав маршрута. По сути жадный агоритм
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2009, 11:14
Ответы с готовыми решениями:

Алгоритм ближайшего соседа
Добрый день! Подскажите, пожалуйста, как реализовать алгоритм ближайшего соседа для...

Метод ближайшего соседа
Есть программа на С#. Которая запоминает за какой времья и как была нажата кнопка какимто...

Метод ближайшего соседа
Здравствуйте, помогите разобраться с классификацией данных :) Есть массив данных 49х9, по ним я...

Реализовать метод ближайшего соседа
Выдали задание: Реализовать метод ближайшего соседа. Теории нет(, в интернете нашлась лишь одна...

11
38 / 24 / 4
Регистрация: 21.02.2009
Сообщений: 249
31.05.2009, 11:27 2
Цитата Сообщение от A55 Посмотреть сообщение
Пункты обхода (вершины) должны последовательно включаются в маршрут, причем, каждый очередной включаемый пункт должен быть ближайшим к последнему выбранному пункту среди всех остальных, ещё не включенных в состав маршрута. По сути жадный агоритм
эм...не понял ^_^В чем вопрос?
0
0 / 0 / 0
Регистрация: 31.05.2009
Сообщений: 6
31.05.2009, 11:47  [ТС] 3
Не могу написать :'( в стринггриде задаются расстояния между всеми вершинами, нужно чтоб в строке выбиралось минимальное число ,расстояние(но не главная диагональ) [i][j], затем в строке [j][k] (с номером столбца выбранного ранее числа) так же выбиралось минимальное число и т.д. причем выбираться должен из тех вершин, которые еще не содер-ся в маршруте.
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
31.05.2009, 11:49 4
по сути.. вы точно не объяснили... этот алгоритм похож на алгоритм дейкстры.. я недавно писал его на лабе.. вот.. при желании, его легко модернизировать...

p.s: граф задается матрицей смежности... где -1 - проход не существует..
N - бесконечность, раставляетсян а вершины.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
using namespace std;
 
#define N 100000 // infinity
//---------------------------------------------------------------------------
bool Exist(int *V, int n, int x);
void Dejkstra(int **G, int n);
//---------------------------------------------------------------------------
int main()
{
   const int n=6;
   int G[n][n] = 
   {
       N,  7,   9, -1, -1, 14,
       7,  N,  10, 15, -1, -1,
       9, 10,   N, 11, -1,  2,
      -1, 15,  11,  N,  6, -1,
      -1, -1,  -1,  6,  N,  9,
      14, -1,   2, -1,  9,  N
   };
 
   int **M = new int*[n];
   for (int i=0; i<n; i++) M[i] = G[i];
 
   Dejkstra(M, n);
 
   system("pause");
   return 0;
}
//---------------------------------------------------------------------------
bool Exist(int *V, int n, int x)
{
   for (int j=0; j<n; j++)
      if (V[j] == x) return true;
   return false;
}
//---------------------------------------------------------------------------
void Dejkstra(int **G, int n)
{
   int s;
   int *V = new int[n];
 
   for (int i=0; i<n; i++) V[i] = -1;
 
   cout << "Vvedite vershinu vhoda -> ";
   cin >> s;
 
   G[s][s] = 0;
 
   for (int j=0; j<n; j++)
   {
      int min;
      bool first = true;
      V[j] = s;
 
      // поиск дешевого маршрута и растановка границ
      for (int i=0; i<n; i++)
      {   
         if (G[s][i]!=-1 && Exist(V,n,i)==false)
         {
            if (first == true) { min = i; first = false; } 
            if (G[s][min]>G[s][i] && j!=n-1) min = i;
            if ((G[s][s]+G[s][i]) < G[i][i]) G[i][i] = G[s][s]+G[s][i];
         }
      }
 
      if (j!=n-1) 
         s = min;
   }
 
    cout << "\nRoad = ";
    for (int i=0; i<n; i++)
       cout << V[i] << " ";
    cout << "\n\n";
 
    for (int i=0; i<n; i++)
       cout << "from top " << V[0] << " to " << i << " = " << G[i][i] << endl;
    cout << endl;
 
    delete[] V;
}
//---------------------------------------------------------------------------
0
0 / 0 / 0
Регистрация: 31.05.2009
Сообщений: 6
31.05.2009, 12:14  [ТС] 5
Спасибо,конечно...но это совсем другой алгоритм.Хотя есть что-то похожее. Но в моем случае жадный алгоритм.И расстояние задается между всеми парами вершин, причем нужно включать в маршрут вершины, которые еще не были включены
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
31.05.2009, 12:17 6
сдесь все это реализованно.. если правильно понял, отличие лишь в том, что значение вершин не будут перерасчитыватся.. и счет будет идти по ребрам..
этот алгоритм, переписать под ваш - 10 минутное дело.
0
Evg
Эксперт CАвтор FAQ
21280 / 8302 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
31.05.2009, 14:25 7
Вот здесь обитает коллега по несчастью. Спроси его
Построение бинарного дерева из двумерного массива
0
0 / 0 / 0
Регистрация: 31.05.2009
Сообщений: 6
31.05.2009, 15:04  [ТС] 8
коллега...)) что же это такое...причем тут деревья! Там вообще про метод ветвей идет речь, а мне нужно совсем другое...
0
Evg
Эксперт CАвтор FAQ
21280 / 8302 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
31.05.2009, 15:08 9
Ну, там тоже было что-то про жадный алгоритм и при такую же постановку задачи. В алгоритмах я не силен, но на всякий случай дал сссылку, мало ли товарищ окажется полезным
0
0 / 0 / 0
Регистрация: 31.05.2009
Сообщений: 6
31.05.2009, 15:15  [ТС] 10
спасибо,спрошу может товарищ и знает
0
26 / 26 / 9
Регистрация: 25.05.2009
Сообщений: 98
01.06.2009, 21:06 11
Хе-хе. Товарищ Вас понял. У товарища абсолютно такая же задача, просто препод оказался более садистским, чем у вас и заставил искать для каждого города не одного соседа, а двух, (типа, чтобы по ближе к оптимальному путь находился по результатам сравнения найденных "модифицированным" жадным алгоритмом путей).
Предлагаю тебе следующую вещь:
1. делаешь список, содержащий номера всех вершин.
2. ищешь среди тех, которые есть в списке ту из вершин, расстояние до которой из текущей минимально.
3. Включаешь ее в массив или список, отвечающий за "минимальный" путь (надеятся на то, что жадный алгоритм выдаст оптимальное решение - глупо)
4. исключаешь ее из списка, содержащего номера вершин (т.е. удаляешь элемент списка)
5. если список, содержащий номера вершин еще не пуст, возвращаешься к шагу 2.

ЗЫ: извини, сейчас в страшной запаре по поводу сессии и накодить все это дело у меня просто нет времени.
0
0 / 0 / 0
Регистрация: 31.05.2009
Сообщений: 6
01.06.2009, 21:25  [ТС] 12
И на том спасибо
0
01.06.2009, 21:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2009, 21:25
Помогаю со студенческими работами здесь

Классификация.( метод ближайшего соседа )
Есть координаты магнитных аномалий. С помощью метода ближайшего соседа нужно сделать классификацию...

Интерполяция методом ближайшего соседа
Помогите пожалуйста! Надо написать программу на Питоне для масштабирования изображения методом...

Метод ближайшего соседа в задаче коммивояжера
Всем привет, столкнулся со сложностями в реализации алгоритма ближайшего соседа по теории графов. ...

Метод ближайшего соседа через STL Algorithm
Добрый день. Подскажите можно метод ближайшего соседа сделать через сортировку с функтором?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru