1

Тема: #123 mipt

Кто-нибудь, сдавший эту задачу может сказать, какой размер стека надо установить, чтобы избежать рантайм еррора?
Я написал там оффлайн тарьяна в чистом виде и постоянно получаю  рантайм на 51. подозреваю на стек, но его увеличение до 16 и 25 мб не помогло. размеры массивов тоже проверил. Может быть такое, что при вставке числа в лист(я граф храню как массив листов, а не векторов, потому то пробежка по элементам быстрее вроде - как-то раз замена вектора листом спасла - но сейчас речь не об этом=) ), выделяется больше памяти чем надо и в итоге прога юзает слишком много памяти?

2

Re: #123 mipt

Блин, сдал, но как то тупо - просто заменил массив листов на массив векторов - а какая разница? может кто-нибудь объяснить? или пуш бак по-разному для них работает?

3

Re: #123 mipt

Лист быстрее только при вставке/удалении в начало/середину. В остальном он и медленнее, и больше памяти выделяет (потому что каждый элемент - отдельно выделяемая структура, в которой приходится хранить указатель на следующий элемент в списке, отсюда тормоза и при добавлении (куча выделений памяти), и при проходе (скачки по памяти туда-сюда происходят, вместо линейного упорядоченного просмотра)).

4

Re: #123 mipt

Хотя непонятно, как это может быть связано с рантаймами - вы же не локально их внутри рекурсивной функции выделяли? Если использовали итераторы, и при этом меняли списки - неаккуратная работа с итераторами может привести к рантайму.

5

Re: #123 mipt

e-maxx пишет:

Хотя непонятно, как это может быть связано с рантаймами - вы же не локально их внутри рекурсивной функции выделяли? Если использовали итераторы, и при этом меняли списки - неаккуратная работа с итераторами может привести к рантайму.

Нет, внутри рекурсивной функции ничего не выделял, только пробегался по элементам. Списки заполнил один раз - в саморм начале программы. Ну что ж, буду иметь в виду, что лист - шштука непредсказуемая и лучше использовать вектор, если возможно:)