Задачка про список
От: Кодт Россия  
Дата: 07.06.07 11:24
Оценка: 7 (2)
Взято из статьи в журнале MonadReader выпуск#1

Суперпоследовательность s последовательности p — такая последовательность, множество подпоследовательностей которой содержит, среди прочего, все перестановки последовательности p.
Пример:
p = 1 2 3
s = 1 2 3 1 2 3 1
    # # #
    #   #   #
      #   #   #
      #       # #
        # # #
        #   #   #


Чтобы далее не заморачиваться с наборами неуникальных элементов, будем полагать, что p(n) = [1..n], т.е. алфавит из n букв.

Напишите:
1) Предикат, проверяющий, является ли данная строка s суперпоследовательностью для алфавита p(n). Наивная реализация занимает O(n! * length(s)), это неприемлемо долго.
2) Генератор кратчайшей суперпоследовательности для p(n)
3) Формулы для оценки нижней и верхней границ её длины. Понятно, что грубые оценки — это n и n^2-n+1. Можно ли их сузить?
4) Формулы для оценки количества кратчайших суперпоследовательностей.

Для любителей самообразования:
— напишите это на Хаскелле и на J
— — наиболее читаемо
— — наиболее компактно
— — наиболее быстродействующе
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re: Задачка про список
От: Mikhail Polykovsky Россия http://glader.ru
Дата: 07.06.07 11:34
Оценка:
К>Суперпоследовательность s последовательности p — такая последовательность, множество подпоследовательностей которой содержит, среди прочего, все перестановки последовательности p.
К>Пример:
К>[code]
К>p = 1 2 3
К>s = 1 2 3 1 2 3 1

Сорри, не понял, а где в s подпоследовательность "321"?
Re[2]: Задачка про список
От: ДимДимыч Украина http://klug.org.ua
Дата: 07.06.07 12:00
Оценка:
Здравствуйте, Mikhail Polykovsky, Вы писали:

К>>p = 1 2 3

К>>s = 1 2 3 1 2 3 1

MP>Сорри, не понял, а где в s подпоследовательность "321"?


s[2], s[4], s[6]
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re: Задачка про список
От: tinytjan  
Дата: 07.06.07 14:27
Оценка:
К>4) Формулы для оценки количества кратчайших суперпоследовательностей.

Оценка сверху -- О(n^2 — n + 1)
Видно уже из приведенного вами примера.

Как строго доказать пока не знаю.
Пока проба.

У нас есть ровно n-1 последовательностей.
В них можно набрать любую последовательность из n чисел кроме n, n-1, ... , 1
Поэтому добавляем единичку в конец.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Задачка про список
От: Zuka Россия  
Дата: 07.06.07 17:23
Оценка:
Здравствуйте, Кодт, Вы писали:

Есть подозрение, что оценка снизу 2^n — 1.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Задачка про список
От: Zuka Россия  
Дата: 07.06.07 17:55
Оценка:
Здравствуйте, Zuka, Вы писали:

Z>Здравствуйте, Кодт, Вы писали:


Z>Есть подозрение, что оценка снизу 2^n — 1.


В том что оценка сверху равна 2^n — 1 я уже кажется могу доказать....
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Задачка про список
От: vadimcher  
Дата: 07.06.07 20:02
Оценка:
Здравствуйте, Zuka, Вы писали:

Z>Здравствуйте, Zuka, Вы писали:


Z>>Здравствуйте, Кодт, Вы писали:


Z>>Есть подозрение, что оценка снизу 2^n — 1.


Z>В том что оценка сверху равна 2^n — 1 я уже кажется могу доказать....


То, что оценка сверху 2^n-1 верна, доказать несложно.

Есть элегантный способ построения суперпоследовательностей.

Если нам надо суперпоследовательность для n, то мы ставим суперпоследовательность для n-1, затем число n, а затем опять любую суперпоследовательность для n-1. Получим суперпоследовательность для n.

Т.е. если для n-1 длина суперпоследовательности не больше 2^(n-1)-1, то для n она на больше, чем 2*(2^(n-1)-1)+1 = 2^n-1. Кроме того, для n=2 или 3 эта оценка работает.

Проблема, однако в том, что такая суперпоследовательность будет заведомо длиннее, чем та, что имеет длину n^2-n+1 при n>3, а для n=2,3 они совпадают. Так что, такая оценка не очень помогает в данном случае.

А вот зайца кому, зайца-выбегайца?!
Re: Задачка про список
От: vadimcher  
Дата: 07.06.07 20:10
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Напишите:

К>2) Генератор кратчайшей суперпоследовательности для p(n)
К>3) Формулы для оценки нижней и верхней границ её длины. Понятно, что грубые оценки — это n и n^2-n+1. Можно ли их сузить?
К>4) Формулы для оценки количества кратчайших суперпоследовательностей.

Суперпоследовательность 1..n...(n-1)...1..n1 явно подходит. Это означает, что оценка сверху n^2-n+1. Это то, что Кодт назвал грубой оценкой сверху.
Грубая снизу n также очевидна. Более того, очевидна грубая оценка снизу 2n-1, так как где-то в суперпоследовательности должны быть последовательности 1..n и n..1.

Для n=2 две оценки совпадают и дают длину суперпоследовательности 3. Значит, какие бы другие формулы для оценок мы тут ни придумали, они должны стартовать с 3 (для n=2).

Далее, на счет числа таких суперпоследовательностей. Возьмем любую из них, перенумеруем все числа в произвольном порядке. Получим опять суперпоследовательность. Т.е. их число делится на n!. Чтобы избежать этих трудностей назовем суперпоследовательностью в канонической форме минимальную суперпоследовательность, у которой первая подпоследовательность, состоящая из n различных чисел, равна 1..n. Очевидно, что каноническая суперпоследовательность должна начинаться с 12. Всюду далее, опять таки для простоты, будем избегать употребления слова каноническая. И будем считать теперь число (канонических) суперпоследовательностей.

Для n=1. 1
Итого: 1 суперпоследовательность длины 1.

Для n=2 она одна. 121
Итого: 1 суперпоследовательность длины 3.

Для n=3 грубые оценки дают 5 и 7. Построим суперпоследовательность. 12*3*2*1* (где * означает 0 или более цифр) Чего не хватает: 213, 312. Нужно две добавить. Варианты 1213212, 1213121, 1231321, 1231231, 1231213, 1232132 и 1232123. 7 вариантов, если не ошибся. Всего будет 7*3!=42 минимальные суперпоследовательности (не обязательно канонические).
Итого: 7 суперпоследовательностей длины 7.
1213121
1213212
1231213
1231231
1231321
1232123
1232132

Для n=4 уже немного сложнее. Надо бы набросать программку, пусть даже неоптимальную.
Итого: 9 суперпоследовательностей длины 12 (оценки 7<= <=13).
123412314213
123412314231
123412314321
123413214231
123413214312
123413214321
123421324123
123421324132
123421324312

А вот зайца кому, зайца-выбегайца?!
Re: Задачка про список
От: vadimcher  
Дата: 07.06.07 22:20
Оценка: 5 (1)
Здравствуйте, Кодт, Вы писали:

К>Суперпоследовательность s последовательности p — такая последовательность, множество подпоследовательностей которой содержит, среди прочего, все перестановки последовательности p.


Пара вопросов на засыпку:

1) Для n<=4 были найдены все минимальные суперпоследовательности. Во всех случаях была хотя бы одна последовательность, начинающаяся на 12..n, и заканчивающаяся на n..21. Верно ли, что это всегда так?

2) Ясно, что ни одна минимальная суперпоследовательность не может содержать две подряд идущие одинаковые цифры aa. Однако она может содержать abcabc (пример при n=3: 1231231). Может ли она содержать abab?

А вот зайца кому, зайца-выбегайца?!
Re: Задачка про список
От: vadimcher  
Дата: 08.06.07 15:09
Оценка:
Здравствуйте, Кодт, Вы писали:


К>Суперпоследовательность s последовательности p — такая последовательность, множество подпоследовательностей которой содержит, среди прочего, все перестановки последовательности p.


К>Напишите:

К>1) Предикат, проверяющий, является ли данная строка s суперпоследовательностью для алфавита p(n). Наивная реализация занимает O(n! * length(s)), это неприемлемо долго.
К>2) Генератор кратчайшей суперпоследовательности для p(n)
К>3) Формулы для оценки нижней и верхней границ её длины. Понятно, что грубые оценки — это n и n^2-n+1. Можно ли их сузить?
К>4) Формулы для оценки количества кратчайших суперпоследовательностей.


Вот последние результаты (посчиталось для n=5):

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

Пусть Kn -- число канонических суперпоследовательностей, тогда общее число суперпоследовательностей равно Kn*n!.

Пусть Ln -- длина минимальной суперпоследовательности.

Вот что у нас есть:

 n  Kn  Ln оценки снизу и сверху
 1   1   1            1        1
 2   1   3            3        3
 3   7   7            5        7
 4   9  12            7       13
 5 128  19            9       21


Ln близко к верхней оценке, но меньше.

Еще парочка наблюдений (по поводу двух вопросов заданных мной ранее).

Другая моя программка ищет (и делает это намного быстрее) минимальные суперпоследовательности, которые начинаются с 1..n и заканчивабтся на n..1 (была гипотеза, что такая минимальная суперпоследовательность всегда есть). Так вот, для n=5 минимальная такая суперпоследовательность имеет длину 20, т.е. не является минимальной среди всех суперпоследовательностей. Т.е. ответ на один из вопросов отрицательный. Уже для n=5 нет минимальных суперпоследовательностей, начинающихся на 1..5, и заканчивающихся на 5..1.

Среди всех 128 минимальных суперпоследовательностей по прежнему нет ни одной, содержащей abab. Т.е. этот вопрос остается пока открытым (это сущесвенно сократило бы перебор).

Забавно также, что, как и для n=4, для n=5 все суперпоследовательности начинаются на 1..n. Единственное (пока) n, для которого это не так -- n=3 (для n=3 среди 7 суперпоследовательностей 5 только начинаются на 123).

1234512341523142351
1234512341523142513
1234512341523142531
1234512341523143251
1234512341523143521
1234512341523145213
1234512341523145231
1234512341523145321
1234512341532142351
1234512341532142531
1234512341532143251
1234512341532143512
1234512341532143521
1234512341532145231
1234512341532145312
1234512341532145321
1234512431524132451
1234512431524132514
1234512431524132541
1234512431524134251
1234512431524134521
1234512431524135214
1234512431524135241
1234512431524135421
1234512431542132451
1234512431542132541
1234512431542134251
1234512431542134512
1234512431542134521
1234512431542135241
1234512431542135412
1234512431542135421
1234513241523142351
1234513241523142513
1234513241523142531
1234513241523143251
1234513241523143521
1234513241523145213
1234513241523145231
1234513241523145321
1234513241532142351
1234513241532142531
1234513241532143251
1234513241532143512
1234513241532143521
1234513241532145231
1234513241532145312
1234513241532145321
1234513421534123451
1234513421534123514
1234513421534123541
1234513421534124351
1234513421534124531
1234513421534125314
1234513421534125341
1234513421534125431
1234513421543123451
1234513421543123541
1234513421543124351
1234513421543124513
1234513421543124531
1234513421543125341
1234513421543125413
1234513421543125431
1234514231524132451
1234514231524132514
1234514231524132541
1234514231524134251
1234514231524134521
1234514231524135214
1234514231524135241
1234514231524135421
1234514231542132451
1234514231542132541
1234514231542134251
1234514231542134512
1234514231542134521
1234514231542135241
1234514231542135412
1234514231542135421
1234514321534123451
1234514321534123514
1234514321534123541
1234514321534124351
1234514321534124531
1234514321534125314
1234514321534125341
1234514321534125431
1234514321543123451
1234514321543123541
1234514321543124351
1234514321543124513
1234514321543124531
1234514321543125341
1234514321543125413
1234514321543125431
1234521342513241352
1234521342513241523
1234521342513241532
1234521342513243152
1234521342513243512
1234521342513245123
1234521342513245132
1234521342513245312
1234521342531241352
1234521342531241532
1234521342531243152
1234521342531243512
1234521342531243521
1234521342531245132
1234521342531245312
1234521342531245321
1234521432514231452
1234521432514231524
1234521432514231542
1234521432514234152
1234521432514234512
1234521432514235124
1234521432514235142
1234521432514235412
1234521432541231452
1234521432541231542
1234521432541234152
1234521432541234512
1234521432541234521
1234521432541235142
1234521432541235412
1234521432541235421

А вот зайца кому, зайца-выбегайца?!
Re: Задачка про список
От: vadimcher  
Дата: 08.06.07 15:23
Оценка: :))
Здравствуйте, Кодт, Вы писали:

К>Суперпоследовательность s последовательности p — такая последовательность, множество подпоследовательностей которой содержит, среди прочего, все перестановки последовательности p.


К>Напишите:

К>1) Предикат, проверяющий, является ли данная строка s суперпоследовательностью для алфавита p(n). Наивная реализация занимает O(n! * length(s)), это неприемлемо долго.
К>2) Генератор кратчайшей суперпоследовательности для p(n)
К>3) Формулы для оценки нижней и верхней границ её длины. Понятно, что грубые оценки — это n и n^2-n+1. Можно ли их сузить?
К>4) Формулы для оценки количества кратчайших суперпоследовательностей.

Принимаюсь за перебор для n=6. По моим подсчетам это займет не более 10000 лет...

А вот зайца кому, зайца-выбегайца?!
Re[2]: Задачка про список
От: Константин Россия  
Дата: 08.06.07 16:32
Оценка: 2 (1)
Здравствуйте, vadimcher, Вы писали:

V>
V> n  Kn  Ln оценки снизу и сверху
V> 1   1   1            1        1
V> 2   1   3            3        3
V> 3   7   7            5        7
V> 4   9  12            7       13
V> 5 128  19            9       21
V>


n=6 Ln <= 28 
n=7 Ln <= 39
n=8 Ln <= 52


n=6 --- [1,2,3,4,5,6,1,2,3,4,5,1,6,2,3,4,1,5,2,6,3,1,4,2,5,1,3,6]
n=7 --- [1,2,3,4,5,6,7,1,2,3,4,5,6,1,7,2,3,4,5,1,6,2,7,3,4,1,5,2,6,3,7,1,4,2,5,1,3,6,7]
n=8 --- [1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,1,8,2,3,4,5,6,1,7,2,8,3,4,5,1,6,2,7,3,8,4,1,5,2,6,3,7,1,4,8,2,5,1,3,4,6,7]



Новая гипотеза, Ln = n*n-2*n+4 (для n>=3)
Re[3]: Задачка про список
От: vadimcher  
Дата: 08.06.07 16:49
Оценка:
Здравствуйте, Константин, Вы писали:

К>
К>n=6 Ln <= 28 
К>n=7 Ln <= 39
К>n=8 Ln <= 52
К>


К>
К>n=6 --- [1,2,3,4,5,6,1,2,3,4,5,1,6,2,3,4,1,5,2,6,3,1,4,2,5,1,3,6]
К>n=7 --- [1,2,3,4,5,6,7,1,2,3,4,5,6,1,7,2,3,4,5,1,6,2,7,3,4,1,5,2,6,3,7,1,4,2,5,1,3,6,7]
К>n=8 --- [1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,1,8,2,3,4,5,6,1,7,2,8,3,4,5,1,6,2,7,3,8,4,1,5,2,6,3,7,1,4,8,2,5,1,3,4,6,7]
К>



К>Новая гипотеза, Ln = n*n-2*n+4 (для n>=3)


Ок, допустим, для n=6 такая последовательность годится. Ее длина 28.
Но есть ли гарантия, что нет последовательности меньшей длины?

Или то, что ты имеешь в виду, это, что если найдены хотя бы по одной, то верны новые оценки, данные сверху?

известно:
7 вместо 7 (-0)
12 вместо 13 (-1)
19 вместо 21 (-2)

гипотеза:
28 вместо 31 (-3)
39 вместо 43 (-4)
52 вместо 57 (-5)

Она подкрепляется найденными последовательностями.

Это здорово, но нет гарантии, что эти самые минусы в скобках растут линейно. Т.е. нет гарантии, что, например, для n=7 нет последовательности длины 38 (-5), например.

Может там что-то более сложное. Ведь для n=1,2,3 было (-0). А потом, когда стало достаточно цифр для какой-то "внутренней оптимизации", мы стали отходить от верхней границы. Линейно пока. Может после еще пары цифр мы начнем отходить от нее быстрее?

Кстати, там по ссылке никаких ответов нет?

P.S. Подумайте, плиз, насчет abab. Это может помочь. Например, до того, как я убрал последовательности с aa, алгоритм n=5 тоже не осиливал. А потом, как убрал, стал.

А вот зайца кому, зайца-выбегайца?!
Re[4]: Задачка про список
От: Иванков Дмитрий Россия  
Дата: 08.06.07 20:50
Оценка: 4 (1)
Здравствуйте, vadimcher, Вы писали:

V>P.S. Подумайте, плиз, насчет abab. Это может помочь. Например, до того, как я убрал последовательности с aa, алгоритм n=5 тоже не осиливал. А потом, как убрал, стал.


Не должно быть abab.
Пусть есть abab, меняем на aba, ничего не меняется.
Т.к. любая подпоследовательность-перестановка пересекается с abab максимум в одной a и одной b, как бы это не происходило всегда можно обойтись только первой b.
Re[5]: Задачка про список
От: vadimcher  
Дата: 08.06.07 21:24
Оценка:
Здравствуйте, Иванков Дмитрий, Вы писали:

ИД>Здравствуйте, vadimcher, Вы писали:


V>>P.S. Подумайте, плиз, насчет abab. Это может помочь. Например, до того, как я убрал последовательности с aa, алгоритм n=5 тоже не осиливал. А потом, как убрал, стал.


