Страницы: 1
RSS
Поиск всех искомых закономерностей в огромном массиве.
 
Приветствую народ.
Прошу прояснить, как можно написать формулу для поиска последовательностей в большущем массиве.
например массив имеет построчный вид:
А
Б
В
Г
Д
Е
Ж

Нужно предусмотреть возможность поиска последовательностей, вплоть до 10 знаков.

Вводим например Г на выходе получаем предыдущую.
Вводим ЖЕ -> Д
Вводим ВБ -> А
Вводим ЕДГВ -> Б

Последовательности точные.
Возможность получать все результаты последовательностей.

Массив может исчисляющийся лимонником.

Буду признателен за помощь.
 
формулами - наверное, никак..

но без примера в файле как-то не очень понятно
Изменено: Слэн - 25.04.2013 10:21:23
Живи и дай жить..
 
Пример.
 
Если порядок элементов запроса имеет значение - тогда задача в общем простая.
Если же порядок может быть любой (а в примере есть подозрение на это) - то я например так сразу не знаю, как делать, я комбинаторику не изучал.
Но думаю что найти все  варианты из 13, 12, 11, 10, 9 будет долго...
 
да порядок имеет значение и не обязательно там могут быть числа.
Долго это понятие относительное)
 
Если порядок имеет значение - значит пример некорректный.
Ну а долго - это может быть например неделя... По отношению к жизни это конечно быстро...

Конечно на этом примере недели не будет (да и вообще я преувеличил), но например если общий массив в миллион строк, а критерий 5 элементов, которые могут быть в любом порядке - то время работы думаю будет заметно долгим.
Какие вообще объёмы данных?
Изменено: Hugo - 25.04.2013 11:25:15
 
вы имеете ввиду порядок от 1 до 100 например?,
Нет там может быть все что угодно.
И намешано может быть тоже.
 
при объявленных размерах массива, наверное, имеет смысл пронумеровать данные, отсортировать, в отсортированном списке искать вхождение первого номера, брать его номер, по номеру в первоначальном массиве проверять соседей на последовательность - в общем макрос.
Живи и дай жить..
 
Порядок - это если записано 13 12 11, то так и ищем снизу вверх, а не 12 11 13 (т.е. сверху вниз ищем только 11 12 13)
В примере 1 2 и 6 7 эту последовательность нарушают.
В общем я пока не понял, что именно нужно.
 
а да, моя опечатка, извините.
тоесть если ищем 1 2 то будет искать сначала 1 потом выше 2
если 2 1 то сначала 2 потом 1
 
Так какие объёмы?
 
до 1 млн записей
 
можно конечно разбить на куски например по 200000 записей (если это хоть как-то поможет), но тогда лучше это тоже делать автоматически.
Ну или возможно варианты есть более разумные)
Изменено: Kreol2013 - 25.04.2013 11:39:17
 
если не только цифры, то даже не знаю
Живи и дай жить..
 
Я думаю разбивать - это только тормозить и усложнять.
Миллион обработать в 2007/10 можно, без проблем.
Но может быть проблема с выводом результатов - например совпадений с 3 может быть 300000... Вы уверены, что для них хватит места справа? Может быть нужно менять форму - например критерии  в начале столбцов (первые 10 строк, или сколько там может быть максимум), а результаты под критериями?
 
Цитата
Слэн пишет:
если не только цифры, то даже не знаю

Пусть только цифры будут.  :)
 
Цитата
Hugo пишет:
Я думаю разбивать - это только тормозить и усложнять.
понял
Цитата
Hugo пишет:
Миллион обработать в 2007/10 можно, без проблем.
используем от 7 и выше
Цитата
Hugo пишет:
Но может быть проблема с выводом результатов - например совпадений с 3 может быть 300000...
согласен разумное ограничение поставить, настраиваемое, возможно. Либо автоматически, Например для 6 - значного поиска будет хватать и 10 а для 1 циферного пусть например 50.
Цитата
Hugo пишет:
Вы уверены, что для них хватит места справа? Может быть нужно менять форму - например критерии  в начале столбцов (первые 10 строк, или сколько там может быть максимум), а результаты под критериями?
Я попытался просто привести пример, как будет удобнее, так и будем принимать.   :)
Вправо не очень удобно.
 
Я тоже думаю что удобнее выгружать вниз - тогда и ограничение не нужно ставить, миллион строк есть.
И параметры думаю удобнее вносить в "реальном" порядке, как в массиве - в порядке сверху вниз. Хотя коду конечно всё равно...
Но делать не берусь - хотя примерно алгоритм кажется есть (детали правда не продумывал), но писать сейчас некогда.
 
Цитата
Hugo пишет:
Но делать не берусь
За неимением лучшего, ждем)
 
Try It!
Переделал на свой вкус. То, что справа - только для инфы, критерии писать в салатовой области.
Именно выгрузка правда тормознутая - если будет напрягать, то можно ещё поработать, на это меня не хватило  :)
Что ещё - если столбцов критериев много (и данные очень разнообразны), то для ускорения можно добавить ещё один словарь - собираем словарь с первыми цифрами критериев и проверяем сперва на наличие в этом словаре. И только если есть, то начинаем проверять словарь/коллекции с полными критериями (и уже как вариант конкретные коллекции).
сейчас идёт перебор словаря критериев, смотрится коллекция каждого столбца и проверяется первый элемент каждой коллекции.
Такая доработка может сильно ускорить работу, если будет большое разнообразие номеров и критериев - например 10000 вариантов в массиве и 1000 столбцов критериев.

P.S. С тройкой Вы тоже ошиблись - нет там такого числа!  :)
Изменено: Hugo - 25.04.2013 17:18:06
 
Цитата
Hugo пишет:
P.S. С тройкой Вы тоже ошиблись - нет там такого числа!:)
:D
Покорно благодарю, действительно не все так сложно оказалось.
 
Посмотрите вариант без макросов
 
Цитата
Radioalex пишет:
Посмотрите вариант без макросов
Просто бомба) респект.
Но формула некорректно работает  если будут повторы!
Как быть, например, если в списке будут 2 буквы А
При поиске будет ошибка!.
Изменено: Kreol2013 - 28.04.2013 21:13:41
 
Формула работает корректно. Ошибка выскакивает только в том случае, если совпадений не найдено! А повторений может быть сколько угодно! Проверте еще раз. Вот пример...
 
Radioalex, а если без цитаты? Или хотя бы вот так:
Цитата
формула некорректно работает если будут повторы!
 
Цитата
Radioalex пишет:
Ошибка выскакивает только в том случае, если совпадений не найдено!
В ваш массив вводим
А
Б
А
Н
Д
Е
А
А
Л
А
А
и пытаемся найти по А, получаем #CCЫЛКА
если пропишем 2 АА то получаем последнее совпадение "Л", "К" - же остается в пролете.
 
Продолжение  ТУТ
Страницы: 1
Читают тему
Наверх