|
|
|
EXCEL Need help
|
|||
|---|---|---|---|
|
#18+
sigizmind, Сколько в результате получится уникальных фраз не столь важно, важнее сколько данных придется перелопатить и тут уж точно не выйдешь пока не пройдешь все 30.000 строк. Проверено - будет ну ооооооооооочень медленно. Если очень хочется, попробуйте вариант во вложении (только не сразу для 30.000, а сначала скажем для 5.000). Серьезней сводной ничего представить не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 20:43 |
|
||
|
EXCEL Need help
|
|||
|---|---|---|---|
|
#18+
KL (XL)Думаю, что алгоритм сравнения предельно быстрый. Проблема в необходимости создания промежуточного массива результатов сравнений для последующего поиска с пом. ПОИСКПОЗ() и, если честно, я пока не вижу возможности ускорить эту операцию :( Я тут подумал, надо перевернуть массив и искать первое значение, которое меньше или больше искомого. Типа так: =ПОИСКПОЗ(0;0/(G1:G4000>u1);0)} Имхо должно быть быстрее... Завтра буду пробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 21:22 |
|
||
|
EXCEL Need help
|
|||
|---|---|---|---|
|
#18+
KL (XL)sigizmind, Сколько в результате получится уникальных фраз не столь важно, важнее сколько данных придется перелопатить и тут уж точно не выйдешь пока не пройдешь все 30.000 строк. Проверено - будет ну ооооооооооочень медленно. Если очень хочется, попробуйте вариант во вложении (только не сразу для 30.000, а сначала скажем для 5.000). Серьезней сводной ничего представить не могу. Дело в том, что уникальные фразы перемешаны примерно равномерно, т.е. все встретятся с большой вероятностью в первых же 100 строках. Ладно, буду пробовать на днях, это не сильно к спеху. Вот с первой задачей надо найти оптимальный алгоритм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 21:31 |
|
||
|
EXCEL Need help
|
|||
|---|---|---|---|
|
#18+
sigizmindKL (XL)Думаю, что алгоритм сравнения предельно быстрый. Проблема в необходимости создания промежуточного массива результатов сравнений для последующего поиска с пом. ПОИСКПОЗ() и, если честно, я пока не вижу возможности ускорить эту операцию :( Я тут подумал, надо перевернуть массив и искать первое значение, которое меньше или больше искомого. Типа так: =ПОИСКПОЗ(0;0/(G1:G4000>u1);0)} Имхо должно быть быстрее... Завтра буду пробовать. Думаю, быстрее наверняка не будет с точным поиском, т.е. с 3-м параметром 0. При приблизительном поиске (бинарном) максимальное кол-во сравнений в 40.000 строк - 16, при точном поиске и удаленности искомого в 400 строк будет 400 сравнений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 21:35 |
|
||
|
EXCEL Need help
|
|||
|---|---|---|---|
|
#18+
И вообще, я уже упоминал о том, что главный расход ресурсов происходит не по вине ПОИСКПОЗ, а вот тут 0/(G1:G4000>u1). Здесь 80.000 операций (для сравнения ПОИСКПОЗ с опущенным 3-м параметрои производит от 1 до 16). Поскольку диапазон нарастающий и кол-во ячеек колеблется между 1 и 40.000, то среднее кол-во операций на ячейку: 40.000. Теперь умножим 40.000 операций на 80.000 ячеек с формулой (40.000 для мин. + 40.000 для макс.) и получим весьма круглое число операций: 3,200,000,000. Вот, где нужно было бы искать оптимизацию, но увы - с формулами цикл оборвать нельзя (только с функциями поиска). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 21:47 |
|
||
|
EXCEL Need help
|
|||
|---|---|---|---|
|
#18+
KL (XL)И вообще, я уже упоминал о том, что главный расход ресурсов происходит не по вине ПОИСКПОЗ, а вот тут 0/(G1:G4000>u1). Здесь 80.000 операций (для сравнения ПОИСКПОЗ с опущенным 3-м параметрои производит от 1 до 16). Поскольку диапазон нарастающий и кол-во ячеек колеблется между 1 и 40.000, то среднее кол-во операций на ячейку: 40.000. Теперь умножим 40.000 операций на 80.000 ячеек с формулой (40.000 для мин. + 40.000 для макс.) и получим весьма круглое число операций: 3,200,000,000. Вот, где нужно было бы искать оптимизацию, но увы - с формулами цикл оборвать нельзя (только с функциями поиска). Да уж, наверное тогда только обрезать данные для поиска (почти все искомые значения лежат от 1 до 200 строки от той , для которой ищем). Ограничить поиск с 40000 до 200-300 скажем и сделать второй столбец для значений где ошибка (не найдено значение в пределах 200-300строк делать полный поиск в 40000 строк). Как такой вариант? (не найденые в пределах 200-300 строк будет менее 1%). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 22:03 |
|
||
|
EXCEL Need help
|
|||
|---|---|---|---|
|
#18+
Да, экономия будет серьезная. См. вложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 22:22 |
|
||
|
EXCEL Need help
|
|||
|---|---|---|---|
|
#18+
А вот и вложение :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 22:26 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=37627868&tid=2176092]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
146ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 275ms |
| total: | 502ms |

| 0 / 0 |
