Как сравнить два вектора
Перейти к содержимому

Как сравнить два вектора

  • автор:

Равные вектора

Определение. Вектора a и b называются равными, если они имеют одинаковую длину, лежат на параллельных прямых или на одной прямой, и направлены в одном направлении. (рис. 1).

То есть, два вектора равны, если они коллинеарные, сонаправленые и имеют равные длины:

a = b , если a ↑↑ b и | a | = | b |.

Условие равенства векторов. Вектора равны, если их координаты равны.

Равные вектора
рис. 1

Примеры задач на равенство векторов

Примеры плоских задач на равенство векторов

Пример 1. Определить какие из векторов равны a = <1; 2>, b = <1; 2>, c = .

a = b — так как их координаты равны,
a ≠ c — так как их координаты не равны,
b ≠ c — так как их координаты не равны.

Пример 2. При каком значении параметра n вектора a = <1; 8;>и b = <1; 2 n >равны.

Проверим равенство компонентов векторов
ax = bx = 1
ay = by => 8 = 2 n => n = 8/2 = 4

Ответ: при n = 4 вектора a и b равны.

Примеры пространственных задач на равенство векторов

Пример 3. Определить какие из векторов равны a = <1; 2; 4>, b = <1; 2; 2>, c = <1; 2; 4>.

a = c — так как их координаты равны,
a ≠ b — так как их координаты не равны,
b ≠ c — так как их координаты не равны.

Пример 4. При каком значении параметра n вектора a = <1; 2; 4>и b = <1; 2; 2 n >равны.

Проверим равенство компонентов векторов
ax = bx = 1
ay = by = 2
az = bz => 4 = 2 n => n = 4/2 = 2

Ответ: при n = 2 вектора a и b равны.

Любые нецензурные комментарии будут удалены, а их авторы занесены в черный список!

Присоединяйтесь
© 2011-2024 Довжик Михаил
Копирование материалов запрещено.

Добро пожаловать на OnlineMSchool.
Меня зовут Довжик Михаил Викторович. Я владелец и автор этого сайта, мною написан весь теоретический материал, а также разработаны онлайн упражнения и калькуляторы, которыми Вы можете воспользоваться для изучения математики.

Если Вы хотите связаться со мной, имеете вопросы, предложения или хотите помочь развивать сайт OnlineMSchool пишите мне support@onlinemschool.com

Как сравнить два вектора массивов?

Имеется vector , в нем находятся несколько сотен тысяч массивов. Массивы int* имеют одинаковый размер (пример: ). Необходимо подсчитать количество одинаковых массивов. На ум приходит, что то такое:

for (int i = 0; i < vectorSize; i++) for (int j = i + 1; j < vectorSize; j++) for (int k = 0; k < vectorSize; k++) if (vector[i][k] == vector[j][k]) n++; 

Но так к массиву внутри вектора нельзя обращаться и считать будет долго.
Отслеживать
3,998 5 5 золотых знаков 21 21 серебряный знак 35 35 бронзовых знаков
задан 18 июл 2014 в 10:58
43 1 1 золотой знак 1 1 серебряный знак 7 7 бронзовых знаков

Я бы сделал вектор хэш-кодов массивов (это 2 вложенных цикла) (а реально, вектор таких структур struct a_signature < uint64_t hash; int *array; >; ), отсортировал его по hash и уже среди одинаковых hash проводил поэлементное сравнение. Кстати, непосредственно сравнение 2-х массивов можно делать функцией memcmp() (см. man 3 memcmp)

18 июл 2014 в 11:49
А почему странный гибрид из C и C++? Почему внешний у вас vector , а внутренний int* ?
18 июл 2014 в 12:47
Получаю массивы int* из функции, которую не я писал и редактировать нет возможности =(
18 июл 2014 в 12:49

@PastoriXx: структура практически ничем не отличается от класса (просто обычно в неё не кладут логику, а пользуются внешними функциями). Для сортировки можно воспользоваться вариантом std::sort с кастомной функцией сравнения (примените лямбду, если компилятор позволяет; примеры по ссылке).

18 июл 2014 в 12:57

непонятно: нужно сравнить два вектора vector или подсчитать количество одинаковых массивов в одном векторе?

Как сравнить два вектора? Разной размерности?

Прошу помочь с поиском метода сравнения.
Имеется
1) набор показаний некоторого датчика на длительном интервале времени, Показания снимаются поминутно.
2) Некий шаблон показаний, сообщающий о критичной ситуации, представляющий собой набор значений датчика за 5 минут, т.е. (val1,val2,val3,val4,val5)

Критичная ситуация - когда показания датчика за последние 5 минут совпадают с шаблоном с некоторой погрешностью. Для сравнения данных за последние 5 минут с шаблоном использую метод наименьших квадратов (МНК).

Однако ситуация аналогичная шаблону может воспроизвестись и на 4 минутах и на 6и - когда одно из шаблонных значений val будет короче\длительнее по времени, например.

Вопрос - каким образом можно сравнить вектора размерности N и N-1 или N и N-2 по аналогии с МНК?

  • Вопрос задан более трёх лет назад
  • 2279 просмотров

Как сравнить 2 вектора и удалить элементы из второго?

tsarevfs

Эти решения будут пробегать по всем элементам из newVec для каждого элемента в myVec. Уже при размере в 1000 элементов для каждого, надо будет сделать 1 000 000 сравнений. ВЫход -- использовать set или unordered_set:

namespace std < //для unordered_set template<>struct hash < std::size_t operator()(const A &a) < return std::hash()(a.id); > > //для std::set template<> struct less  < bool operator()(const A &lha, const A &rha) < return lha.id < rha.id; >> > std::unordered_set newSet; //std::set newSet newSet.insert(a); newSet.insert(b); newSet.insert(d); std::erase( std::remove_if(myVec.begin(), myVec.end(), [&newSet](const A &a) < return newSet.find(a) == newSet.end(); >), myVec.end());

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *