2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 задача на перестановку нулей и единиц
Сообщение13.01.2018, 10:22 


01/03/17
5
Короче пример такой:
идет 4 барана по узкой тропинке, навстречу им идут еще 4 барана. Между ними расстояние в 1 баран. Прыгать назад они не могут, могут только идти вперед на свободное место и прыгать через 1 барана вперед на свободное место.
1111_0000
111_10000
11101_000
111010_00
1110_0100
11100_100
1110001_0
11100010_
111000_01
вот корректный пример перевода 1 барана на другую сторону

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение13.01.2018, 10:32 
Аватара пользователя


21/09/12

1871
Три барана - или больше - слева в задаче нужны только для пробки. А число ходов на переход левого барана равно $2N$ правых баранов.
Что тут разобрать-то?
Интересней случай, когда между группами расстояние больше единицы. Тогда кооперация возникает более сложная. Не для баранов.

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение13.01.2018, 10:52 


01/03/17
5
Приведите пример для двух, раз тут все просто. С бошьшим количеством свободного места задача упрощается.

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение13.01.2018, 11:16 
Аватара пользователя


21/09/12

1871
bobah16 в сообщении #1283722 писал(а):
Приведите пример для двух

Пожалуйста:
11_00
1_100
101_0
1010_
10_01
При большем первоначальном промежутке задача минимального числа ходов становится очень нетривиальной. Бараны справа могут предварительно создать пробелы для левого барана, прыгая через друг друга.

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение13.01.2018, 13:35 


01/03/17
5
Это и так понятно. Я имел ввиду для моего случая 2 барана передвинуть в конец.
Мне кажется задача неразрешима.

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение13.01.2018, 13:45 
Аватара пользователя


21/09/12

1871
bobah16 в сообщении #1283750 писал(а):
для моего случая 2 барана передвинуть в конец.
Сформулируйте подробнее. Не понял.

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение13.01.2018, 16:37 
Заслуженный участник


27/04/09
28128
bobah16 в сообщении #1283750 писал(а):
Мне кажется задача неразрешима.
Последовательность atlakatl доводится до победного:

10_01
_0101
0_101
001_1
00_11


А вы, возможно, неудачно начали. Никто не говорил, что должна быть возможность перевести всех по одному барану за раз. :-)

-- Сб янв 13, 2018 18:44:27 --

А вот начиная с трёх, упорно появляются группы баранов _>><< (или отражённые), заводящие в тупик. (> — баран, идущий вправо.)

-- Сб янв 13, 2018 18:53:19 --

Кажется, у меня всё-таки выходит решение для трёх.

-- Сб янв 13, 2018 19:03:22 --

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

(Смотреть только тем, кто хочет проверить моё решение, а не тем, кто ищет своё)

RRR_LLL ← возьмём кусок решения atlakatl—меня для групп из двух баранов
RR_RLLL
RRLR_LL
RRLRL_L
RRL_LRL
R_LRLRL
← на этом месте отсоединяемся
_RLRLRL
LR_RLRL
LRLR_RL
LRLRLR_
LRLRL_R
← просыпаемся от чудного сна и продолжаем работать как раньше
LRL_LRR
L_LRLRR
LL_RLRR
LLLR_RR
LLL_RRR
← всё!

Вообще на самом деле это древняя задача, просто я не сразу вспомнил, что это так. Хотя решать никогда толком не решал, но вот комментарий о чередовании цветов (там были шашки) помню.

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение13.01.2018, 19:42 


01/03/17
5
я имел ввиду перевести хотя бы двух баранов на 1 сторону
хххх_0011 либо
0111_0001
Считаю что всех баранов не перевести. Человек, давший задачу говорит что знает решение.

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение13.01.2018, 20:40 
Заслуженный участник


27/04/09
28128
bobah16 в сообщении #1283813 писал(а):
Считаю что всех баранов не перевести.
Попробуйте с тремя. Если не получится, гляньте спойлер, после чего попробуйте применить это решение для решения задачи с четырмя так же, как в нём использовалось решение для двух (и в принципе ещё можно рассмотреть, как решение для двух получается с использованием решения для одного — это если хочется написать алгоритм в точности, а не ограничиться эвристиками, возникшими в голове).

bobah16 в сообщении #1283813 писал(а):
я имел ввиду перевести хотя бы двух баранов на 1 сторону
В том смысле, что слева от пропуска есть два правых барана где угодно и справа от пропуска два левых где угодно? Тогда надо просто взять решение для двух из двух и приставить везде слева и справа от представления по два нейтральных барана. Если нужно, чтобы бараны дошли до самого конца влево и вправо, всё не сразу очевидно, но так же неочевидна невозможность.

-- Сб янв 13, 2018 22:45:00 --

Чтобы считать, что всех не перевести, неплохо иметь какие-то основания. Чем 4 хуже 3? Понятное дело, такое вполне в математике случается: полиномиальные уравнения одной неизвестной степеней вплоть до 4 разрешимы в радикалах, а начиная с пятой — в общем случае уже нет, но этому (уже давно) найдены конкретные причины: симметрические группы $S_n$ при $n\geqslant5$ не обладают определённым свойством (которое назвали «разрешимость», но это не важно). Так же и здесь, если допустить, что конфигурация с 4 баранами с каждой стороны уже «необратима», этому должны быть какие-то причины — стоит ожидать, человекопонятные (это не обязательно, но в данном случае не видно каких-то особых причин, чтобы сложность вопроса была чрезвычайной). На деле решение, конечно, есть, но если вы в этом не уверены, для уверенности в альтернативной гипотезе нужны не менее веские основания, чем для уверенности в том, что решение есть.

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение14.01.2018, 15:41 
Аватара пользователя


26/05/12
1534
приходит весна?
Можно ещё раз уточнить условие?

Я его понял следующим образом: Имеется строка "1111_0000". Над любой подстрокой этой строки допустимы следующие замены:

1) "_0" на "0_"
2) "1_" на "_1"
3) "_00" на "00_"
4) "_10" на "01_"
5) "10_" на "_01"
6) "11_" на "_11"

Если назвать допустимую замену подстроки ходом, то требуется найти такую последовательность ходов, которая:
1) приводит исходную строку к строке "0000_1111";
2) содержит наименьшее возможное число ходов.

Я правильно понял условие?

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение14.01.2018, 16:00 
Заслуженный участник


20/08/14
11177
Россия, Москва
B@R5uk
3 условие следует из 1 (дважды повторяем и всё), аналогично 6 следует из 2. Так что 3 и 6 условия лишние.

-- 14.01.2018, 16:05 --

B@R5uk в сообщении #1283981 писал(а):
2) содержит наименьшее возможное число ходов.
Не уверен что это обязательно, количество ходов ограничено сверху из-за отсутствия циклов в вариантах перестановок/замен, об минимальности требования не было, лишь о возможности.

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение14.01.2018, 16:05 
Аватара пользователя


26/05/12
1534
приходит весна?
Dmitriy40 в сообщении #1283986 писал(а):
3 условие следует из 1 (дважды повторяем и всё)
Если я правильно понял, то вопрос стоит не только о разрешимости, но и о кратчайшей разрешимости. В этом плане перепрыгивание в правильном направлении приближает к цели на целых два "обычных" хода. Так что, нет, не лишние эти условия.

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение14.01.2018, 19:14 
Аватара пользователя


26/05/12
1534
приходит весна?
Забрутфорсил я эту задачу =) Решение действительно существует.

atlakatl в сообщении #1283715 писал(а):
А число ходов на переход левого барана равно $2N$ правых баранов.
Нет, это не правда. Вот табличка числа ходов плюс один (полное число позиций, включая начальную и конечную) в зависимости от числа баранов справа и слева:

.....1....2....3....4....5....6....7
1....4....6....8...10...12...14...16
2....6....9...12...15...18...21...24
3....8...12...16...20...24...28...32
4...10...15...20...25...30...35...40
5...12...18...24...30...36...42...48
6...14...21...28...35...42...49...56
7...16...24...32...40...48...56...64


Как видно число ходов хорошо ложится на формулу $S=(N+1)(M+1)-1$. Без понятия, правда, как это доказать в общем случае.
arseniiv в сообщении #1283789 писал(а):
Ключом к успеху является (не доказал, но правдоподобно) чередование баранов разных цветов.
А вот это правда! Например, решение для 5 слева и 9 справа:

(Оффтоп)

11111_000000000
111110_00000000
1111_0100000000
111_10100000000
11101_100000000
1110101_0000000
11101010_000000
111010_01000000
1110_0101000000
11_010101000000
1_1010101000000
101_10101000000
10101_101000000
1010101_1000000
101010101_00000
1010101010_0000
10101010_010000
101010_01010000
1010_0101010000
10_010101010000
_01010101010000
0_1010101010000
001_10101010000
00101_101010000
0010101_1010000
001010101_10000
00101010101_000
001010101010_00
0010101010_0100
00101010_010100
001010_01010100
0010_0101010100
00_010101010100
000_10101010100
00001_101010100
0000101_1010100
000010101_10100
00001010101_100
0000101010101_0
00001010101010_
000010101010_01
0000101010_0101
00001010_010101
000010_01010101
0000_0101010101
00000_101010101
0000001_1010101
000000101_10101
00000010101_101
0000001010101_1
000000101010_11
0000001010_0111
00000010_010111
000000_01010111
0000000_1010111
000000001_10111
00000000101_111
0000000010_1111
00000000_011111
000000000_11111

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение14.01.2018, 19:36 
Аватара пользователя


21/09/12

1871
B@R5uk в сообщении #1284043 писал(а):
Нет, это не правда

Читайте внимательно мой коммент:
atlakatl в сообщении #1283715 писал(а):
Три барана - или больше - слева в задаче нужны только для пробки. А число ходов на переход левого барана равно $2N$ правых баранов.
ТС переводит ОДНОГО барана.

 Профиль  
                  
 
 Re: задача на перестановку нулей и единиц
Сообщение14.01.2018, 19:46 
Аватара пользователя


26/05/12
1534
приходит весна?
atlakatl в сообщении #1283715 писал(а):
Интересней случай, когда между группами расстояние больше единицы. Тогда кооперация возникает более сложная. Не для баранов.
Да, уж, всё становится прям совсем интересно. Даже мой брутфорс с отсеиванием и без отсеивания повторяющихся позиций выдаёт разные результаты, хотя в обоих случаях должен выдать кратчайший. Кто-нибудь подскажет в чём проблема?
код: [ скачать ] [ спрятать ]
Используется синтаксис Java(TM) 2 Platform Standard Edition 5.0

                StringState[] states;
                ArrayDeque<StringState> statesQueue = new ArrayDeque<>();
                TreeSet<StringState> statesList = new TreeSet<>();
                currentState = startState;
                statesQueue.add(currentState);
                statesList.add(currentState);
                while (!statesQueue.isEmpty()) {
                        states = statesQueue.poll().getPossibleSteps();
                        for (n = 0; states.length > n; ++n) {
                                currentState = states[n];
                                if (!statesList.contains(currentState)) {
                                        if (finalState.equals(currentState)) {
                                                break;
                                        }
                                        statesQueue.add(currentState);
//                                      statesList.add(currentState);
                                }
                        }
                }


atlakatl в сообщении #1284049 писал(а):
ТС переводит ОДНОГО барана.
Ок, пусть будет так.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group