Форум программистов, компьютерный форум CyberForum.ru

Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение - C++

Восстановить пароль Регистрация
 
bogdan_z
3 / 3 / 0
Регистрация: 18.09.2014
Сообщений: 242
01.07.2015, 14:38     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #1
Добрый день, подскажите пожалуйста как создать n векторов или массивов, если изначально не известно сколько их будет?

Вот условие задания:

Даны p различных векторов одинаковой размерности. Написать программу, которая находит ту пару векторов из заданного набора, которая обладает минимальным скалярным произведением.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2015, 14:38     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение
Посмотрите здесь:

сложение и вычитание векторов, скалярное произведение векторов, умножение на скаляр, сравнение векторов, вычисление длины вектора C++
скалярное произведение векторов C++
[Геометрия]Скалярное произведение векторов C++
C++ Найти скалярное произведение векторов
скалярное произведение двух векторов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sallat
2 / 2 / 0
Регистрация: 31.05.2015
Сообщений: 10
01.07.2015, 14:46     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #2
Цитата Сообщение от bogdan_z Посмотреть сообщение
подскажите пожалуйста как создать n векторов или массивов, если изначально не известно сколько их будет
Используй динамический массив.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
01.07.2015, 14:56     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #3
Образцы (шаблоны) программ для типовых задач
AlexVRud
413 / 142 / 36
Регистрация: 04.07.2014
Сообщений: 413
01.07.2015, 15:52     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #4
  • Если пишешь на С++, используй std::vector. Он более функционален и удобен.
  • У тебя по заданию длина векторов заранее не дана. Сказано только что она одинаковая.
  • Используй вектор от вектора (не забывая добавлять пробел между внешними < >):
    C++
    1
    
    std::vector< std::vector <double> > M;
  • Можно отдельно реализовать функцию скалярного произведения, но не забывая правильно передавать вектора как параметры:
    C++
    1
    2
    3
    4
    5
    
    double DotProduct(std::vector<double> &a, std::vector<double> &b) {
        /// ...
    }
    ...
        d = DotProduct(M[i], M[j]);
  • Используй разные сценарии инициализации векторов, в зависимости от известности его длины:
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    
      size_t N;
      // N = ... Длина векторов
      std::vector v(N);
      for(size_t i=0; i<N; ++i) {
        // v[i] = ...
      }
      //...
      M.push_back(v);
bogdan_z
3 / 3 / 0
Регистрация: 18.09.2014
Сообщений: 242
01.07.2015, 17:41  [ТС]     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #5
AlexVRud, а как мне сделать чтобы прогрмма генерировала n-ое количество векторов?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
01.07.2015, 17:45     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #6
Что-то невнимательно Вы смотрите предложенное (row - количество векторов, columns - длина каждого):
C++
1
2
3
4
5
6
7
8
9
10
11
12
//
// заполнение матрицы случайными числами из диапазона [0, 99] -----------
//
void FillRandomNumbers(int **matrix, const size_t rows, const size_t columns)
{
    srand((unsigned int)time(0)); // инициализируем ПГСЧ
 
    for (size_t row=0; row < rows; row++)
        for (size_t column=0; column < columns; column++)
            matrix[row][column] = rand() % 100; // присваиваем СЧ
}
//
Еще раз посмотрите
Образцы (шаблоны) программ для типовых задач
AlexVRud
413 / 142 / 36
Регистрация: 04.07.2014
Сообщений: 413
01.07.2015, 18:00     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #7
bogdan_z, По примеру выше n раз заполнить v и вызвать M.push_back(v)

Добавлено через 14 минут
Для генерации используем uniform_real_distribution если компилятор поддерживает С++11, иначе старый добрый (но уже не рекомендуемый) rand
bogdan_z
3 / 3 / 0
Регистрация: 18.09.2014
Сообщений: 242
01.07.2015, 18:23  [ТС]     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #8
zss, у меня будет двухменый массив, а каждая строчка массива это типо одномерный вектор??
я правильно понял?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
01.07.2015, 18:43     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #9
Именно так
bogdan_z
3 / 3 / 0
Регистрация: 18.09.2014
Сообщений: 242
02.07.2015, 21:34  [ТС]     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #10
AlexVRud, как перемножить вектора не подскажете,очень уж трудный там алгоритм
AlexVRud
413 / 142 / 36
Регистрация: 04.07.2014
Сообщений: 413
02.07.2015, 22:32     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #11
Пусть у тебя есть два вектора
http://www.cyberforum.ru/cgi-bin/latex.cgi?\vec{a}=(a_0, a_1, ..., a_{n-1}),\ \vec{b}=(b_0, b_1, ..., b_{n-1}).
В программе они могут быть представлены, например, так:
C++
1
2
std::vector<double> a;
std::vector<double> b;
Тогда математический http://www.cyberforum.ru/cgi-bin/latex.cgi?a_i эквивалентен a[i] в программе.
Тебе надо найти:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\langle \vec{a}, \vec{b} \rangle = a_0\cdot b_0 + a_1\cdot b_1 + ... + a_{n-1}\cdot b_{n-1}=\sum_{i=0}^{n-1}a_i\cdot b_i
Написать в программе
C++
1
dot_product = a[0]*b[0]+a[1]*b[1]+...+a[n-1]*b[n-1];
Ты не можешь. А вот http://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{i=0}^{n-1} можно записать через цикл. Что ты и должен сделать.
Прототип функции я писал выше.

З.Ы.: Но различай две реализации динамических массивов.
C++
1
2
double *xs;
std::vector<double> ys;
bogdan_z
3 / 3 / 0
Регистрация: 18.09.2014
Сообщений: 242
02.07.2015, 23:23  [ТС]     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #12
AlexVRud,
вот мой код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <ctime>
#include <vector>
#include <map>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    srand(time(0));
 
    int N, D;
 
    cout << "Введите количество векторов -> ";
    cin >> N;
 
    cout << "Введите размер векторов -> ";
    cin >> D;
 
    vector< vector <double> > M(N);
 
    for (int i = 0; i < N; i++)
        for (int j = 0; j < D; j++)
            M[i].push_back(rand() % 100 - 20);
 
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < D; j++)
        {
            cout.width(3);
            cout << M[i][j] << " ";
        }
        cout << endl;
    }
 
    map<int, int> mas;
 
    for (int i = 0; i < N; i++)
        for (int j = 0; j < D;j++)
            mas
 
    system("pause");
 
}
Добавлено через 10 минут
AlexVRud, вы может не совсем правильно меня поняли, мне нужно перемножить множество векторов,чтобы выполнялась проверка чтобы не перемножались уже те вектора которые были перемножены
Mr.X
Эксперт С++
 Аватар для Mr.X
2797 / 1573 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
02.07.2015, 23:36     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #13
Цитата Сообщение от bogdan_z Посмотреть сообщение
как перемножить вектора не подскажете,очень уж трудный там алгоритм
std::inner_product
bogdan_z
3 / 3 / 0
Регистрация: 18.09.2014
Сообщений: 242
02.07.2015, 23:38  [ТС]     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #14
Mr.X, по подробнее если можно
Mr.X
Эксперт С++
 Аватар для Mr.X
2797 / 1573 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
02.07.2015, 23:49     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #15
Цитата Сообщение от bogdan_z Посмотреть сообщение
по подробнее если можно
Вводите в Яндекс "std::inn" и переходите по первой же ссылке.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2015, 23:56     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение
Еще ссылки по теме:

C++ Скалярное произведение векторов
C++ ОпенМП расспаралелить скалярное произведение двух n-мерных векторов (массивов)
C++ Найти пару векторов из заданного набора имеющую минимальное скалярное произведение

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
bogdan_z
3 / 3 / 0
Регистрация: 18.09.2014
Сообщений: 242
02.07.2015, 23:56  [ТС]     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение #16
AlexVRud, проблема перемножить здоровую кучу векторов и выбрать оттуда ту пару у которой произведение минимально

Добавлено через 5 минут
Mr.X, проблема перемножить здоровую кучу векторов и выбрать оттуда ту пару у которой произведение минимально
Yandex
Объявления
02.07.2015, 23:56     Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение
Ответ Создать тему
Опции темы

Текущее время: 17:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru