Prim算法解决修路问题 发表于 2020-04-20 更新于 2021-11-03 分类于 algorithm 123456789/** * 普利姆算法 * 思路:尽可能选择少的路线,并且每条路线最小,保证总里程数最少 * 最小生成树: * 修路的问题本质是最小生成树的问题,N个顶点,N-1条边,包含全部顶点 * 步骤: * 1.循环访问过的节点,和没访问过的节点,找到一条最小权重的边 * 2.循环N-1次,找到N-1条边 */ 阅读全文 »
Java语言实现暴力匹配算法 发表于 2020-04-19 更新于 2021-11-03 分类于 algorithm 1234567时间复杂度最坏O(n*m) 。应用广泛原因有二:1)实际开发中效率要比最坏情况高很多2)算法简单,简单是首选代码如下: 阅读全文 »
选择排序 发表于 2020-04-18 更新于 2021-11-03 分类于 algorithm 12345678910111213 思路: 1)选择排序有数组大小-1轮排序 2)每一轮排序,又是一个循环,循环的规则: 2.1)先假定当前数是最小数 2.2)然后和后面的每个数进行比较,如果有更小的数,则重新确定最小数,并得到下标 2.3)当遍历到数组的最后,就得到本轮最小数和下标 2.4)交换 代码: 先写出最简单的第一次循环结果 然后第二次、第三次,寻找规律粘贴代码如下: 阅读全文 »
桶排序 发表于 2020-04-17 更新于 2021-11-03 分类于 algorithm 123456789/** * 桶排序思路: * * 1.找出待排序数组中的最大值max、最小值min * 2.我们使用 动态数组ArrayList 作为桶,桶里放的元素也用 ArrayList 存储。桶的数量为(max-min)/arr.length + 1 * 3.遍历数组 arr,计算每个元素 arr[i] 放的桶(根据商相等取得相近元素放入一个桶中) * 4.每个桶各自排序 * 5.遍历桶数组,把排序好的元素放进输出数组 */ 阅读全文 »
环形链表解决约瑟夫问题 发表于 2020-04-16 更新于 2021-11-03 分类于 algorithm 12345678910111213141516/** * 环形链表解决约瑟夫问题 * 问题: * 小孩围成一圈 * n=5 有5个人 * k=1 从第1个人开始数数 * m=2 数2下 * 数到的小孩出圈 * 解决: * a)创建一个辅助指针变量,指向环形链表最后一个节点 * b)小孩报数前,先让first和help移动k-1次 * c)小孩报数时,first和help同时移动m-1次 * d)这时将first指向的小孩节点出圈 first = first.next helper.next = first */粘贴代码如下: 阅读全文 »