(必经点)局部优化达到全局最优的最短路径算法探讨

news2024/12/23 22:07:11

首先,存在无序的点集D=\left \{ p_{1},p_{2},p_{3},...,p_{n} \right \},n\epsilon \mathbb{N}^{+}.

D[0]=p_{1},D[1]=p_{2},...,D[n-1]=p_{n}.

再记初始路径为C=s{D[0],D[1],D[2],...,D[n]}e.

于是,我们称以下为一次变换T

if |C[i]-C[i+1]|+|C[i+2]-C[i+3]| > |C[i]-C[i+2]|+|C[i+1]-C[i+3]|
{
    swap(C[i+1],C[i+2]);
}

 需要注意的是C[0]=s,C[C.size-1]=e.

最直观的就是如下的变换:

我们对C上的每一点,依次进行如上的变换,不断的循环,直至不再需要变换,此时的路径C就是最短路径。因为每次变换后,C上的点只是两个点之间交换了顺序,而其他的点不变,同时,变换后的路径,又能保证比变换前的短,所以我们可以断定此种方法是收敛的。而且最终会达到极小值,而此时,再对C上的每一次做T,都不会进入到上述的if里面。

现在,我们来初步的看看此种方式的最大复杂度。

我们将初始路径作个变形:

 若我们从se,依次作T变换。最开始,若每次T都会swap一次,则在链上,每次T变换后,p_{1}都会顺时针移动一位。我们称C.size-3T为一次循环。每次循环后,必定会有一个点挪到末端。若假设其中有C.size-3个点需要做变换,那么就会有C.size-3次循环,每次循环有C.size-3次变换。这是最大的计算复杂度。

另外,我们需要关注到的是,每经过一次循环后,每个路径上,都会将离的近的点拉进,离得远的点推远。靠近s端的点会变得靠s端,靠近e端的会变得靠e端。

基于这样的一个现象,如果我们在初始化路径的时候,能自动的,将互相靠近的点相连接,那么,将会大大缩短循环的次数。

在这里提出一种方式,我们将坐标平面沿X轴,以d的间隔进行分割,来进行初始化路径。具体的伪代码形式:

点集:D={P1,P2,P3,...,Pn}
二维数组:A[][];

int d=10;//栅格间距
int max_i=0;//最大的区间数
for i=0;i<D.size();i++
{
    A[D[i].x/d].push_back(D[i]);
    if D[i].x/d > max_i
        max_i=D[i].x/d;
}

设路径序列C={}

则我们生成路径
for n=0;n<max_i;n++
{
    for t=0;t<A[n].size;t++
    {
        C.push_back(A[n][t]);
    }
}

C.insert(s) at 0;
C.push_back(e);

最后,我们开始逐项局部优化
bool is_changed=false;
Optimize:
    for i=0;i<C.size-3;i++
    {
        if |C[i]-C[i+1]|+|C[i+2]-C[i+3]| > |C[i]-C[i+2]|+|C[i+1]-C[i+3]|
        {
            exchange(C[i+1],C[i+2]);
            is_changed=true;
        }
    }

if is_changed
    go back to Optimize;
else
{
    if |C[0]-C[1]|+|C[C.size-1]-C[C.size-2]| > |C[0]-C[C.size-2]|+|C[C.size-1]-C[0]|
        exchange(C[0],C[C.size-1]);
}

 此算法只是初步设想,具体的算法运行效率,后续会做试验进行验证。有什么不对之处,望指教出来,谢谢!

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读【3】Efficient Estimation of Word Representations in Vector Space

1.概述 1.1 论文相关 题目&#xff1a;基向量空间中词表示的有效估计&#xff08;Efficient Estimation of Word Representations in Vector Space&#xff09;发表时间&#xff1a;出版&#xff1a;原文地址&#xff1a;代码 1.2 动机 2.对比模型 2.1 NNLM&#xff08;前…

表单控件绑定:checkbox表单绑定v-model

表单checkbox&#xff0c;绑定的v-model是一个布尔值&#xff0c;要么为true&#xff0c;要么为false&#xff1b;因为它是勾选&#xff0c;或者不勾选的形式&#xff1b;为true了就是勾选&#xff0c;为false了就是不勾选&#xff1b; 代码&#xff1a; <body><div …

Vue-cli3 通过配置 public 目录下的 config.js 和config.json 实现一次编译,修改生效

文章目录1.背景2.配置步骤3.小结1.背景 最近实施部门&#xff0c;有个需求就是研发人员通过vue 写完代码&#xff0c;yarn build 编译完成代码后&#xff0c;移交实施&#xff0c;通过修改public 文件夹下的 config 文件来实现修改&#xff0c;请求后台的 requestUrl 和 titil…

day10 分布式缓存

单机的 Redis 存在以下四大问题&#xff1a; 1、Redis持久化 Redis有两种持久化方案&#xff1a; RDB 持久化AOF 持久化 1.1、RDB 持久化 RDB 全称 Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xff0c;也被叫做 Redis 数据快照。简单来说就是把…

《500强高管谈VE》-面向STAKEHOLDERS东方企业的VM

文章出处&#xff1a;日本VE协会杂志文章翻译&#xff1a;泰泽项目部 关注泰泽&#xff1a;实现高利润企业 《500强高管谈VE》-面向STAKEHOLDERS东方企业的VM 作者&#xff1a;常务董事八木隆 本公司的日高工厂和丰浦工厂两个事业所获得了迈尔斯奖。这些都是支持企业活动的V…

无代码开发平台选型指南

一、如何选购SaaS SaaS评测网的面世&#xff0c;也原因在于有感于选型难于&#xff0c;期望可以提供更多有用的信息协助大家找出更可信赖与最合适的产品。简而言之授之以鱼、比不上授之以渔&#xff0c;接下来的系列产品该文&#xff0c;则是撷取选型的方法及避坑实战经验。 …

【大数据处理技术】第二篇 大数据存储与管理(持续更新)

文章目录第3章 分布式文件系统HDFS3.1 分布式文件系统3.1.1 计算机集群结构3.1.2 分布式文件系统的结构3.1.3 分布式文件系统的设计需求3.2 HDFS3.2.1 HDFS 简介及相关概念3.2.2 HDFS 体系结构3.2.3 HDFS 存储原理3.2.4 HDFS 数据读写过程3.2.5 HDFS 编程实践第4章 分布式数据库…

独立产品灵感周刊 DecoHack #038 - 纽约市 90 年代的街景长什么样

本周刊记录有趣好玩的独立产品设计开发相关内容&#xff0c;每周发布&#xff0c;往期内容同样精彩&#xff0c;感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到&#xff0c;建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。产品推荐 1. 1940s.nyc - 这个网站可以看到…

Python版本机访问GEE,CoLab配置

一、本机Jupyter notebook访问GEE 首先感谢知乎这两篇文章提供的解决思路&#xff1a; Python版GEE学习笔记&#xff08;一&#xff09;-环境配置 - 知乎 GEE之Python学习——前期准备工作 - 知乎 前期尝试解决&#xff1a; 1. Anaconda 安装&#xff0c;重新创建虚拟环境…

2021年度聚合支付评级如何?

截至2022年11月15日&#xff0c;完成收单外包服务备案机构为15041家&#xff0c;其中含聚合支付类型的机构为481家。 2022年11月15日&#xff0c;中国支付清算协会正式发布了2021年度收单外包服务机构评级等级消息。显示共有包括银行和非银行支付机构在内的143家收单机构对958…

element-plus table组件单击行切换选中状态、点击高亮行、设置shift或ctrl连续多选和连续取消多选(支持多段选择)

演示效果 需求逻辑&#xff1a; 单击行切换选中状态不按住shift或者ctrl键点击一行&#xff0c;设置该行高亮&#xff0c;该行将作为起始行连续多选&#xff1a;高亮行作为起始位置&#xff0c;按住shift或者ctrl键后选中行作为结束位置&#xff0c;结束位置未勾选则连续多选…

第2-3-8章 分片上传和分片合并的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

文章目录5.10 接口开发-分片上传5.10.1 分片上传介绍5.10.2 前端分片上传插件webuploader5.10.3 后端代码实现5.10.3.1 接口文档5.10.3.2 代码开发5.10.3.3 接口测试5.11 接口开发-分片合并5.11.1 FileChunkStrategy5.11.2 AbstractFileChunkStrategy5.11.3 LocalChunkServiceI…

OpenFeign源码1-环境搭建及核心类说明

0. 环境 nacos版本&#xff1a;1.4.1Spring Cloud : Hoxton.SR9&#xff08;没用2020.0.2版本后面说明&#xff09;Spring Boot &#xff1a;2.4.4Spring Cloud alibaba: 2.2.5.RELEASESpring Cloud openFeign 2.2.2.RELEASE 测试代码&#xff1a;github.com/hsfxuebao/s… 20…

WebDAV之葫芦儿·派盘+PassStore

PassStore 支持webdav方式连接葫芦儿派盘。 大家常用的qq,手机微信,新浪微博等。假如各个网址都设成同样的帐号和登陆密码,一旦某一帐户泄漏了,别的平台上的账户密码都有被撞库攻击的风险。在不一样的站点设定不一样的高韧性登陆密码才算是最安全可靠的确保,殊不知这般繁…

c++调用tf.keras的模型

​ 环境&#xff1a; ubuntu 20.04 python 3.8 tensorflow-gpu 2.4.0 显卡 nvidia rtx A6000 驱动 495.29.05 cuda 11.5 cudnn 8.3.0 tensorRT 8.4 1.将keras保存的h5模型转成darknet的weight&#xff0c;然后用opencv加载 cv::dnn::Net net cv::dnn::readNetFromDar…

链表中快慢指针的应用

目录 一、链表的中间结点 二、回文链表 三、链表中倒数第K个结点 四、删除链表的倒数第n个结点 一、链表的中间结点 给定一个头结点为 head 的非空单链表&#xff0c;返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 先设置两个low和fast都指…

【MySQL】测试题03

文章目录1、创建数据库2、使用数据库3、创建数据表【3.1】创建学生信息表Student【3.2】创建课程信息表Course【3.3】创建教师信息表Teacher【3.4】创建成绩信息表Score4、添加数据【4.1】向学生student表添加数据【4.2】向课程course表添加数据【4.3】向教师信息teacher表添加…

【动手学深度学习】softmax回归的从零开始实现(PyTorch版本)(含源代码)

目录&#xff1a;softmax回归的从零开始实现一、理论基础1.1 前言1.2 分类问题1.3 网络架构1.4 全连接层的参数开销1.5 softmax运算1.6 小批量样本的矢量化1.7 损失函数1.7.1 对数似然1.7.2 softmax及其导数1.7.3 交叉熵损失1.8 信息论基础1.8.1 熵1.8.2 信息量1.8.3 重新审视交…

19 02-检索满足客户端定义的状态掩码的DTC列表

诊断协议那些事儿 诊断协议那些事儿专栏系列文章&#xff0c;19服务作为UDS中子功能最多的服务&#xff0c;一共有28种子功能&#xff0c;本文将介绍常用的19 02服务&#xff1a;根据状态掩码读取DTC列表。 关联文章&#xff1a; 19服务List 19 01-通过状态掩码读取DTC数目 …

详细教程。2022年滁州市明光市、来安县等各地区高新技术企业申报

安徽省大力鼓励企业申报高新技术企业&#xff0c;于高企申报也有很多奖补。滁州市企业申报奖补政策发布&#xff0c;企业可以根据自身情况申请奖补&#xff0c;奖补金额为10万元至30万元不等&#xff0c;明光市&#xff0c;凤阳县等各地区奖补申请可以通过市级机关办理。 下面小…