ИД>Не должно быть abab.

ИД>Пусть есть abab, меняем на aba, ничего не меняется.
ИД>Т.к. любая подпоследовательность-перестановка пересекается с abab максимум в одной a и одной b, как бы это не происходило всегда можно обойтись только первой b.

Спасибо.
Честно говоря, я сам как-то не успел подумать, просто для aa это очевидно, а abcabc я увидел в минимальной суперпоследовательности для n=3, вот и родился вопрос на счет abab, а оказалось достаточно легко убедиться, что и abab не может быть.

Я уже такие последовательности убрал (помогло, к сожалению, не так, как я надеялся -- когда я до этого убрал последовательности с aa помогло почему-то значительно заметнее).

Правда случай n=5 уже разрешен, а случаю n=6 уже ничто не поможет...

А вот зайца кому, зайца-выбегайца?!
Re[3]: Задачка про список
От: johnsmith2  
Дата: 29.06.07 11:18
Оценка:
Здравствуйте, Константин, Вы писали:

К>
К>n=6 Ln <= 28 
К>n=7 Ln <= 39
К>n=8 Ln <= 52
К>


К>
К>n=6 --- [1,2,3,4,5,6,1,2,3,4,5,1,6,2,3,4,1,5,2,6,3,1,4,2,5,1,3,6]
К>n=7 --- [1,2,3,4,5,6,7,1,2,3,4,5,6,1,7,2,3,4,5,1,6,2,7,3,4,1,5,2,6,3,7,1,4,2,5,1,3,6,7]
К>n=8 --- [1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,1,8,2,3,4,5,6,1,7,2,8,3,4,5,1,6,2,7,3,8,4,1,5,2,6,3,7,1,4,8,2,5,1,3,4,6,7]
К>


К>Новая гипотеза, Ln = n*n-2*n+4 (для n>=3)


n=9 Ln<=67
1234567891234567819234567189234561789234516789234156789231456782913


Пока похоже подтверждается
Re[3]: Задачка про список
От: johnsmith2  
Дата: 29.06.07 11:46
Оценка:
Здравствуйте, Константин, Вы писали:

К>Новая гипотеза, Ln = n*n-2*n+4 (для n>=3)



n=10 Ln<=84 
012345678901234567809123456708912345607891234506789123405678912304567891203456781902


для 10 тоже
Re[2]: Задачка про список
От: johnsmith2  
Дата: 20.07.07 09:10
Оценка:
Здравствуйте, vadimcher, Вы писали:

V>Принимаюсь за перебор для n=6. По моим подсчетам это займет не более 10000 лет...


Жаль что эту задачку все забросили потому, что перебор может быть очень сильно оптимизирован.

На ряду с исходной задачей рассмотрим задачу построения суперпоследовательностей для размещений из n по k. Для этой задачи у меня получилась оценка L(n,k)=L(k)+(n-k)*k (для n<=6 k<=5 проверено).

Теперь можно использовать эту оценку для решения исходной задачи следующим образом:
Пусть построено частичное решение длины m и имеется массив последовательностей которые которые еще осталось покрыть найдем такой набор размещений из p по q (перебор по сочетаниям из n по p) который собержится в этом массиве (как подпоследовательности отдельных элементов), тогда ясно что чтобы дополнить частичное решение до полного то придется по крайней мере покрыть эти размещения т.е. удлинить решение по крайней мере на L(p,q)+(n-p) ((n-p) цифр не попадут в покрытие).
Из этого следует что частичное решение должно удовлетворять условию m+L(p,q)+(n-p)<=L(n) если нет то продолжать его нет смысла. Это значительно сокращает перебор (построение всех суперпоследовательностей для n=5 занимает примерно 10 сек на моем лаптопе). Так что ждите, скоро n=6 падет.
Re[2]: Задачка про список
От: johnsmith2  
Дата: 23.07.07 08:06
Оценка: 15 (1)
Здравствуйте, vadimcher, Вы писали:

V>Принимаюсь за перебор для n=6. По моим подсчетам это займет не более 10000 лет...


Как обесчал n=6 сдалось

полное решение можно скачать эдесь
http://ifolder.ru/2758902
есть неожиданости, например суперпоследовательность

0123425130243152034123501432

1. она не начинается на 012345
2. всего три 5-ки (против шести 2-ек)
3. очень маленькое расстояние между двумя первыми 2-ками (два против семи для 5-ок)

у меня складывается впечатление что для n=7 минимальная длина суперпоследовательности должна оказаться меньше ожидаемой 39
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.