![]() |
|
|
![]()
|
|
| valzy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.3.2008 Репутация: нет Всего: нет |
Как искать нарушения в очередности последовательности чисел?
Последовательность чисел такая, что они принимают значения от 0 до 15, а потом снова с нуля. Пример последовательности: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1, 12, 2, 13, 14, 15, 0, 1, 2. Видно, что в последовательности числа 1 и 2 лишнии. Как идентифицировать подобное поведение и подсчитать ошибки в очередности? Буду рад выслушать идеи, или посмотреть готовые алгоритмы Базовая последовательность конечна и все ее элементы принимают значения от 0 до 15 строго инкрементируя друг за другом ровно на единицу. "Лишние" элементы тоже принимают значения от 0 до 15, которые случайны. Это сообщение отредактировал(а) valzy - 8.4.2008, 09:55 |
|||
|
||||
| v2v |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: нет Всего: 56 |
начинать с индекса i=0 , перехоим к i=1 .проверяем a[i]?=a[i-1] , если да идём дальше, если нет , начинаем выбрасывать числа из последовательности пока: a[i]!=a[i-1]
|
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
начать стоит со списка возможных искажений
на примере - вставка какого-то числа какие-то ещё возможны? (замена, удаление, ...) Это сообщение отредактировал(а) maxim1000 - 6.4.2008, 00:23 -------------------- qqq |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Известен ли предел "ошибки"? Есть ли гарантия непрерывности базовой последовательности? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| valzy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.3.2008 Репутация: нет Всего: нет |
Базовая последовательность конечна и все ее элементы принимают значения от 0 до 15 строго инкрементируя друг за другом ровно на единицу. "Лишние" элементы тоже принимают значения от 0 до 15, которые случайны.
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
В таком случае простейший алгоритм - для каждого значения искать следующее. Если оно и в ряду по положению следующее - в данной точке неправильности нет.
Но это полдела. Все найденные неправильности следует также проверить на принадлежность основной последовательности. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| FIaR |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.11.2006 Репутация: нет Всего: 2 |
Вот исходник на С++ этого алгоритма
Так...до кучи )) --------------------
Шуруп забитый молотком, держится лучше, чем гвоздь закрученый отверткой. |
|||
|
||||
| valzy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.3.2008 Репутация: нет Всего: нет |
Всем спасибо! Буду разбираться.
Еще возможен такой случай, что в последовательности группа элементов распологается впереди относительно другой группы элементов, которая должная была быть первой. Т.е: 3 4 5 6 7 8 9 0 1 2 10 11 12 13 14 15 Как здесь можно отловить нарушение в очередности? Сам даже и не знаю... P.S. А вообще этот алгоритм чем-то должен быть похожим на тот, в котором происходит поиск нарушений в очередности пакетов MPEG-2 Transport Stream и их потерь. Кто знает, тот поймет. Вот его бы не мешало посмотреть, т.к. в нем появилась острая необходимость. Это сообщение отредактировал(а) valzy - 7.4.2008, 21:20 |
|||
|
||||
| v2v |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: нет Всего: 56 |
а что в этом случае надо сделать ? выбросить 0 1 2 или поставить их на место перед 3 4 ... |
|||
|
||||
| valzy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.3.2008 Репутация: нет Всего: нет |
Подсчитать количество таких нарушений. Переставлять нет нужды.
|
|||
|
||||
| v2v |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: нет Всего: 56 |
ну так, все такие нарушения будут выявляться тем алгоритмом, что я описал в первом своём посте.
может непонятно написал... |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Я об этом уже говорил... Интересно, чем определено, что неправильность - это именно "0 1 2", а не всё остальное? Для меня это более чем неочевидно. Пока, во всяком случае... я уж не говорю о вариантах типа: 0 1 0 2 1 2 3 3 4 5 4 5 6 7 8 6 7 9 10 8 9 10 11 12 11 13 14 12 13 14 15 15 Ну-ка, покажите тут основную последовательность и "неправильности" -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| v2v |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: нет Всего: 56 |
значит в таком случае выбрать начальную (самую длинную? ) правильную последовательность (возможно где то в средине она будет) и от неё отталкиваться. |
|||
|
||||
| SoWa |
|
||||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Утренние мысли:
1) от неправильности типа "повторения" можно избавиться путем слияния(выражаюсь некорректно) Пример. 15 15 15 15 15 -> 15 И где-нибудь отметим, что неправильность типа "повторение" исправлена 2) неправильность типа "пик или впадина". Идея графическая. Идти по графику и отыскивать в нем эти неправильности(некорректно выражаюсь). Так как мы ликвидировали неправильности типа "повторение", то можем смело делать так: если обнаруживаем, что слудующая точка после текущей рассматриваемой отличается от нее более чем на 1, то её принимаем во внимание за начало неправильности(вдруг неправильность вида 10 11 0 1 0 12). Идем далее по списку точек, пока не найдем ту, которая на 1 больше чем точка, с которой начался весь сыр бор. Пример.
Ой ой. Начальную точку тоже как-нибудь проверяйте. Ноль или единица- вам решать. Вот последовательность от Акины, приведеная в правильный вид. Красным - неправильности типа впадин, синим- типа повторений. Повторения превращаются в 1 число, как сказано в начале поста. Начало с 0. 0 1 0 2 1 2 3 3 4 5 4 5 6 7 8 6 7 9 10 8 9 10 11 12 11 13 14 12 13 14 15 15 0 1 0 2 1 2 3 3 4 5 4 5 6 7 8 6 7 9 10 8 9 10 11 12 11 13 14 12 13 14 15 15 Добавлено через 6 минут и 23 секунды Прошу найти контр-пример, чтобы можно было думать дальше Добавлено через 7 минут и 59 секунд
Это сообщение отредактировал(а) SoWa - 8.4.2008, 06:22 -------------------- Всем добра |
||||
|
|||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Я не зря привел пример, где перемешаны две абсолютно одинаковые базовые последовательности. Неправильность типа "повторение" не оговорена. Единственный оговоренный тип неправильности - это когда
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |