分治算法通俗的讲就是把一个规模比较大的问题分成n个规模较小的问题来解决,再将每个小规模的问题进行合并,最后得到结果。通常问题规模比较大难以用普通的编程方法实现,或者不可能实现的时候采用分治算法,能够简化问题的解决。
一个例子:
求出一个数组中的最大值和最小值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | package example; public class MaxAndMinValue { // 直接算法 得到最大值和最小值 public static void main(String[] args) { int [] A = { - 18 , - 16 , 9 , - 5 , 7 , - 40 , 0 , 35 }; System.out.println(getMaxValue(A)); System.out.println(getMinValue(A)); System.out.println(getMax(A, 0 , A.length - 1 )); } // 直接算法求最大值 public static int getMaxValue( int [] array) { int Max = 0 ; for ( int i = 0 ; i < (array.length - 1 ); i++) { if (array[i] == array[i + 1 ]) { Max = array[i + 1 ]; } if (array[i] < array[i + 1 ]) { Max = array[i + 1 ]; } if (array[i] > array[i + 1 ]) { Max = array[i]; array[i] = array[i + 1 ]; array[i + 1 ] = Max; } } return Max; } // 直接算法求最小值 public static int getMinValue( int [] array) { int Min = 0 ; for ( int i = 0 ; i < (array.length - 1 ); i++) { if (array[i] == array[i + 1 ]) { Min = array[i + 1 ]; } else if (array[i] < array[i + 1 ]) { Min = array[i]; array[i] = array[i + 1 ]; array[i + 1 ] = Min; } else if (array[i] > array[i + 1 ]) { Min = array[i + 1 ]; } } return Min; } // 用分治法求最大最小值 public static int getMax( int [] array, int i, int j) { int Max1 = 0 ; int Max2 = 0 ; if (i == j) { return Max1 = Max2 = array[j]; } else if (i == (j - 1 )) { Max1 = array[i]; Max2 = array[j]; return Max1 > Max2 ? Max1 : Max2; } else { int mid = (i + j) / 2 ; Max1 = getMax(array, i, mid); Max2 = getMax(array, mid, j); return Max1 > Max2 ? Max1 : Max2; } } } |
假设数组的大小为8,用直接的算法,最大值最小值总需要比较14次,而用分治算法可以一次性求出最大和最小,只需要10次比较。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用