Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Восстановление последовательности 
:(
    Опции темы
urdnot
Дата 28.10.2016, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.10.2016

Репутация: нет
Всего: нет



1. Есть конечная последовательность натуральных чисел обладающая следующим свойством:
(*) Любой суффикс этой последовательности лексикографически( только числа вместо букв) больше этой последовательности, например:
a = {3, 6, 10, 3, 6, 11, 3, 6, 99}, какой суффикс ни возьми: 99 >a, {6, 99} > a, {3, 6, 99} > a, ... и т.д
Потом мы берем и записываем все сдвиги этой последоваетльности т.е.
{6,10,3,6,11,3,6,99,3}; {10,3,6,11,3,6,99,3,6}; ... и т.д
Потом сортируем эти сдвиги лексикографически и берем последние элементы, получаем некую перестановку начальной последовательности. Для а ,например: {99, 10, 11, 3, 3, 3, 6, 6, 6} и вот надо воостановить по ней исходную последовательность.

2. Усложнение задачи 1. дана конечная последовательность натуральных чисел и мы слева направо начинаем искать максимальные подпоследовательности обладающие свойством (*) т.е. например:
a = {3,56,78, 5,6,4,2,5,7,8,9,2,4,1} -> {{3,56,78,5,6,4}, {2,5,7,8,9},{2,4},{1}}
Затем как в (1) для каждой подпоследовательности записываем все сдвиги (для посл. длин n , будет n всевозможных сдвигов)
Потом берем все последовательности и сортируем в лексикографичесокм порядке и берем их последние элементы
Получаем новую последовательность, по ней надо восстановить исходную.

Помогут любые дельные идеи, реализую уже я их сам. 

Это сообщение отредактировал(а) urdnot - 28.10.2016, 18:06
PM MAIL   Вверх
Akina
Дата 28.10.2016, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(urdnot @  28.10.2016,  19:06 Найти цитируемый пост)
Потом сортируем эти сдвиги лексикографически и берем последние элементы, получаем некую перестановку начальной последовательности.

А есть доказательство этого утверждения?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
urdnot
Дата 28.10.2016, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.10.2016

Репутация: нет
Всего: нет



Цитата(Akina @  28.10.2016,  18:42 Найти цитируемый пост)
А есть доказательство этого утверждения? 


Наверное я не совсем понятно объяснил про сдвиги. Это все возможные вращения последовательности , например:
{3,5,6,1} ->  {5,6,1,3}
                      {6,1,3,5}
                      {1,3,5,6}
                      {3,5,6,1}
Поэтому на последней позиции окажутся все элементы последовательности, а лексикографическая сортировка перемешает их, т.е. получится перестановка исходной последовательности какая-то

PM MAIL   Вверх
Akina
Дата 28.10.2016, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Ааа... ок.
Нада подумать... как я понимаю, полный перебор тебя не устроит.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
urdnot
Дата 28.10.2016, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.10.2016

Репутация: нет
Всего: нет



Цитата(Akina @  28.10.2016,  18:53 Найти цитируемый пост)
как я понимаю, полный перебор тебя не устроит. 

Мне нужно зарешать ее для конкретного теста и в нем 6500 чисел, т.е. перебор вообще никак. У меня есть некоторые мысли по задаче , вот мы знаем что последовательность это последние элементы отсортированной последовательности, и их первые элементы получается это отсортированная исходная последовательность т.е. у нас уже получается первые и последние элементы. Например если бы на вход подвалась последовательность из различных элементов без повторений по этим парам мы бы просто восстановили исходную последовательность, но они ж повторяться могут.

По подробнее распишу все же:
1.  {3,5,6,2}

2. Повороты:
     {5,6,2,3}
     {6,2,3,5}
     {2,3,5,6}
     {3,5,6,2}

3. Сортировка:   (*)
     {2,3,5,6}    
     {3,5,6,2}
     {5,6,2,3}
     {6,2,3,5}

4. Последние элементы: {6, 2, 3, 5} (**)
5. Моя идея:   мы знаем что (**) последние элементы (*) поэтому можеи воостановить частично (*)
     {2, ..., 6}
     {3, ... , 2}
     {5, ..., 3}
     {6, ..., 5}
По этим парам {6,2} ,{2,3}, {3,5}, {5,6} можем восстановить исходную последовательность с точность до поворота ( в мое задаче этого достаточно, потом надо будет просто вращать пока не получишь минимальную последовательность)


Это сообщение отредактировал(а) urdnot - 28.10.2016, 19:18
PM MAIL   Вверх
urdnot
Дата 28.10.2016, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.10.2016

Репутация: нет
Всего: нет



Вот сейчас подумал, с небольшой можификацией моя идея решает 1ую задачу, например:
a = {3,5,7,4,5,5} исходная последовательность (*)

Отсортированные сдвиги (**):
{3,5,7,4,5,5}
{4,5,5,3,5,7}
{5,3,5,7,4,5}
{5,5,3,5,7,4}
{5,7,4,5,5,3}
{7,4,5,5,3,5}

Последовательность по которой надо восстановить исходную {5,7,5,4,3,5}

1. {3,...,  5}   ->  {5, 3}  (часть иходной последовательности)
    {4,...., 7}   -> {7,4}
    {5,...., 5}   - >{5, 5}
    {5, ..., 4}  -> { 4,5}
    {5,..., 3}   ->  {3,5}
    {7, ..., 5}  ->   {5,7}
Мы знаем что за 3 следует 5 (3 одна поэтому никаких проблем), за 4 следует 5 (тоже нет проблем), за 5 может идти 3,5,7 , но мы знаем что (**) отсортировано поэтому 3,5,7 сортируем и последовательновписываем после пятерок, с 7ой никактх проблемю Получаем:

2. {3, 5, ..., 5}   - >  {5,3,5}
    {4, 5, ...., 7}   ->   {7,4,5}
    {5, 3, ...., 5}   - > {5,5,3}
    {5, 5, ...., 4}   ->  {4,5,5}
    {5, 7, ...., 3}   ->   {3,5,7}
    {7, 4, ...., 5}  ->    {5,7,4}
Дальше проделываем тоже самое и получаем нужную последовательность с точность до поворота (этого достаточно)

Но вот в усложненном варианте такой подход не дает нужный результат. 
Например исходная последовательность: {3,3,6,3,3} разобьется на {{3,3,6}, {3}, {3}} Затем после сдвигов и сортировок:
{3}
{3}
{3,3,6}
{3,6,3}
{6,3,3}
Получаем последовательность из последних элементов: {3,3,6,3,3}
Получаем пары:
{3, ... , 3}  -   {3, 3} ложная пара тройка зациклена на себе
{3, ..., 3}  -   {3, 3} снова ложная
{3, ..., 6}  -  {6,3}
{3, ..., 3}  - {3,3}
{6, ...., 3} -  {3, 6}

{3, 3, ..., 3}  - неверно
{3, 3, ..., 3}  - неверно
{3, 3, ..., 6}
{3, 6, ..., 3}
{6,3, ..., 3}


Это сообщение отредактировал(а) urdnot - 28.10.2016, 20:12
PM MAIL   Вверх
Akina
Дата 28.10.2016, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(urdnot @  28.10.2016,  20:03 Найти цитируемый пост)
перебор вообще никак

Тогда обрати внимание на то, что последовтельность, отвечающая исходным условиям, состоит из группы подпоследовательностей, каждая их которых лексикографически больше и не длиннее предыдущей, а её элементы образуют неубывающую последовательность. В твоём примере это три подпоследовательности {3,6,10},{3,6,11},{3,6,99}. 

В твоём примере: конечный набор состоит из чисел 99, 10, 11, 3, 3, 3, 6, 6, 6}.
Если подпоследовательность одна - это 3,3,3,6,6,6,10,11,99.
Если две - придётся рассматривать длины первой последовательности от 8 до 5.
Для, скажем, 7, у нас возможны какие варианты?
Для простоты рассмотрим вторую группу, из 2 элементов. Первый может быть 3,6,10 или 11. Он не может быть 99, т.к. тогда не найдём второго - ведь он должен быть не меньше.
Если он 11, то второй - только 99. Если он 10, то второй 11 или 99. Если 6, то второй 6,10,11 или 99. Если 3, то второй 6,10,11 или 99 (3 быть не может, иначе не останется двух троек для первой группы). Т.е. всего-то 11 вариантов перебрать... а всего вариантов будет порядка сотни.

Добавлено через 1 минуту и 27 секунд
Цитата(urdnot @  28.10.2016,  20:57 Найти цитируемый пост)
исходная последовательность: {3,3,6,3,3} разобьется на {{3,3,6}, {3}, {3}}

Или {{3,3,6}, {3,3}}.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
urdnot
Дата 28.10.2016, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.10.2016

Репутация: нет
Всего: нет



Цитата(Akina @  28.10.2016,  20:36 Найти цитируемый пост)
обрати внимание на то, что последовтельность, отвечающая исходным условиям, состоит из группы подпоследовательностей, каждая их которых лексикографически больше и не длиннее предыдущей, а её элементы образуют неубывающую последовательность

Можно придумать последовательность которая не будет этому удовлетворять: a = {3,5,     90,85,83,82,81 /*убывает*/   ,    50,51,52,53,54,55,56,57,58  /*длинее предыдущей*/} но тем не менее дуовлетворяет исходному условию: {58} > a, {57,58} >a, .., {83,82,...,58} > a, и т.д. Или я просто не правильно понял?
Насчет {3,3,6,3,3} -> {{3,3,6},{3},{3}}. {3,3} не удовлетворяет потому что ее суффикс {3} меньше ее самой. {3} < {3,3}

Это сообщение отредактировал(а) urdnot - 28.10.2016, 21:00
PM MAIL   Вверх
urdnot
Дата 28.10.2016, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.10.2016

