数据结构算法
文章平均质量分 51
monkey1008611
十四线小程序猿
展开
-
java 哲学家就餐模拟
问题描述:一圆桌前坐着5位哲学家,两个人中间有一只筷子,桌子中央有面条。哲学家思考问题,当饿了的时候拿起左右两只筷子吃饭,必须拿到两只筷子才能吃饭。上述问题会产生死锁的情况,当5个哲学家都拿起自己右手边的筷子,准备拿左手边的筷子时产生死锁现象。解决办法: 每个哲学家必须确定自己左右手的筷子都可用的时候,才能同时拿起两只筷子进餐,吃完之后同时放下两只筷子。模拟:clas...原创 2019-10-19 15:54:09 · 364 阅读 · 0 评论 -
C++ 数据结构之先行课开设学期
问题描述如下:某学院有n门课程,(i,j)表示i是j的先行课,即课程i必须在课程j之前的学期开设。对任意给出的先行课集合S={(1,3),(2,4)......},至少需要安排多少个学期?给出每个学期所开的课程清单。 这是一个拓扑图,我用的是贪婪求解: 存储课程用的是邻接数组,存储已找到的点的结构用的是栈stack<int> ss,存储每个点入度用的是数组indegree[...原创 2018-04-24 12:17:13 · 852 阅读 · 0 评论 -
524. Longest Word in Dictionary through Deleting
最近在刷LeetCode的题解,遇到这样的题,解答很多是用递归做的,我对递归不是很熟悉,每次都会尽量避免使用递归。看到这个题解感觉还不错,就理解了一下。有一个最长字符串的初始化,遍历链表,每次都跟链表里的字符串比较,看看长度是否有效,以及字典序。 如果链表元素有成为最长字符串的可能的话,就用isValued来判断通过删除S的某些字符,能否构成该链表元素。个人觉得这个方法非常妙,适合我的...原创 2019-03-24 23:54:21 · 115 阅读 · 0 评论 -
java 排序算法总结
一:插入排序。 思想:第一个为一个有序数组,之后每一个都向该数组中插入,从后往前,大于待插入数字的后移。 复杂度:插入排序是稳定的。时间复杂度O(N^2),空间负责度O(1);public static void sort(int[] x) { int n = x.length; for( int i=1; i<n; i++) { ...原创 2019-04-05 18:05:24 · 220 阅读 · 0 评论 -
用局部替换方式求解最小生成树 java
从T=空集开始for(图中每条边e) if 加入e不构成环,则 T=T+e else e‘ 是环上权重最大的边,T = T+e'解:利用邻接表形式存储图,用另一张图,每一次向新图里面加入一条边,从加入边的顶点开始做dfs遍历。如果遇到后向边,就说明图中有环,找出最大的边,删掉该边,再加入边,继续dfs过程,直到所有边都加入。这里图用hashmap存...原创 2019-05-17 22:35:39 · 363 阅读 · 0 评论 -
bellman-Ford查找输出一个负环(java)
设一个加权有向图中有负权重的边,设图中存在若干负环,设计算法找出其中一个负环。找负环考虑的是bellman-Ford算法,它是用来找最小生成树的算法,算法思想是循环|V-1|次,每次都对所有的边进行relax操作,最后再一次relax操作,如果还能被relax,就说明存在负环。要找到负环,就从这条边的端点开始。重要的具体实现代码: 1:存储 用hashMap存储邻接链表结构...原创 2019-05-24 11:41:05 · 2205 阅读 · 0 评论 -
加权有向完全图中找最小TSP圈
描述:一个加权有向完全图,找出里面的最小TSP圈。可以使用动态规划,差分,枚举等。(顶点数不多余5)这是算法的实验题,TSP问题是NP难问题,我用的是动态规划。解:一、动态转移方程。(假设有5个点) 变量K,已经便利过K个顶点,K=1,2,3,4,5,K=1表示刚从V1出发,K=5表示已经回到起点。 状态变量xk=(i, Sk); 已遍历k个节点,...转载 2019-06-02 15:53:15 · 1195 阅读 · 0 评论