向量的内积例题_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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java web注释_webservice命名空间

    java web注释_webservice命名空间此注示用来标明此java类为某个WebService的实现类或者标明此java接口定义了某个WebService的接口。@WebService有六个参数可以用来配置这个WebService的定义:endpointInterface:定义服务抽象WebService协定的服务端点接口的完整名称,如果注解通过endpointInterface属性引用了某个SEI,那么还必须使用@webservice注解来注解该SEI。name:默认的port名为”实现类名+Port”,binding名为”实现类

    2022年10月16日
  • postman使用教程1

    postman使用教程1  在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,拿到接口后肯定都得提前测试一下,这样的话就非常需要有一个比较给力的Http请求模拟工具,现在流行的这种工具也挺多的,像火狐浏览器插件-RESTClient,Chrome浏览器插件-Postman等等。这里主要介绍一下Postman。 一、Postman说明  Postman是一种网页调试与发送网页http请求的chrome插件…

  • 集赞神器!朋友圈集赞一键秒搞定!从此集赞随心所欲!

    集赞神器!朋友圈集赞一键秒搞定!从此集赞随心所欲!今天,刚开始不知道要分享什么内容,下午烦恼时,结果收到一好友“朋友圈帮忙点赞”的消息,瞬间拉黑删除的心都有了,但是呢又不能这样做,点赞也不是,不点赞也不是,强(自)大(恋)的我告诉自己冷静一下,换个角度想问题,灵感来了~不如,今天就分享一下朋友圈一键集赞的方法~从此集赞随心所欲!要是下次再有好友让你帮忙集赞的时候,你可以将本文章甩给他,相信他会感谢你的~千万不要甩给商家!说到朋…

  • ASP.NET MVC-api增删改查

    ASP.NET MVC-api增删改查使用ASP.NETMVC-api技术实现对数据库的增删改查创建mvcapi项目创建完毕后的目录添加模型类接着在models文件夹添加实体数据模型,引入EF数据库,具体方法参考我之前的EF文章。然后在models中添加两个类,用于反馈操作是否成功。error类publicclassError{///<summary>///错误返回对象<br/>///exp:<br/>

  • 嵌入式学习计划

    嵌入式学习计划从今天开始,我要正式的学习关于嵌入式。初步的计划是,选择一款嵌入式Linux系统进行学习,目前选用的FreeRTOS设备,通过查询博客,阅读源码,看书方式进行全面的了解。其次,还要选择一款嵌入式设备进行实战,鉴于目前手头刚好有一台STM32F107VCT6,就选择它了,而且STM32F10x系列的设备资料也比较齐全。对于嵌入式设备的学习路线,首先学习使用固件库进行编程,学习的内容包括uart,flash,gpio等相关的内容,同时辅之以数字电子基础书籍进行更深入的了解。再都了解了之后,将FreeRT

发表回复

您的电子邮箱地址不会被公开。

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