powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Крепкий орешек! (по крайней мере для меня)
19 сообщений из 19, страница 1 из 1
Крепкий орешек! (по крайней мере для меня)
    #34375942
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня или ночи уважаемые коллеги!

Есть задачка которую я полгода тащу и даже боюсь начать решать...
Речь идет о сортировке. Попробую объяснить:

В общем есть ... например база данных по учету друзей и их связей.
Таблица с полями (имя первого человека, имя второго человека) - чел1,чел2. Каждая запись в таблице означает что между ними есть связь т.е. - дружба ;).

Итак имеется большое кол-во друзей, и необходимо построить графическую связь м/у всеми участниками "друзьями". (Сразу всплывает на ум яз.прог. - Пролог).
Задача решить проблему наиболее оптимальным расположением объектов (друзей) и их связей.

Например имеем базу с записями:
Миша, Вова
Надя, Вадим
Вадим, Наташа
Наташа, Миша
Вова, Вадим
Вова, Надя

Графический (псевдографически) это выглядит примерно так:

Миша --- Вова ---------
| |
Наташа --- Вадим --- Надя

Может кто-нибудь сталкивался с подобной задачей, или может кто силен в сортировках прошу внести свою лепту в существующей проблеме.

Спасибо за внимание.
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34375945
BMJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BMJ
Гость
Интересный примерчик, а как определяются связи? Только по половому признаку, какой другой критерий?
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34375952
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобще-то символ | стоял над Надей, показывая связь между Вовой и Надей... Но в итоге получилось смещение.

Кое какую схему я все таки отображаю в виде связей, но сделать это с наименьшим количеством пересечений не получается...
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34375959
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BMJ

Пол к связям не имеет ни какого значения.
Сама запись,т.е. рядом стоящие люди, уже говорит о том что есть связь м/у ними, не важно какая.
И один человек может иметь несколько связей (друзей) одновременно.
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34376043
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxPro для решения такой задачи не подходит. FoxPro - это СУБД. Т.е. с его помощью ты можешь получить список друзей для указанного человека. На любом уровне вложенности. Ну, например, можно отобрать всех друзей для "Вадима"

Но ведь тебе требуется не это, а графическое отображение . Точнее, необходимо построить так называемый "граф". Причем не абы как построить, а "наиболее оптимальным способом". Я так понимаю, отобразить в удобном для восприятия виде. Вот это самое "удобное для восприятия" я не представляю как можно формализовать в принципе.

Хотя, можно попробовать нарисовать "картинку" по слоям. Т.е. пользователь видит только друзей одного человека, расположенных по кругу. Кликает мышкой на каком-нибудь друге и вся картинка сдвигается. В центре оказывается тот, по кому щелкнули мышкой, а вогруг него уже его друзья. Ну, можно не "вокруг", а например, "снизу". Можно даже сделать анимацию процесса перемещения.
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34376068
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый ВладимирМ! Спасибо за отклик.
Не будь Вы таким профи в фоксе я бы Вам ответил, зря Вы не дооцениваете фокс...

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

И Вы совершенно правы на счет кругового отображения в части одного человека (я это и применяю), но когда объектов несколько сотен и от каждого объекта исходят десятки (сотни) связей (при конечных связях в одном объекте построение идет кругом) и пересечений скажем премножество, возникает задача расположить объекты так чтобы пересечений (линий) м/у объектами было наименьшим иначе это все принимает неудобоваримый вид.

Задача не из легких, но и не из области фантастики :)
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34376078
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно вот так, если конечно увидете - не знаю как файл прикрепить :)
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34376101
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алгоритм у меня примерно таков:

1. Определить количество друзей у каждого объекта.
2. Удалить обратные и лишние повторы в связях (н-ер Миша, Света = Света, Миша)
3. Начать цикл с наиболее "дружественных" объектов у которых больше всего друзей и идти по нисходящей (хотя не факт!)

_отклонение=0
_Цикл
____ ob =текущий объект
____координаты(x+отклонение,y)
____перебор всех друзей ob
________если текущий друг имеет своих друзей (т.е. кол-во друзей >0)
________то оставить его на потом
________иначе пристроить его кругом к товарищу ob
____конец перебора
____отклонение=отклонение+1
_конец цикла

А вот когда его смещать по Y и в какой очередности понятия не имею...
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34376103
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For Peaceвозникает задача расположить объекты так чтобы пересечений (линий) м/у объектами было наименьшим иначе это все принимает неудобоваримый вид.

Задача не из легких, но и не из области фантастики :)
Вот именно про это я и говорил, что эта задача не для FoxPro. Проблема не в том, чтобы отобразить, а в том, чтобы рассчитать координаты узлов графа. Это огромное количество сочетаний вариантов. Впрочем, если есть формализовааная теория (я просто не в курсе), то, разумеется, можно попробовать выполнить этот расчет и в FoxPro.

Как еще один вариант - отдать вопрос расположения на откуп пользователю. Т.е. "набрасываешь" узлы и линии графа как получится (как смог рассчитать), а уже пользователь сам сдвигает картинки как ему удобно. Ты только фиксируешь новые координаты узлов графа.

Лично я пошел бы все-таки по пути уменьшения количества одновременно отображаемых узлов. Например, не более 2...3 уровней от указанного человека.

Может быть также стоит поискать другие способы визуализации. Сомневаюсь я как-то, что граф удебен с точки зрения анализа. Самое большее, что он может дать - это общее качественное представление по принципу много/мало. Если же дело дойдет до конкретного анализа по конкретному человеку, то граф - слишком неудобный инструмент.
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34376112
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For PeaceА вот когда его смещать по Y и в какой очередности понятия не имею...
Перейди от декартовой системы координат (X,Y) к радиальной (угол, расстояние). Ты же строишь граф "вокруг".

Т.е. идешь от "центра" - человек. У него есть список друзей. Располагаешь их по кругу на фиксированном расстоянии (радиусе) и равномерно по кругу (360/количество).

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

Если есть пересечение линий (это просто найти по массиву координат линий), то попробуй просто увеличить радиус, чтобы пересечения не было. Если радиус увеличивается больше чем некая фиксированная величина, то увеличение радиуса для данной комбинации - тупиковый путь. Оставь как есть.

Все промежуточные данные - в курсор. Массив - это тормоза.

Это самый простой, хотя и не особо эффективный способ. Так, "на вскидку". Сам же и вижу ряд проблем.
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34376114
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ Вот именно про это я и говорил, что эта задача не для FoxPro. Проблема не в том, чтобы отобразить, а в том, чтобы рассчитать координаты узлов графа. Это огромное количество сочетаний вариантов. Впрочем, если есть формализовааная теория (я просто не в курсе), то, разумеется, можно попробовать выполнить этот расчет и в FoxPro.

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

ВладимирМ Как еще один вариант - отдать вопрос расположения на откуп пользователю. Т.е. "набрасываешь" узлы и линии графа как получится (как смог рассчитать), а уже пользователь сам сдвигает картинки как ему удобно. Ты только фиксируешь новые координаты узлов графа.

Вот-вот для любителей рисования это подойдет, но только для них...

ВладимирМ Лично я пошел бы все-таки по пути уменьшения количества одновременно отображаемых узлов. Например, не более 2...3 уровней от указанного человека.

Уверяю Вас 2 или 3 уровня это и то уже тысячные объекты.

ВладимирМ Может быть также стоит поискать другие способы визуализации. Сомневаюсь я как-то, что граф удебен с точки зрения анализа. Самое большее, что он может дать - это общее качественное представление по принципу много/мало. Если же дело дойдет до конкретного анализа по конкретному человеку, то граф - слишком неудобный инструмент.

Проследить связи в графическом виде где не один объект является интересным, по моему является самым удобным видом представления... По крайней мере альтернативу от Вас выслушал бы с нескрываемым любопытством.
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34376121
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К радиальной системе я перешел.

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

Да можно сначало все раскинуть на поле а затем гонять все по массиву пересечений, но меня убивает что эти самые линии я кладу сам - зачем мне их повторно рассчитывать?... Мне кажется здесь решать нужно на уровне объектов а не получившихся линий от них, но это представление настолько смутное что у меня случаются теоретические припадки :)
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34376134
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я исхожу из самой примитивной, можно сказать "лобовой" логики: если у меня нет никакой теории расчета, то действуем путем "тупого" сканирования и "подгонки" по месту.

Чтобы "рассчитать заранее" нужно иметь некую математическую модель. Теорию построения графов. В принципе, такая есть. Но я с ней не знаком. Только знаю, что она имеет место быть.

Поэтому, раз теорию я не знаю, то строю круговые структуры и пытаюсь их подогнать друг под друга методом последовательного приближения. Некий численный метод расчета оптимальных координат. "Доработка напильником по месту"


PS: все-равно не представляю, как можно что-то анализировать в куче из 2...3 тысяч узлов графа. Ничего же не будет видно за кучей линий и точек!

Может быть все-таки остановиться на отображении "непосредственных" друзей, а если отображаются более одного уровня, то у следующего уровня выводятся не вообще все друзья, а только общие (пусть и через посредников) с анализируемым человеком?

Другими словами, как-то уменьшить это огромное число узлов для упрощения анализа.
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34376149
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваше замечание согласен имеет место быть, в случае когда нам интересны какие то несколько объектов и можно начинать пляски от них, но когда все имеют один ранг и все равны перед Богом, наиболее главное значение имеет связующие звенья т.е. главные узлы.

Правильное действие мне кажется кроется в изначальном определении мест объектов в некоей матрице размером (x,y) где x*y кол-во объектов и каждый объек имеет свое "место". Где рассчет главных узлов теоретически должно падать в центр и по ней от центра пристраиваться остальные объекты, хотя опять же если бы я был уверен в этом и с чего начинать...
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34378629
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь по моему математическая модель более важнее чем применение FoxPro...

Может мне в другой форум обратиться? Где мне могут помочь, как вы думаете?
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34378821
хм..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
For Peace, Turbo Prolog тебя спасет.
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34378850
xxAlexx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В математике есть дисциплина которая так и называется "Теория графов"
У тебя чисто графическая структура
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34379492
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For Peace
Так в чем именно проблема?
1) Как нарисовать?
Или 2) Как связать данные?
Как я понимаю - все-таки вопрос в 1)
Все равно сразу все не нарисуешь, площадь экрана ограничена :)
Поэтому нужны правила, по которым можно определить - что рисовать, а что оставить на потом.
Они есть?
...
Рейтинг: 0 / 0
Крепкий орешек! (по крайней мере для меня)
    #34379586
аноним_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 вопроса, если не секрет конечно:
1. сторонние компоненты не рулят ?
2. срок реализации проекта позволяет заниматься самописью
или может стоит выбрать какой-нибудь подход попроще с отображением XML-данных
(где-то такое встречал...) ?
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Крепкий орешек! (по крайней мере для меня)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]