|
v7: Подскажите с алгоритмом сортировки | ☑ | ||
---|---|---|---|---|
0
1s_ivan
09.06.15
✎
12:05
|
Друзья, помогите решить следующую задачу:
человечек каждый день ходит по одному и тому-же маршруту, при этом он заходит часто в зоопарк З часто в Кино К иногда в Бар Б редко в Парикмахерскую П повторюсь маршрут одинаковый, а вот куда заходит- возможны варианты. Отчет выглядит так: 1. З Б П 2. Б К 3. Б П К Итак через пол-года такой статистики он говорит: пойду в БАР и Кино и Зоопарк Как обработать его маршруты, чтобы сказать что порядок будет: Зоопарк, Бар а потом Кино, если он ни разу так не ходил еще, но это понятно по-человечески. (связи что после чего). Таким образом нужно получить универсальную статистическую последовательность (из около 100 отчетов куда он заходил) вида: З Б П К , чтобы потом отсортировать любой произвольный вариант посещения мест. |
|||
1
ejikbeznojek
09.06.15
✎
12:13
|
сгруппировать в запросе написать ряд полей
когда З тогда 1 иначе 0 конец когда П тогда 1 иначе 0 конец .... когда Ж тогда 1 иначе 0 конец потом суммировать и отсортировать. В условиях запроса написать где пункт посещения в (&ПунктыПосещения) и передать нужные пункты. выполнить запрос и обойти поля, отсортировав их |
|||
2
1s_ivan
09.06.15
✎
12:21
|
количество и названия точек произвольное и указать их в запросе поименно не представляется возможным.
|
|||
3
1s_ivan
09.06.15
✎
12:24
|
Решение или подсказки можно и без привязки к 1с коду или запросам. Как удобно, если есть идеи можно просто математически или алгоритмически объяснить. Спасибо.
|
|||
4
1s_ivan
09.06.15
✎
12:27
|
(1) допустим сумма "З" будет 20 , "П" будет 10, что даст сортировка их между собой? Ведь фактически "П" после "З".
|
|||
5
ejikbeznojek
09.06.15
✎
12:29
|
(4) ну я почему то из условий подумал, что он сначала заходит туда, где бывал чаще.
|
|||
6
mistеr
09.06.15
✎
12:36
|
(0) На множестве точек (мест) нужно построить отношение порядка, то есть множество пар (А,Б) таких, что на маршруте А предшествует Б. Дальше построить транзитивное замыкание этого отношения. По нему можно упорядочивать любой набор точек.
|
|||
7
mistеr
09.06.15
✎
12:42
|
Алгоритмически так. Написать а) процедуру ДобавитьТочки(А, Б), добавляющую пару точек в отношение (и по ходу дела поддерживающую замыкание); и б) функцию Порядок(А,Б), возвращающую относительный порядок пары точек.
Скормить процедуре ДобавитьТочки() все точки из отчетов. Дальше входной набор точек сортировать любым алгоритмом, используя в качестве функции сравнения Порядок(). |
|||
8
1s_ivan
09.06.15
✎
13:08
|
(7) Я так-же как и вы первым делом подумал над таким-же вариантом, взять все пары точек кто после кого, парами. Подскажите как имея пары, расположить их в порядке следования? Например имея из отчетов ЗБ ЗК ЗП и БП понять что Б перед К, а не после - ведь до этого они никогда не были рядом.
|
|||
9
1s_ivan
09.06.15
✎
13:11
|
(6) как из "АБ АВ БВ" построить "АБВ" ?
|
|||
10
ejikbeznojek
09.06.15
✎
13:13
|
(9) При обработке пары АБ присвоить приоритет
А - 1000, Б-2000 При обработке пары АВ присвоить приоритет А - 1000, В-2000 При обработке пары БВ увидеть, что приоритеты одинаковы Уменьшить приоритет В на 1. Отсортировать по приоритетам. |
|||
11
1s_ivan
09.06.15
✎
13:21
|
(10) попробуйте объяснить как на варианте "БВ АВ АБ" построить "АБВ" ?
(те же данные в другом порядке) я не улавливаю математическое обоснование почему между "Б и В" разница в 1, а не в 1000 или 532 ? |
|||
12
ejikbeznojek
09.06.15
✎
13:25
|
(11)
Б-В (Б - 1000 , В - 2000) А-В (А-1000, В-2000) А-Б (корректируем точку А уменьшая приоритет на 1), получаем А - 999, Б- 1000,В -2000 1000 это запас для корректировок равных приоритетов. 1, просто минимальный шаг, чтоюы этот запас не слишком сильно тратить. |
|||
13
ejikbeznojek
09.06.15
✎
13:29
|
(8)
ЗБ (З - 1000, Б - 2000) ЗК (З - 1000, К - 2000) ЗП (З - 1000, П - 2000) БП (уменьшаем Б на 1 получаем Б - 1999, П - 2000) Сортируем по приоритету, получаем Приоритет Б меньше приоритета К Б - 1999 К 2000 Можно запас для корректировок скажем поменять с 1000 до 1000000 |
|||
14
ejikbeznojek
09.06.15
✎
13:38
|
(13) Причём правильнее корректировку Б считать не Б=Б-1
, а из Б=П-1 |
|||
15
1s_ivan
09.06.15
✎
13:47
|
(13) в этом примере НЕТ информации о том, что Б меньше К, почему вы уменьшаете на 1 ? на основании чего?
ЗБ ЗК ЗП БП "К" может быть как ближе всех к "З" так и дальше всех других. Т.К точка "К" ограничена только слева "З" и известно что она больше "З", а на сколько больше определить никак нельзя. В ЭТОМ примере точка "К" неопределена относительно других точек кроме "З". А в Вашем алгоритме как-то получилось определить положение "К". Мне кажется алгоритм с ошибкой. Могу ошибаться. |
|||
16
ejikbeznojek
09.06.15
✎
13:57
|
(15) Всё верно, с ошибкой.
Но эта ошибка касается только тех, точек которые неопределенны как точка К, алгоритм их суёт куда"-то. Но эти точки мне кажется в любом случае не обработаешь. С течением времени приоритеты таких точек будут сами выравниваться (ограничиваться справа) Б я уменьшал на основании того, что мне нужно было её сдвинуть левее точки П. |
|||
17
mistеr
09.06.15
✎
14:04
|
(8) >как имея пары, расположить их в порядке следования?
Кого "их"? >имея из отчетов ЗБ ЗК ЗП и БП понять что Б перед К, а не после Из ЗБ ЗК ЗП БП еще не следует БК. Алгоритм упорядочивания должен это предусматривать. Если данных недостаточно, так и сказать. Алгоритм добавления пар также должен проверять непротиворечивость отношения и отвергать противоречивые данные. (10) (12) Отображение на числовую прямую это тупиковый путь. |
|||
18
1s_ivan
09.06.15
✎
14:08
|
(17) вот короткая формулировка: как из "АБ АВ БВ" построить "АБВ" ?
|
|||
19
mistеr
09.06.15
✎
14:14
|
(18) Объясни что значит запись "АБВ".
|
|||
20
1s_ivan
09.06.15
✎
14:18
|
(19) "АБВ" это последовательность - решение полученное из анализа 3-х вариантов следования "АВ, АБ, БВ ". Не усложняя, считаем что исходный набор данных "АБ, АВ..." транзитивен.
|
|||
21
1s_ivan
09.06.15
✎
14:19
|
(обладает свойством транзитивности)
|
|||
22
mistеr
09.06.15
✎
14:21
|
(19) Если это есть "универсальная статистическая последовательность" из (0), то так.
Первый шаг. Собираем все уникальные точки из "АБ АВ БВ" в любом порядке. Получили допустим "ВБА". Второй шаг. Сортируем "ВБА" согласно (7). |
|||
23
1s_ivan
09.06.15
✎
14:30
|
(22) Спасибо, понял метод. Напишу что получится. К сожалению мои наборы данных не обладают транзитивностью, но кое-как отсортировать их можно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |