news 2026/5/1 7:24:42

Go语言数据结构和算法(三十四)分治算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Go语言数据结构和算法(三十四)分治算法

分治算法是将一个巨大的输入分解成若干个小块.在每个小块上解决问题.然后将分段

解决方案合并为全局解决方案.

1.步骤:

分解:将原始问题分解成一组子问题.

解决子问题:递归的单独解决每个子问题.

合并子问题:将子问题的解放在一起得到整个问题的解.

2.应用:

2.1快速排序:

又称分区交互排序.是最有效率的排序算法.它首先从数组中选择一个枢轴值.然后将剩

下的数组元素分成两个子数组.通过将每个元素与枢轴值进行比较来进行分区.它比较

元素是否具有比枢轴值更大或更小的值.然后递归的对数组进行排序.

2.2归并排序:

这是通过比较对数组进行排序的算法.它首先将数组划分为子数组.然后递归对的对每

个子数组进行排序.排序完成后.将它们合成一个数组.

2.3二分搜索:

二分搜索是一种搜索算法.也称为半区间搜索或对数搜索.它将目标值与排序数组中存

在的中间元素进行比较.比较后.如果数值不同.则最终剔除不能包含目标的那一半数

组.在继续寻找另一半数组.直到找到目标值.如果搜索另一半也找不到.则断定目标值

不在数组中.

2.4最近点问题:

强调在给定n个点的情况下.找出度量空间中最近的一对点.使得这对点之间的距离应

该最小.

2.5Kadane算法:

该算法是解决最大子数组问题的有效算法.该问题是在整数数组中找到最大和的连续

子数组的任务.

2.6平衡二叉树构造:

给定一个排序的整数数组.任务是构造一个平衡二叉树.可以使用递归构造根节点的左

右子树的分治算法来解决.

3.点对点实现:

3.1方法:
package data import ( "math" "sort" ) func ClosestPair(points [][]int) float64 { h := make(helper, len(points)) for i, v := range points { //计算两点之间的距离. h[i] = [2]float64{math.Hypot(float64(v[0]), float64(v[1])), float64(i)} } //将数组按照升序排序. sort.Sort(h) if len(h) >= 1 { return h[0][0] } return 0 } type helper [][2]float64 func (h helper) Swap(i, j int) { h[i], h[j] = h[j], h[i] } func (h helper) Less(i, j int) bool { return h[i][0] < h[j][0] } func (h helper) Len() int { return len(h) }
3.2main方法:
func main() { points := [][]int{{3, 3}, {5, -1}, {-2, 4}} pair := data.ClosestPair(points) fmt.Println(pair) }

4.实战:

4.1方法:
func ClosestPair2(points [][]int, k int) [][]int { if len(points) == k { return points } var v []int var re [][]int m := make(map[int]int) for i := 0; i < len(points); i++ { m[i] = points[i][0]*points[i][0] + points[i][1]*points[i][1] v = append(v, i) } closestUtil(m, v, 0, len(v)-1, k) for i := 0; i < k; i++ { re = append(re, points[v[i]]) } return re } func closestUtil(m map[int]int, s []int, start int, end int, k int) { p := m[s[end]] l := start for i := start; i < end; i++ { if m[s[i]] < p { s[l], s[i] = s[i], s[l] l++ } } s[l], s[end] = s[end], s[l] if k == l { return } else if l < k { closestUtil(m, s, l+1, end, k) } else { closestUtil(m, s, start, l-1, k) } }
4.2main方法:
func main() { points := [][]int{{2, 3}, {12, 30}, {40, 50}, {5, 1}, {12, 10}, {3, 4}} k := 2 res := data.ClosestPair2(points, k) fmt.Println(res) }

忽然世界开始变得很慢.时间也变得很慢.

如果大家喜欢我的分享的话.可以关注我的微信公众号

念何架构之路

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:13:05

quickbi数据集报错

错误码: NOX5200013traceId: a2b3506c-aa59-4b01-a48e-2aa348021a72[NOX5200013] invalid calculate field [直播购买客户], expression syntax error or some dependence field [14513112cb] has gone.原因&#xff1a;之前新建的维度字段或者计算字段&#xff0c;依赖了其他字…

作者头像 李华
网站建设 2026/5/1 7:24:39

WE Learn智能学习助手终极指南:5步开启高效学习新时代

WE Learn智能学习助手终极指南&#xff1a;5步开启高效学习新时代 【免费下载链接】WELearnHelper 显示WE Learn随行课堂题目答案&#xff1b;支持班级测试&#xff1b;自动答题&#xff1b;刷时长&#xff1b;基于生成式AI(ChatGPT)的答案生成 项目地址: https://gitcode.co…

作者头像 李华
网站建设 2026/5/1 7:24:37

全网最全9个AI论文软件,助本科生轻松搞定毕业论文!

全网最全9个AI论文软件&#xff0c;助本科生轻松搞定毕业论文&#xff01; AI 工具如何改变论文写作的未来 在当今这个信息爆炸的时代&#xff0c;本科生面对毕业论文的压力日益增大。从选题到写作&#xff0c;再到查重和修改&#xff0c;每一个环节都可能成为学生心中的“拦路…

作者头像 李华
网站建设 2026/4/23 17:13:33

移动网络信号指标与单位整理(2G/3G/4G/5G Android vs IoT)

1️⃣ 核心概念 指标网络描述单位注意点RSSI2G/3G/4G/5G接收信号强度指标&#xff08;总功率&#xff0c;含噪声和邻区信号&#xff09;ASU / dBm仅量化信号强弱&#xff0c;2G/3G/4G 含义不同&#xff0c;非单小区物理功率RSCP3G单小区信号功率dBmRSCP Received Signal Code…

作者头像 李华
网站建设 2026/4/23 13:47:41

介绍如何在电脑上查看 iPhone 和 iPad 的完整设备信息

在很多场景下&#xff0c;我们真正关心的问题并不是某个 App 怎么运行&#xff0c;而是它运行在什么设备上。 同一份安装包&#xff0c;在不同 iPhone、不同 iPad 上表现不一致&#xff1b; 同一系统版本&#xff0c;电池健康、磁盘状态却差异明显&#xff1b; 甚至连摄像头、主…

作者头像 李华
网站建设 2026/4/23 15:12:50

性价比高的海外代理IP:怎么选不踩坑

2026年&#xff0c;海外代理IP在跨境数据采集、区域访问测试、国际化应用开发等领域的需求持续高涨。所以&#xff0c;“性价比高的海外代理IP怎么选”已成为热议焦点。面对市面上鱼龙混杂的服务商&#xff0c;如何选到真正靠谱、成本可控又技术稳定的服务&#xff1f;本文将从…

作者头像 李华