大数据量点集构建汉密尔顿路径算法分析

本文探讨了在处理大量POI数据时构建汉密尔顿路径的问题,由于其属于NP问题,提出了暴力枚举法。面对大数据量导致的内存问题,文章重点介绍了如何通过减少内存使用来优化算法,包括动态计算距离和使用OpenMP加速计算。这种方法牺牲了运行时间以降低空间复杂度,适用于处理大规模数据集。
摘要由CSDN通过智能技术生成

       博主在去年做利用Google的word2vec做深度学习的时候,需要将大量的POI数据点连接成汉密尔顿路径,并形成语料库进行进一步分析。何谓汉密尔顿路径,通俗一点地讲,就是将一些点不重复地全部串起来,使得连接这些点的折线段的长度最短。数学形式表达如下:

                                                             


       这种问题属于NP问题,蚁群算法、遗传算法、模拟退火算法都能对这种问题提出一种近似最优解,然而对上述算法不熟悉的童鞋必定一头雾水,因此,本文将讲解一种最简单易懂的算法---我称之为“暴力解法”。顾名思义,就是一次次枚举,通过比较路径长度来选取适当的节点顺序。算法介绍如下:

                                                            

       对于以上三种情况,其构建的路径和长度示意图分别如下:

                                                          

                                                          

       因此在处理这样的问题时,需要计算任意两点之间的距离,为了便于计算,在计算之前将其距离矩阵计算出来是一种明智的选择,因为后期均为加减法和逻辑判断,将极大地缩短时间。

       然而。

       是的,当数据量非常大时,构建距离矩阵一次申请内存将爆,例如,我在计算88w个点时,需要申请88w*88w/2*sizeof(float),这是个非常巨大的数字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值