Страницы: 1
RSS
Сложная задача подсчета и сведения в таблицу расстояний между множеством объектов
 
Добрый день.  
Возникла очередная сумашедшая проблема.  
 
Есть задача алгоритмизировать расчет маршрутов м/у объектами.  
Для этого хочу выстроить таблицу расстояний объектов: каждого-с-каждым (а чтобы сделать ее линейной, пытаюсь присобачить следующее: http://www.planetaexcel.ru/tip.php?aid=87)  
 
помогите подогнать под мои условия:  
 
--  много Объектов(около 300) на некоторой территории  
-- территория поделена на районы  
-- для каждого района есть матрица расстояний между объектами в нем.  
-- в каждом районе есть по 3 (пока по 3) "точки выброса" из района --= между этими точками считается расстояние м/у районами  
-- от каждого объекта просчитано расстояние до точек выброса -- проставлены в соотв-е матрицы  
-- между точками выбросов всех районов проставлены расстояния в соотв-й матрице (это типа расстояние м/у районами)  
-- некоторые объекты могут присутствовать в нескольких районах одновременно (районы не пересекаются)  
все это на листе "данные"  
нужно на лист "то что надо" выстроить плоскую таблицу от-каждого-к-каждому объекту по правилам:  
если есть пересечение объектов в какой-либо из матриц (ну то есть просчитано расстояние м/у ними) берем его, если нет, то:    
расстояние считается как: от объекта до точки выброса из района + между районами + от точки выброса до района. Понятно что при этом вариантов м.б. несколько, тогда берем первые три из них.
 
ошибся  
{quote}{login=ABZAC}{date=06.07.2011 05:43}{thema=Сложная задача подсчета и сведения в таблицу расстояний между множеством объектов}{post}-- некоторые объекты могут присутствовать в нескольких районах одновременно (РАЙОНЫ ПЕРЕСЕКАЮТСЯ)  
 
.{/post}{/quote}
 
Вариант для... доворота... ;)  
-37174-
 
Спасибо, но не совсем то -- я не ищу значение на некотором пересечении двух объектов в матрице. Пытаюсь получить ВСЕ пересечения (и значения на пересечениях) -- т.е. то же самое но не для одной пары объектов, а для всех пар.  
путь с этой формулой мне показался тупиковым.
 
Хорошо, такая подзадача:  
 
есть массив объектов (а, б, в, г ... я).  
Как получить все возможные уникальные пары объектов этого массива (а*б, а*в... и т.д.)  
кроме пары с самим собой (а*а), кроме аналогичной пары, но в обратной последоват-ти (а*б и б*а)
 
думаю так: (длинну массива * длинну массива) - (длинну массива * 2)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
nerv, такой вопрос я тоже хотел задать, но постеснялся:)  
 
не количество возможных пар, а именно сами пары  
т.е. из одномерного массива в одном столбце (а,б,...), получить массив о двух столбцах с парами (в первом столбце одна буква, во втором -- вторая)
 
в чем проблема то?)  
 
