Да без проблем.
Пошагово. Начинаем с пустого кэша.
Переход на строку 100. Ячейка кэша пустая. Ищем строку, адрес заносим в ячейку кэша, соответствующую строке 100.
Переход на строку 100. Ячейка кэша содержит адрес строки 100, проверяем номер - всё ок.
Переход на строку 321. Ячейка кэша пустая. Ищем строку, находим строку 330, адрес заносим в ячейку кэша, соответствующую строке 321.
Переход на строку 321. Ячейка кэша содержит адрес строки 330, проверяем номер - не совпадает. Ищем строку, находим строку 330, адрес заносим в ячейку кэша, соответствующую строке 321.
То есть всё зашибись, просто при переходе на несуществующую строку работать будет "с обычной скоростью".
Чтобы не засорять кэш можно не записывать в него адрес найденной строки, если её номер не совпадает с требуемым.
Усложняем алгоритм...
1. Вычислить номер ячейки кэша, прочитать из кэша адрес.
2. Если номер строки по этому адресу меньше, а номер следующей строки больше или равен требуемому - берём следующую.
3. Иначе - ищем строку с самого начала, но в кэш пишем адрес предыдущей. Для первой строки ничего не пишем.
Пошагово. Начинаем с пустого кэша.
Переход на строку 100. Ячейка кэша пустая. Ищем строку, адрес предыдущей (90) заносим в ячейку кэша, соответствующую строке 100.
Переход на строку 100. Ячейка кэша содержит адрес строки 90, номер меньше, следующий равен - берём следующую.
Переход на строку 321. Ячейка кэша пустая. Ищем строку, находим строку 330, адрес предыдущей (320) заносим в ячейку кэша, соответствующую строке 321.
Переход на строку 321. Ячейка кэша содержит адрес строки 320, номер меньше, следующий больше - берём следующую.
...
Переход на строку 1234. Ячейка кэша содержит адрес строки 2000, номер больше - ищем с начала, пишем в кэш предыдущую.
Переход на строку 2345. Ячейка кэша содержит адрес строки 500, номер меньше, номер следующей тоже меньше - ищем с начала, пишем в кэш предыдущую.
Вроде ничего не забыл.
- - - Добавлено - - -
Пофиг. Потому что в итоге, даже если N1 и N2 - выражения, всё в итоге сведётся к номеру строки, который будет обработан кэшем.
Интересно, а как происходит переход в for ... next? По номеру строки или по адресу строки?





Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
