доброе утро. вопрос такой -- пусть имеется массив некоторых данных. требуется пробежаться по нему и на некоторых шагах при попадании текущей считанной комбинации под определенное правило выполнить нек. действия. мое непонимание в том, что я не знаю, каким образом можно "выкусить" из реализованного кода проверку на кажд. шаге на предмет того, что мы не вылетели за размер массива. суть моей задачи сводится к задаче некоего парсера, но вот не ясно мне, каким образом можно минимизировать число проверок на вылет за пределы входных данных. в инете что-то читал про добавление "терминального" символа в конец входных данных, и про дальнейшее его "подверстывание". мне не ясно, как это может мне помочь, т.к. проверка по прежнему остается. будет что-то типа: "if (curSymbol() == MAGIC_TERMINAL_SYMBOL) {printf("finished!"); exit()}". но выходит что терь эта проверка по сто раз будет чекаться при кажд шаге, а это не выход. есть соображения? спасибо.
varnie 1. Зачем выкидывать это что так сильно мешает? 2. можно минимизировать воздействия мы просто делаем цикл от 1 до length(массив).
varnie Если у тебя проверяюся элементы с i по i+k, то ты можешь проверить что i<N-k, и спокойно обрабатывать эти элементы не проверяя на каждом из них. Или можно приписать k элементов к концу массива и присвоить им такие значения, чтобы алгоритм не стал их обрабатывать.
Pavia 1. нет, не мешает, но что-то мне подсказывает, что вызовы этой проверки на середине массива избыточны и ее хочется как-то устранить 2. у меня рекурсивный нисходящий парсер, а потому невозможно тупо ограничить весь его 'забег' циклом от 1 до length(массив). т.е. я задаю точку старта, допустим, ф-цию entry();, далее в ней осуществляется пробег парсером по statement-block(); который выливается в statement-assign() || statement-if() || итд. думаю, суть передал.
varnie Если у тебя ровно один проход по массиву то ничего страшнего, избыточности нет. А если ты читаешь по несколько раз одни и тежи данные или просто проходишься по ним несколько раз, то есть избыточность. И нужно переделывать код. Далее совет читать про автоматы.
Pavia да, ровно один проход, с проверкой на не вылет за его пределы на каждом шаге прохода... про автоматы - у меня, собственно, как КА все и реализовано.
varnie Если это возможно, то дописать в конец массива "некоторые данные", которые будут удовлетворять "определенному правилу". В этом случае можно будет делать проверку на конец массива не на каждом шаге, а только при нахождении искомой комбинации