|
|
|
быстрое сравнение
|
|||
|---|---|---|---|
|
#18+
пишу алгоритм для игры в нарды. за 1 ход бывает можно передвинуть 4 фишки. например: 0 1 - означает, что передвигаем фишку с клетки 0 на клетку 1 Т.е. один ход может выглядеть так: 0 2| 4 6 | 5 7 | 9 11| условно напишем a b c d Далее мне необходимо провести быстрое сравнение и дуаление одинаковых ходов, например: 0 2| 4 6 | 5 7 | 9 11| и 4 6| 0 2 | 9 11 | 5 7 | это один и тот же ход, т.е. вторую версию того же хода удаляем. На РИСУНКЕ - Ходы №19 - 23 - абсолютно одинаковые, необходимо из них удалить ходы № 20-23 всего вариантов расстановок abcd может быть 24: a a a a a a b b c c c d и т.д. Я написал алгоритм, который бёрёт первый ход и сравнивает с остальными, потом берёт второй ход и сравнивает с остальными, начиная уже с третьего и т.д. Но это работает ОЧЕНЬ медленно. Скажите - у кого-нибудь есть идея, как сделать более быстрый проход и поиск повторяющихся ходов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2011, 22:16 |
|
||
|
быстрое сравнение
|
|||
|---|---|---|---|
|
#18+
отсортировать ходы внутри себя, потом отсортировать массив ходов, потом сравнивать рядом стоящие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2011, 22:56 |
|
||
|
быстрое сравнение
|
|||
|---|---|---|---|
|
#18+
спасибо за идею. попробую реализовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2011, 23:01 |
|
||
|
быстрое сравнение
|
|||
|---|---|---|---|
|
#18+
и сравнивать с уже доступными ходами в момент формирования очередного хода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2011, 23:16 |
|
||
|
быстрое сравнение
|
|||
|---|---|---|---|
|
#18+
beatles4как сделать более быстрый проход и поиск повторяющихся ходов? Наложить при переборе условие, что положение следующей сдвигаемой фишки не больше предыдущей. Тогда повторение ходов исключится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2011, 23:41 |
|
||
|
быстрое сравнение
|
|||
|---|---|---|---|
|
#18+
кстати, да. Лучше проблему решить еще при генерации ходов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2011, 00:42 |
|
||
|
быстрое сравнение
|
|||
|---|---|---|---|
|
#18+
я не совсем понял алгоритм, о котором говорит Akina. См. РИСУНОК. Пусть мы играем за красных. Пусть у нас всего 3 фишки (для простоты). и нам нужно сделать 4 хода по одному. В левом листбоксе - список ВСЕХ ходов, а в правом верхнем - уже тех, которые без повторений. если написать, как вы говрите - "положение следующей сдвигаемой фишки не больше предыдущей", то он пропустит ход: 02|13|00|00 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2011, 12:08 |
|
||
|
быстрое сравнение
|
|||
|---|---|---|---|
|
#18+
beatles4, Сразу формируй положение фишек. м.б. даже не нужно такое кодирование ходов. На примере выше: 0123456... ( 15) 04 00 00 00 -> 0200100... 15 00 00 00 -> 1100010... 02 13 00 00 -> 0110100... (-15) Идентичные положения убиваются, или, в понятиях БД, делается группировка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2011, 13:37 |
|
||
|
быстрое сравнение
|
|||
|---|---|---|---|
|
#18+
beatles4, Вообще, что касается нард, тут лучше перебор делать не для каждой фишки, а для каждого места, где находится фишка, и делать перебор по одному ходу. Во-первых, это значительно уменьшит количество вариантов из-за того что фишки любят стоять друг на друге. Во-вторых, количество вариантов будет уменьшатся из-за невозможных ходов, что в нардах тоже довольно часто. Навскидку, можно сделать рекурсивный алгоритм перебора. Не думаю, что бы в нардах будет много вариантов. Думаю, около сотни, но могу ошибаться при двух ходах. Кстати, если хода 4, то все они одинаковы, это тоже можно учесть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2011, 14:17 |
|
||
|
быстрое сравнение
|
|||
|---|---|---|---|
|
#18+
refreg, я не совсем понял ваш алгоритм. помотрите, пожалуйста на рисунок сверху - тав в правно мнижнем текстбоксе есть такой ход: 12|01|13|00 это означает: 1)фишку с 1 перетаскиваем на 2 2)фишку с 0 перетаскиваем на 1 2)фишку с 1 перетаскиваем на 3 итого (2-1) + (1-0) + (3-1) = 4, т.е. наши 4 хода, т.к. выпало 1 куш, т.е. 4 раза по 1 сходить. а вы написали 04 00 00 00 -> 0200100... - я не пойму что это означает. можете на примере хода 12|01|13|00 объяснить, пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2011, 18:14 |
|
||
|
быстрое сравнение
|
|||
|---|---|---|---|
|
#18+
beatles4, изначально, у тя 1 2 0 0 0 0 0 0 0 ... 0 0 - всего 24 (черные не будем рассматривать) после 12 01 13 00 будет: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2011, 18:30 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=83&tid=1342876]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 369ms |

| 0 / 0 |
