Tad писал(а):
И есть на все буквы алфавита.Вовочка писал(а):
Карлик во-от с таким хххх!
Ответов: 8921
Рейтинг: 823
|
|||
Tad писал(а): И есть на все буквы алфавита.Вовочка писал(а): Карлик во-от с таким хххх! |
|||
карма: 19 |
|
Ответов: 817
Рейтинг: 52
|
|||
Galkov писал(а): Вот вам и весь сказ Я даже не сомневаюсь, что именно так и есть, но хотелось бы понять что вы сказали. |
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
-= DriveR =- писал(а): но хотелось бы понять что вы сказали.Схема от Galkov в 4-5 раз быстрее. |
|||
карма: 25 |
|
Ответов: 5227
Рейтинг: 587
|
|||
Есть в VBScript такой объект как Dictionary (если мне не изменяет память)
Так вот когда я делал тесты на похожую тематику то IC c StrList буквально не на много опередил. Но разница в коде была очевидна, ПиСАТЬ было трудней и гораздо больше |
|||
карма: 4 |
|
Ответов: 9906
Рейтинг: 351
|
|||
-= DriveR =- писал(а): но хотелось бы понять что вы сказали.Вот спрашивается, чего тут непонятного:
Каждое сравнение уменьшает область (между i и j) поиска слова в отсортированном массиве в ДВА РАЗА. Поэтому, сколько надо сделать сравнений для массива в 1000 слов ??? Десять. А для массива в 2000 слов -- одиннадцать. А для массива в 4000 слов -- двенадцать. И т.д.. Это и есть логарифмическая асимптотика. А сколько надо сделать сравнений для массива в 1000 слов полным перебором ??? Разницу чувствуете, или как Редактировалось 3 раз(а), последний 2017-05-26 23:28:03 |
|||
карма: 9 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Tad писал(а): Быстрее всего получилось с перенаправлением по первой букве на свой список.Если, опять же, говорить о теории -- то это называется хешированием словаря. Вычисляется некоторый хэш для искомого слова, который является индексом для массива указателей. Указателей на списки (массивы) слов с одинаковым хэшом. Брать в качестве хэша первую букву слова, хоть и очень быстро, но не очень эффективно - сам же говорил, что на букву 'П' большая половина словаря падает. Смысл хэширования - разбить весь словарь максимально равномерно по отдельным спискам. Ну, например - CRC8... Если он более или менее равномерно распихает словарь по 256 спискам, то в каждом будет десяток-другой слов. Если мы искали "полным перебором" - эффект будет впечатляющий. А если "делением пополам" - то сэкономим аж 8 сравнений. И потеряем на вычислении хэша. Что лучше - смотреть надо более конкретно... Можно брать нужное (10-12) количество битов от CRC16. Тут нужно отдельное изучение, с конкретным словарем, с оптимизацией алгоритмов, и т.п.. |
|||
карма: 9 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
А еще можно добавить распределение искомых слов в словаре по частоте использования, а не по алфавиту
|
|||
карма: 22 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Дело в том, что "еще" не получается, а получается - "вместо"
Предположим: 90% того, что мы говорим - не является матом (только к примеру - особо культурных просьба не обижаться!). Тогда, проверка методом "полного перебора" прошелестит весь список "почти всегда". Ну и причем тут "частота использования", спрашивается... Задача у нас, насколько я понял, не только в том, чтобы быстро НАЙТИ, но и не менее быстро - НЕ НАЙТИ Редактировалось 6 раз(а), последний 2017-05-27 15:19:05 |
|||
карма: 9 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Ну вообще-то матерных корней всего 7(или 11) и проверять нужно не на слово, а на наличие корня.
Редактировалось 1 раз(а), последний 2017-05-27 16:29:04 |
|||
карма: 25 |
|
Ответов: 8921
Рейтинг: 823
|
|||
Tad,
"Слов немного, пять иль шесть, Зато какие комбинации!" (с)А. Иванов |
|||
карма: 19 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Леонид, заглянул в Википедию. Вроде уже к 6000 комбинаций приближаемся.
|
|||
карма: 25 |
|
Ответов: 9906
Рейтинг: 351
|
|||
sla8a писал(а): Посколько помню по скорости выполнения рейтинг такой:Забыли самый главный фактор - тип алгоритма. Или, если хотите - его асимптотику. Например, все помнят про сортировку. Асимптотика рекурсивной сортировки O(N*ln(N)) А асимптотика пузырькового метода O(N^2). И, при достаточно большом N, рекурсивная сортировка, сделанная "на рассыпухе" как схема в HiAsm -- обойдет по скорости пузырьковую на IC. И даже - сильно обойдет. Так и у нас, с "поиском в словаре". Полный перебор - это одно (O(N)), а деление пополам - это другое (O(ln(N))). Хотя, для второго случая, и необходима предварительная сортировка словаря. Tad писал(а): Схема от Galkov в 4-5 раз быстрее.Как бы сравнивать быстродействие с разными асимптотиками - не есть правильно. Результат очень сильно зависит от входных данных. При малых объемах словаря - вполне может оказаться и наоборот. А при больших: Поиск делением пополам Поиск полным перебором А теперь вспомним, что эксперимент - "это вам не баб щупать"... Измерим время "холостого хода": подадим событие мимо IC, скажем вместо onNo И получится, что собственно поиск - лишь незначительная часть измеренного нами времени. Генерируем слово, а потом запоминаем его мы значительно дольше. Так что это даже не в 100 раз, а примерно в 500-1000 раз быстрее... Убедил, или нет Вместо того, чтобы статистику мата обсуждать, подумали бы, в какой элемент присобачить аналогичный метод. Вещь-то, простая, как сибирский валенок. А у нас ее нет. Может в ArraySort ...... Редактировалось 4 раз(а), последний 2017-05-31 14:14:33 |
|||
карма: 9 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Galkov писал(а): Может в ArraySortА почему не в ArrayFind, вроде же мы тут поиск рассматриваем? Ну или создать отдельно компонент ArrayFindEx Редактировалось 1 раз(а), последний 2017-05-28 10:33:17 |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
За
nesco писал(а): создать отдельно компонент ArrayFindExили ArrayFastFind Редактировалось 1 раз(а), последний 2017-05-28 14:21:27 |
|||
карма: 25 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Galkov, да, всё правильно говорит, а толку?
Были такие компоненты - HashTableString и всё описанное делали, а толку что? Хоть кто нибудь понял, как это работает? Согласен, Galkov делает ликбез, за что ему почёт, почёт, почёт. Но согласитесь господа товарищи - не в пипипип.. не в красную армию. Galkov, это тебе и мне прозрачо, .... Не научишь ведь так! Будь проще (справедлив, понятен, и прост, а самое главное добр!!!) и народ за тобой потянется! |
|||
карма: 6 |
|