если есть известна длинна массива, то получить пары (принимая во внимание, те условия, кот. Вы описали не составит труда : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Кстати Ваша формула для посчета кол-ва с моими условиями не канает:  
из массива с пятью объектами будет 10 уникальных пересечений, а по Вашей формуле 15
 
Ёк, как?  
труда уже составило.  
макросом взять значение n(1) и пересекать со всеми нижележащими? потом сдвигаться на один (--> n(2)) и снова перебирать все нижележащие?  
может существует более гуманный способ?
 
{quote}{login=ABZAC}{date=07.07.2011 05:08}{thema=ПОДЗАДАЧА}{post}Хорошо, такая подзадача:  
 
есть массив объектов (а, б, в, г ... я).  
Как получить все возможные уникальные пары объектов этого массива (а*б, а*в... и т.д.)  
кроме пары с самим собой (а*а), кроме аналогичной пары, но в обратной последоват-ти (а*б и б*а){/post}{/quote}  
А как нужно, макросом или формулами? (формулами сложнее)
 
{quote}{login=ABZAC}{date=07.07.2011 05:42}{thema=}{post}Кстати Ваша формула для посчета кол-ва с моими условиями не канает:  
из массива с пятью объектами будет 10 уникальных пересечений, а по Вашей формуле 15{/post}{/quote}  
Формула для расчета количества должна быть такой:  
1+2+3+...+(n-1)
 
{quote}{login=ABZAC}{date=07.07.2011 05:44}{thema=}{post}Ёк, как?  
труда уже составило.  
макросом взять значение n(1) и пересекать со всеми нижележащими? потом сдвигаться на один (--> n(2)) и снова перебирать все нижележащие?  
может существует более гуманный способ?{/post}{/quote}  
макросом, как то так:  
 
Sub unik()  
Dim i%, j%, k%  
For i = 1 To 31  
   For j = i + 1 To 32  
       k = k + 1  
       Cells(k, 1) = Chr(223 + i): Cells(k, 2) = Chr(223 + j)  
Next j, i  
End Sub
 
{quote}{login=MCH}{date=07.07.2011 06:03}{thema=Re: }{post}{quote}{login=ABZAC}{date=07.07.2011 05:42}{thema=}{post}Кстати Ваша формула для посчета кол-ва с моими условиями не канает:  
из массива с пятью объектами будет 10 уникальных пересечений, а по Вашей формуле 15{/post}{/quote}  
Формула для расчета количества должна быть такой:  
1+2+3+...+(n-1){/post}{/quote}Вообще-то такой:  
=n*(n-1)/2  
зы. старая школьная задача на число рукопожатий :)
 
Выше я, забыл войти.
 
{quote}{login=}{date=07.07.2011 06:27}{thema=Re: Re: }{post}Вообще-то такой:  
=n*(n-1)/2  
зы. старая школьная задача на число рукопожатий :){/post}{/quote}  
Действительно, что то сразу не вспомнил про сумму ряда арифметической прогрессии
 
это был я
 
{quote}{login=ABZAC}{date=07.07.2011 05:42}{thema=}{post}Кстати Ваша формула для посчета кол-ва с моими условиями не канает:  
из массива с пятью объектами будет 10 уникальных пересечений, а по Вашей формуле 15{/post}{/quote}можно пример в файле (с 5-ю объектами)?
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=ABZAC}{date=07.07.2011 05:44}{thema=}{post}Ёк, как?  
труда уже составило.  
макросом взять значение n(1) и пересекать со всеми нижележащими? потом сдвигаться на один (--> n(2)) и снова перебирать все нижележащие?  
может существует более гуманный способ?{/post}{/quote}если бы вы прикрепили файл и ОЧЕНЬ подробно и ВНЯТНО объяснили, что Вам нужно, думаю, что Ваша задача уже была решена : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
насчет формулы, я погорячился, умножать на 2 не надо.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
вот пример  
если что не так звиняйте - файл на мобильном рисовал
 
для Михаила - да я помню что что-то подобное было, но вот что где. и как уже не помню)
 
{quote}{login=nerv}{date=07.07.2011 06:54}{thema=Re: }{post}{quote}{login=ABZAC}{date=07.07.2011 05:44}{thema=}{post}Ёк, как?  
труда уже составило.  
макросом взять значение n(1) и пересекать со всеми нижележащими? потом сдвигаться на один (--> n(2)) и снова перебирать все нижележащие?  
может существует более гуманный способ?{/post}{/quote}если бы вы прикрепили файл и ОЧЕНЬ подробно и ВНЯТНО объяснили, что Вам нужно, думаю, что Ваша задача уже была решена : ){/post}{/quote}  
проктика показывает что ОЧЕНЬ ПОДРОБНОЕ описание задачи не способствует решению (см пост 1)  
в принципе проблема решена МСН, еще правда не разбирался
 
мне кажется, что алгоритм здесь такой:  
 
i = 2  
For q = LBound(Массив) To UBound(Массив)  
If i <> UBound(Массив) Then  
For j = i to UBound(Массив)  
 
Next  
End If  
i = i + 1  
Next  
 
это на вскидку)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
Страницы: 1
Читают тему
Наверх