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
11185
Россия, Москва
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  След.

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



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

Сейчас этот форум просматривают: B@R5uk


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

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