Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
bogdan_z
3 / 3 / 1
Регистрация: 18.09.2014
Сообщений: 249
1

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

01.07.2015, 14:38. Просмотров 503. Ответов 15
Метки нет (Все метки)

Добрый день, подскажите пожалуйста как создать n векторов или массивов, если изначально не известно сколько их будет?

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

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

Найти пару векторов из заданного набора имеющую минимальное скалярное произведение
Даны p различных векторов одинаковой размерности N: a^((1))={〖a^((1))〗_n }= , ...

ОпенМП расспаралелить скалярное произведение двух n-мерных векторов (массивов)
Существует следующий код int main() { setlocale(LC_ALL, "Russian"); ...

Скалярное произведение векторов
Здравствуйте! Помогите пожалуйста найти ошибки #include <iostream> using...

Скалярное произведение векторов
Объясните, пожалуйста, значение вот этой строки: int scalar(int V1, int V2,...

Найти скалярное произведение векторов
Помогите пожалуйста, у самой никак не получается, надо написать программу на...

15
Sallat
2 / 2 / 1
Регистрация: 31.05.2015
Сообщений: 10
01.07.2015, 14:46 2
Цитата Сообщение от bogdan_z Посмотреть сообщение
подскажите пожалуйста как создать n векторов или массивов, если изначально не известно сколько их будет
Используй динамический массив.
0
zss
Модератор
Эксперт С++
7470 / 6843 / 4320
Регистрация: 18.12.2011
Сообщений: 18,103
Завершенные тесты: 1
01.07.2015, 14:56 3
Образцы (шаблоны) программ для типовых задач
0
AlexVRud
480 / 192 / 72
Регистрация: 04.07.2014
Сообщений: 544
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);
0
bogdan_z
3 / 3 / 1
Регистрация: 18.09.2014
Сообщений: 249
01.07.2015, 17:41  [ТС] 5
AlexVRud, а как мне сделать чтобы прогрмма генерировала n-ое количество векторов?
0
zss
Модератор
Эксперт С++
7470 / 6843 / 4320
Регистрация: 18.12.2011
Сообщений: 18,103
Завершенные тесты: 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; // присваиваем СЧ
}
//
Еще раз посмотрите
Образцы (шаблоны) программ для типовых задач
0
AlexVRud
480 / 192 / 72
Регистрация: 04.07.2014
Сообщений: 544
01.07.2015, 18:00 7
bogdan_z, По примеру выше n раз заполнить v и вызвать M.push_back(v)

Добавлено через 14 минут
Для генерации используем uniform_real_distribution если компилятор поддерживает С++11, иначе старый добрый (но уже не рекомендуемый) rand
0
bogdan_z
3 / 3 / 1
Регистрация: 18.09.2014
Сообщений: 249
01.07.2015, 18:23  [ТС] 8
zss, у меня будет двухменый массив, а каждая строчка массива это типо одномерный вектор??
я правильно понял?
0
zss
Модератор
Эксперт С++
7470 / 6843 / 4320
Регистрация: 18.12.2011
Сообщений: 18,103
Завершенные тесты: 1
01.07.2015, 18:43 9
Именно так
0
bogdan_z
3 / 3 / 1
Регистрация: 18.09.2014
Сообщений: 249
02.07.2015, 21:34  [ТС] 10
AlexVRud, как перемножить вектора не подскажете,очень уж трудный там алгоритм
0
AlexVRud
480 / 192 / 72
Регистрация: 04.07.2014
Сообщений: 544
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;
0
bogdan_z
3 / 3 / 1
Регистрация: 18.09.2014
Сообщений: 249
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, вы может не совсем правильно меня поняли, мне нужно перемножить множество векторов,чтобы выполнялась проверка чтобы не перемножались уже те вектора которые были перемножены
0
Mr.X
Эксперт С++
3183 / 1710 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
02.07.2015, 23:36 13
Цитата Сообщение от bogdan_z Посмотреть сообщение
как перемножить вектора не подскажете,очень уж трудный там алгоритм
std::inner_product
0
bogdan_z
3 / 3 / 1
Регистрация: 18.09.2014
Сообщений: 249
02.07.2015, 23:38  [ТС] 14
Mr.X, по подробнее если можно
0
Mr.X
Эксперт С++
3183 / 1710 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
02.07.2015, 23:49 15
Цитата Сообщение от bogdan_z Посмотреть сообщение
по подробнее если можно
Вводите в Яндекс "std::inn" и переходите по первой же ссылке.
0
bogdan_z
3 / 3 / 1
Регистрация: 18.09.2014
Сообщений: 249
02.07.2015, 23:56  [ТС] 16
AlexVRud, проблема перемножить здоровую кучу векторов и выбрать оттуда ту пару у которой произведение минимально

Добавлено через 5 минут
Mr.X, проблема перемножить здоровую кучу векторов и выбрать оттуда ту пару у которой произведение минимально
0
02.07.2015, 23:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2015, 23:56

Найти скалярное произведение векторов
Даны два вектора x, y есть Rn. Найти скалярное произведение векторов.

[Геометрия]Скалярное произведение векторов
Добрый день. Есть вот такая задача: Я написал программу, но не уверен...

Найти скалярное произведение векторов
нужно написать две программы 1) нахождение скалярного произведения векторов ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru