Я хотел бы получить идеи для быстрого поиска максимальной разницы между двумя векторами , как если бы они были накоплены.Самый быстрый способ получить максимальную разницу между двумя векторами
Например, (пока не накопил)
vector<int> vec1 = {10, 30, 20, 40 };
vector<int> vec2 = {5, 10, 5, 8 };
наивный способ, чтобы получить результат, чтобы аккумулировать их первый в новые векторы так:
vector<int> accumulated_vec1 = {10, 10+30, 10+30+20, 10+30+20+40};
vector<int> accumulated_vec2 = {5, 5+10, 5+10+5, 5+10+5+8};
т.е.
accumulated_vec1 = {10,40,60,100};
accumulated_vec2 = {5,15,20,28};
Тогда результатом является максимум между abs(accumulated_vec1[i]-accumulated_vec2[i])
, а 0 < = i < = 3.
так result = 72
(когда я == 3)
быстрый способ может быть путем представления векторов на 1 число (даже 0.10302040) ... но я не могу найти его полезным: \ Подумайте, что у меня есть миллионы пар двух векторов vec1 и vec2, и я стараюсь избежать вычисления накопленных векторов для каждой пары. Извините, если это неясно, но если я найду решение, я отвечу на этот досадный вопрос.
Это кажется очень просто сделать ... (вы можете вычислить накопление на лету, без необходимости хранить его в другой вектор). Какие проблемы вы испытываете? – 6502
Извините, забыли сказать, что мне нужны накопленные векторы для других вычислений в других функциях. Я просто пытаюсь задуматься о том, чтобы держать их в других структурах, чем вектор. Может быть, иначе, как hexa \ number (каким-то образом). Просто подумайте, что у меня есть миллионы пар, подобных этим –
Ваш код довольно быстро уже , но убедитесь, что вы назовете '.reserve()' на своих накопленных векторах, чтобы избежать перераспределения, пока вы возвращаете его обратно (я предполагаю, что вы заполняете его внутри цикла в вашем фактическом коде). Если у вас есть много таких элементов, как вы только что сказали, это будет хорошей оптимизацией для вашего кода. – adam10603