向量的内积例题_python求向量的模

向量的内积例题_python求向量的模有两个向量v1=(x1,x2,…,xnv_1=(x_1,x_2,…,x_n和v2=(y1,y2,…,yn)v_2=(y_1,y_2,…,y_n),允许任意交换v1v_1和v2v_2各自的分量的顺序,计算v1v_1和v2v_2的内积x1y1x2y2…xnynx_1y_1x_2y_2…x_ny_n的最小值样例:输入:n=3v1=(1,3,−5)v_1

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

有两个向量 v1=(x1,x2,...,xn) v2=(y1,y2,...,yn) ,允许任意交换 v1 v2 各自的分量的顺序,计算 v1 v2 的内积 x1y1+x2y2+...+xnyn 的最小值
样例:
输入:
n=3
v1=(1,3,5)
v2=(2,4,1)
输出:
-25
( 令 v1=(5,1,3) v2=(4,1,2) )

首先我第一感觉就是,要保证最小,
1.如果在有正有负的情况下,那么有最大的正数乘以最小的负数,
2.如果都是正数,用最大的正数乘以最小的正数,
3.如果都是负数,用最大的负数数乘以最小的负数,
其实以上的3个条件就是两个向量分别按照升序和降序排列,得到的内积最小
按照上面的方法,不断的从 v1 v2 取出配对的量,最后得出的结果可能是最优的结果。

举个样例试一试
v1=(x1,x2) , v2=(y1,y2)
如果 v1 已经是按照升序排列,即 x1x2 ,比较 x1×y1+x2×y2 x1×y2+x2×y1 的大小
(x1×y1+x2×y2)(x1×y2+x2×y1)
=(x1(y1y2)+x2(y2y1))
=(x1x2)(y1y2)
可以看出,如果 y1<y2 ,即 x1×y1+x2×y2>x1×y2+x2×y1
意味着,我们可以通过交换 y1y2 的位置得到一个更小的向量内积值
延伸到 n>2
我们也同样把 V1 按照升序排列,对于 v2 如果存在 i<j,yi<yj 我们可以通过交换 yiyj 的位置,得到一个更小的例子
x1y1+...+xiyi+...+xjyj+...+xnyn>x1y1+...+xiyj+...+xjyi+...+xnyn

#include <iostream>
#include <algorithm>

using namespace std;
int compare(int a,int b)
{
    return a>b;
}
int main()
{
    int n,i;
    cout<<"input n: ";
    cin>>n;
    cout<<endl;
    cout<<"input v1 :"<<endl;
    int *v1=new int[n];
    int *v2=new int[n];
    for(i=0;i<n;i++)
    {
        cin>>v1[i];
    }
    cout<<"input v2 :"<<endl;
    for(i=0;i<n;i++)
    {
        cin>>v2[i];
    }
    //v1 升序
    sort(v1,v1+n);
    //v2 降序
    sort(v2,v2+n,compare);
    int min=0;
    for(i=0;i<n;i++){
        min+=v1[i]*v2[i];
    }
    cout<<"minimum is :"<<min<<endl;
    delete [] v1;
    delete [] v2;
    return 0;
}
input n: 3

input v1 :
1 3 -5
input v1 :
-2 4 1 minimum is :-25
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189960.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java源程序文件的扩展名_使用Java语言编写的源程序保存时的文件扩展名是什么…

    java源程序文件的扩展名_使用Java语言编写的源程序保存时的文件扩展名是什么…展开全部使用Java语言编写的源程序保存时的文件扩展名为“.java”。经过编译之后会生成62616964757a686964616fe58685e5aeb931333436316366“.class”为后缀的文件。源代码(也称源程序)是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。计算机源程序的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,…

    2022年7月8日
    29
  • Java Web和Java后端开发的学习路线

    Java Web和Java后端开发的学习路线基础:比如计算机系统、算法、编译原理等等Web开发:主要是Web开发相关的内容,包括HTML/CSS/JS(前端页面)、Servlet/JSP(J2EE)以及Mysql(数据库)相关的知识。它们的学习顺序应该是从前到后,因此最先学习的应该是HTML/CSS/JS(前端页面),这部分内容你可以去上面的那个runoob网站上找。J2EE:你需要学习的是Servlet/JSP(J2EE)部分,…

    2022年7月8日
    25
  • html一个汉字空格占位_html表示空格的特殊符号

    html一个汉字空格占位_html表示空格的特殊符号&amp;#32;==普通的英文半角空格&amp;#160;==&amp;nbsp;==&amp;#xA0;==no-breakspace(普通的英文半角空格但不换行)&amp;#12288;==中文全角空格(一个中文宽度)&amp;#8194;==&amp;ensp;==en空格(半个中文宽度)&amp;#8195;==&amp;emsp;==em空格…

    2022年10月5日
    3
  • nmap命令的使用「建议收藏」

    nmap命令的使用「建议收藏」介绍portScan的方法介绍portScan就是一种通过检测对方服务器的开放端口,侦测对方服务器服务的方法。一般可分为主动式和被动式两种。主动式就是通过向对方服务器的特定端口发送数据包,根据应答来判断。以nmap为代表被动式,不主动发出数据包,而是在网络上长时侦听,分析网上的transaction,来分析,严格的来被动式不应该被称作是端口扫描。以nwatch为代表优缺点比较主动…

    2022年5月9日
    103
  • 遍历hashmap的三种方式_HashMap

    遍历hashmap的三种方式_HashMappublicstaticvoidmain(String[]args){Map<String,String>map=newHashMap();map.put(“aa”,”11″);map.put(“bb”,”22″);Set<String>set=map.keySet();Iteratoriter=set.iterator();while(iter.

    2025年7月9日
    4
  • js中判断数组中是否包含某元素的方法有哪些_js判断数组里面是否包含某个元素

    js中判断数组中是否包含某元素的方法有哪些_js判断数组里面是否包含某个元素方法一: arr.indexOf(某元素):未找到则返回-1。 实际用法:if(arr.indexOf(某元素)&gt;-1){//则包含该元素}1例:varfruits=["Banana","Orange","Apple","Mango"];vara=fruits.indexOf("Apple");//2//以上输出结果意味着"Apple"元

    2022年10月19日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号