摘要:
班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。 给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知 阅读全文
随笔分类 - 小算法
回溯法计算二维数组最短路径
2018-12-28 18:05 by muamaker, 3566 阅读, 收藏, 编辑
摘要:
提供的二维数字矩阵地图,从左上角出发,每次可以向下或向右走,直到到达右下角,途中经过的路径上的数字加起来,得到的数应该是一个最大的数1.输出路径及累计值2.提供二维数组的输入(文本文件导入或JS文件导入)3.输出每次搜索花的时间,比如:输入二维数组 输出结果 和 搜索用的时间4.最大二维数组为:20 阅读全文
js回溯法计算最佳旅行线路
2018-12-24 16:55 by muamaker, 1177 阅读, 收藏, 编辑
摘要:
假如有 A,B,C,D四个城市,他们之间的距离用 G[V][E] 表示,为 无穷大,则表示两座城市不相通 现在从计算从某一个城市出发,把所有的城市不重复旅行一次,最短路径 其中G为: (Infinity表示城市不相通) 分析,如果确定从 A城市开始,则需要探索 剩下的几个城市,剩下的几个城市再往里探 阅读全文
动态规划--合并石子
2018-10-29 16:17 by muamaker, 914 阅读, 收藏, 编辑
摘要:
动态规划: minx[i][j] 记录着 从第 i 堆到第 j 堆的合并最小花费,令 minx[i][j] = 0; sum[i] 为前 i 堆石子数量的总和 sum[0] = 0; 1、假如 i 和 j 中间存在 k 使得 minx[i][j] > minx[i][k] + minx[k+1][j 阅读全文
矩阵旋转(二维数组旋转)
2018-10-26 14:42 by muamaker, 12601 阅读, 收藏, 编辑
摘要:
给定一个 n × n 的二维矩阵表示一个图像。 将图像旋转 90 度、180度、270度。 示例 1: 示例 2: 逆时针旋转90度 var arr = [ [1,2,3], [4,5,6], [7,8,9] ]; console.log(rotate(arr)); console.log(arr) 阅读全文
js快速排序算法解析
2018-08-23 16:13 by muamaker, 2021 阅读, 收藏, 编辑
摘要:
数组的快速排序算法,和并归排序步骤基本类似。 都是先拆分,后合并。并归排序是:拆分容易,合并难。 快速排序是:拆分难,合并容易 要理解快速排序,首先要理解拆分逻辑 要素:找一个基准点,通过操作使得数列的左边全部都是小于他的数,右边全部都是大于他的数; 1、选中基准点,开始索引 i ,结束索引 j 2 阅读全文
js并归排序的思路
2018-08-22 17:11 by muamaker, 378 阅读, 收藏, 编辑
摘要:
并归排序,就是分而治之,将长的数组分解为短的数组,一直分到最后,单个单个数组,我们就认为,只有一个元素的数组是有序的。然后再逐个的合并 1、拆分: 很容易 例如数组 [ 2,4,3,5,1,6,8,7 ]; 先拆为 [2,4,3,5] [1,6,8,7] 再拆 [2,4] [3,5] [1,6] [ 阅读全文
js神秘的电报密码---哈弗曼编码
2018-08-01 15:23 by muamaker, 752 阅读, 收藏, 编辑
摘要:
哈夫曼编码,根据每个单词在文本中出现的次数频率为权值,频率高的权值大。然后每次取两个频率最小的生成树,最后生成一颗大树。从根节点到该单词的路径,左边为0,右边为1, 阅读全文
js同时获得数组的两个最小值
2018-08-01 14:08 by muamaker, 1732 阅读, 收藏, 编辑
摘要:
//数组中找两个最小值,及索引 //例如数组: [2,6,7,4,10,3,5]; 计算得出,min1=2,index1=0,min2=3,index2=5; var min1 = Infinity; var min2 = min1; var index1 = -1; var index2 = -1; var arr = [2,6,7,4,10,3,5]; for... 阅读全文
js贪心算法---背包问题
2018-07-30 16:39 by muamaker, 1377 阅读, 收藏, 编辑
摘要:
/* * @param {Object} capacity 背包容量 6 * @param {Object} weights 物品重量 [2,3,4] * @param {Object} values 物品价值 [3,4,5] */ //贪心算法,只能算,可以分割的物品,如果不能分割物品,只能得到近似解,不分割物品,可以使用动态规划 //1、计算... 阅读全文
js 数组里面任意两个数的和与目标值
2018-07-25 21:53 by muamaker, 5264 阅读, 收藏, 编辑
摘要:
问题: 给定一个数组例如[1,3,4,6,7] ,再给定一个目标数,例如9。 写一个算法找出两个数他们相加等于目标数,返回他们在数组中的位置。给出一个解即可,同一个数字不能使用2次。 比如[1,3,4,6,7] 目标数为9,那么需要返回[1,3]。如果目标数为20,返回null。 阅读全文
js贪心算法---钱币找零问题
2018-07-17 14:53 by muamaker, 947 阅读, 收藏, 编辑
摘要:
function MinCoinChange(coins){ var coins = coins.sort(function(a,b){ return b - a; }); this.makeChange = function(amount){ var change = [], total = 0; for (var i = 0; i ... 阅读全文
js动态规划---最长子序列(lcs)
2018-07-17 13:43 by muamaker, 1579 阅读, 收藏, 编辑
摘要:
function LCS(wordX, wordY) { var m = wordX.length; var n = wordY.length; this.lcs = function(){ var l = []; var path = []; var i, j, a, b; for(i = 0; i = a){ l[i][j... 阅读全文
js动态规划---背包问题
2018-07-12 10:21 by muamaker, 4090 阅读, 收藏, 编辑
摘要:
//每种物品仅有一件,可以选择放或不放 //即f[i][w]表示前i件物品恰放入一个容量为w的背包可以获得的最大价值。 //则其状态转移方程便是:f[i][w]=max{f[i-1][w],f[i-1][w-weights[i]]+values[i]} (这是最根本的算法) //其实背包问题有好多版本: /* * 01背包(ZeroOnePack): 有N件物... 阅读全文
js动态规划---最少硬币找零问题
2018-07-09 16:17 by muamaker, 2799 阅读, 收藏, 编辑
摘要:
给定钱币的面值 1、5、10、25 需要找给客户 36 最少找零数为: 1、10、25 // dp[0] = 0 金额为零时不需要硬币 // dp[n] = min(dp[n],dp[n-coin1] + 1,dp[n-coin2],...) 金额为n时,硬币数等于(n-coin)+1中所需硬币最少 阅读全文
js图的数据结构处理---弗洛伊德算法
2018-06-25 17:13 by muamaker, 460 阅读, 收藏, 编辑
摘要:
function Graph() { this.graph = [ [0, 2, 4, 0, 0, 0], [0, 0, 1, 4, 2, 0], [0, 0, 0, 0, 3, 0], [0, 0, 0, 0, 0, 2], [0, 0, 0, 3, 0, 2], [0, 0, 0, 0, 0, 0] ]; var vert... 阅读全文
js图的数据结构处理---迪杰斯特拉算法
2018-06-25 11:16 by muamaker, 529 阅读, 收藏, 编辑
摘要:
/*//1、确定数据结构, mapf[i][j] 为点i到点j的距离 [ Infinity 2 5 Infinity Infinity Infinity Infinity 2 6 Infinity Infinity Infinity Infinity 7 1 Infinity Infinity ... 阅读全文
js图的数据结构处理----邻链表,广度优先搜索,最小路径,深度优先搜索,探索时间拓扑
2018-06-21 12:01 by muamaker, 449 阅读, 收藏, 编辑
摘要:
//邻居连表 //先加入各顶点,然后加入边 阅读全文
js树形结构-----(BST)二叉树增删查
2018-06-20 15:59 by muamaker, 852 阅读, 收藏, 编辑
摘要:
function BinarySearchTree(){ var cnodes = function(key){ this.key = key; this.left = null; this.right = null; } var root = null; this.insert = function(key){ var n... 阅读全文