Репутация: нет
Всего: нет



Цитата(Akina @  28.10.2016,  20:36 Найти цитируемый пост)
В твоём примере: конечный набор состоит из чисел 99, 10, 11, 3, 3, 3, 6, 6, 6}.
Если подпоследовательность одна - это 3,3,3,6,6,6,10,11,99.

(*) {99, 10, 11, 3, 3, 3, 6, 6, 6}  -  это то что на вход подается, (**) {3,6,10,3,6,11,3,6,99}  -  это то что каким то образом надо восстановить (просто я знаю это потому что сам ее преобразовал и получил (*)). a = {3,6,10,3,6,11,3,6,99} - целиком удовлетворяет условию о суффиксах ее разбивать не нужно, т.е. {99} > a, {6,99} > a, {3,6,99} >a, {11,3,6,99} >a, {6,11,3,6,99} ,..., {6,10,3,6,11,3,6,99}>a. Точнее когда последовательность цеиком удовлетворяет условию о суффиксах, я понял как решать и выше написал, но вот когда последовательность нужно разбивать как с {3,3,6,3,3} там не понимаю как.

Это сообщение отредактировал(а) urdnot - 28.10.2016, 21:24
PM MAIL   Вверх
Akina
Дата 28.10.2016, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(urdnot @  28.10.2016,  21:50 Найти цитируемый пост)
{3,3} не удовлетворяет потому что ее суффикс {3} меньше ее самой. {3} < {3,3}

Про суффикс суффикса речи нигде не было...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
urdnot
Дата 28.10.2016, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.10.2016

Репутация: нет
Всего: нет



Извини, я тебя запутал, {3,3,6,3,3} это я привел пример для 2ой усложненной задачи, там сперва последовательность бьется на максимальные части для которых верное условие с суффиксами (обозначю его (+)). т.е вот берем a = {3,3,6,3,3} возьмем а целиком для него (+) не выполнено потому что {3} < a, дальше берем {3,3,6,3} тоже не выполено {3} < {3,3,6,3}, далее {3,3,6} - выполнено: {6} > {3,3,6} ; {3,6} > {3,3,6} отделяем {3,3,6} от a, получаем {3,3,6} и остаток от а - {3,3}, для него проделываем тоже,  проверяем целиком (+) - не выполнено т.к. {3} < {3,3}. Наконец берем {3} для нее (+) выполнено отделяем от {3,3} получаем остаток {3} и полностью {{3,3,6}, {3}, {3}}
PM MAIL   Вверх
urdnot
Дата 28.10.2016, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.10.2016

Репутация: нет
Всего: нет



Понял как решать усложненную задачу , если тебе интересно позже опишу алгоритм.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1430 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.