数据结构与算法
Tom098
工作20年的IT老鸟,做过开发,也做过技术支持,丰富操作系统、网络等IT infurstructure 方面实战经验。精通Java/J2EE技术体系以及Linux下用户空间c编程。下一步该如何走? AI、大数据?
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
动态规划算法计算硬币组合
你有三种硬币,分别面值2元,5元和7元,每种硬币都有足够多。买一本书需要27元。如何用最少的硬币组合正好付清,不需要对方找钱?这道题是lintcode编号669的Coin Change问题。package leecode.daynamicprogramming;public class CoinChange { public static void main(String[] args) { int[] a = {2,5,7}; int ret = .原创 2021-07-06 10:39:10 · 1471 阅读 · 0 评论 -
leecode--链表对折
面试中问了一个链表对折的问题,写的完全不着边。后来百度了一下,自己根据原理重新写了一下。package leecode;public class FoldLinkedList { public static void main(String[] args) { Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); Node.原创 2021-07-05 14:49:55 · 1092 阅读 · 0 评论 -
字符串查找- 暴力匹配法
package indi.tom.algorithm.kmp;import org.junit.Test;/** * @Author: Tom * @Date: 2021年1月7日 下午5:06:53 * @Version: 1.0 * @Description: brute force or naive algorithm for string search */public class StringSearchBruteForce { @Test public .原创 2021-01-07 19:14:22 · 233 阅读 · 0 评论 -
二分查找算法,循环和递归两种方式
package indi.tom.algorithm.search;import org.junit.Test;/** * @Author: Tom * @Date: 2021年1月7日 下午5:26:29 * @Version: 1.0 * @Description: two implement of binary search: look and recursion */public class BinarySearch { @Test public void test01(.原创 2021-01-07 19:12:59 · 188 阅读 · 0 评论 -
AVL tree 代码
写到后来,写吐了..... 跟教材的相比,还是教材的思路更清晰一些,我这个能跑起来,但是写的过程太痛苦package indi.tom.dataStructure.avltree;import org.junit.Test;import indi.tom.dataStructure.avltree.AVLTreeTest.AVLTree;import indi.tom.dataStructure.avltree.AVLTreeTest.ValueNotFoundException;/原创 2021-01-07 16:59:23 · 215 阅读 · 0 评论 -
Binary Search Tree实现
一个BST tree demo,最难的部分是delete()方法。在要删除节点有左右两个子树的时候,不是采用删除该节点,将左子树或右子树提升,同时将一个子树挂到另一个子树下边。而是直接将右子树的最小节点的值赋给要删除的节点,同时将右子树最小节点删除(采用递归算法)。这样使树更平衡些。另外,方法返回值类型什么时候采用boolean,什么时候不返回,抛异常也是一个需要考虑的问题。package indi.tom.dataStructure.tree;import org.junit.Test;原创 2021-01-04 11:11:04 · 170 阅读 · 0 评论 -
计算树的高度
在写一个项目临时用到javascript 写一个计算树的高度的函数时,不是很确定是否准确。用java重新写一遍,验证是否正确。这里把只有一个节点的树的高度算作1,不是0, 实际上就是求树的最长的一个路径上包含的节点数。package indi.tom.dataStructure.tree;import java.util.ArrayList;import java.util.List;import org.junit.Test;/** * @Author: Tom * @Date:原创 2021-01-02 19:07:45 · 1637 阅读 · 0 评论 -
自己写的Huffman tree, Huffman code和利用他们压缩解压示例
自己根据huffman tree/code原理写的示例。package indi.tom.dataStructure.tree;import org.junit.Test;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.Map;/** * @Author Tom * @Date 2020/12/16 17:33 * @Version原创 2020-12-22 08:22:08 · 265 阅读 · 0 评论 -
自己写的堆排序,根教材的不太一样
自己的版本:package indi.tom.dataStructure.tree;import org.junit.Test;import java.util.Arrays;/** * @Author Tom * @Date 2020/12/16 8:43 * @Version 1.0 * @Description */public class HeapSortTest01 { @Test public void test(){ int[] arra原创 2020-12-16 10:26:11 · 119 阅读 · 0 评论 -
自己写的tree demo,实现前序、中序、后续遍历和删除
跟教材的不太一样,多种方式可实现。package indi.tom.dataStructure.tree;import org.junit.Test;/** * @Author Tom * @Date 2020/12/9 15:56 * @Version 1.0 * @Description */public class BinaryTreeTest01 { public static BinaryTree binaryTree = null; static{原创 2020-12-09 18:40:10 · 260 阅读 · 0 评论 -
基数排序推导过程和最终算法
推导过程:package indi.tom.Algorithm.recursion.sort;import java.util.Arrays;/** * @Author Tom * @Date 2019/11/11 19:36 * @Version 1.0 * @Description 基数排序,空间换时间.这里列出推导过程。在RadixSortFinal中给出最终方法。 ...原创 2019-11-11 21:15:28 · 252 阅读 · 0 评论 -
归并排序
package indi.tom.Algorithm.recursion.sort;import com.sun.xml.internal.bind.v2.runtime.output.ForkXmlOutput;import java.util.Arrays;/** * @Author Tom * @Date 2019/11/11 13:48 * @Version 1.0 ...原创 2019-11-11 16:14:49 · 135 阅读 · 0 评论 -
快速排序方式2
快速排序算法实现方式2,来自Algorithm4 这本书的例子。这种方式有点不好理解(根使用comprable数组,而没用使用不同的int[]数组没有关系)。这种方式的逻辑就是不断从低位找比第一个元素(这里拿第一个元素做基准元素)大的元素,同时从高位开始找比第一个元素小的元素,找到后,将这两个元素交换。直到低位的指针大于等于高位的指针。这是将第一个元素与高位指针对应的元素交换。将左右两个子数组...原创 2019-11-11 12:01:28 · 122 阅读 · 0 评论 -
快速排序实现方式1
这个文章写的挺好的,里边给出了快速排序的一种实现方式,这种方式比较易于理解。https://www.cnblogs.com/bingxing/p/9356402.html转载 2019-11-10 22:47:18 · 145 阅读 · 0 评论 -
八皇后问题
代码基本根书中一摸一样,自己很难想出这么简洁精美的算法。用到了递归和回溯的思想。核心方法是check方法。package indi.tom.Algorithm.recursion;import java.sql.SQLOutput;/** * @Author Tom * @Date 2019/11/10 20:11 * @Version 1.0 * @Description ...原创 2019-11-10 20:42:36 · 158 阅读 · 0 评论 -
迷宫问题
代码基本抄教材的,用了递归和回溯的思想,很简洁。其中地图部分做了修改,采用直接指定值的方式,方便修改地图,测试不同的路线结果。package indi.tom.Algorithm.recursion;import sun.font.FontRunIterator;/** * @Author Tom * @Date 2019/11/10 14:52 * @Version 1....原创 2019-11-10 20:38:10 · 187 阅读 · 0 评论 -
逆波兰表达式
自己写的逆波兰表达式,跟教材比差很多,写的很烂。package indi.tom.DataStructure;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Stack;/** * @Author Tom * @Date 2019/1...原创 2019-11-09 20:51:36 · 238 阅读 · 0 评论 -
自己实现的解决约瑟夫问题的算法
简单跑了一遍,结果好像对。没有参考教材,等找时间比对一下。package indi.tom.DataStructure;/** * @Description 约瑟夫问题,在有n个人的圆圈中,从第k(1<k<n)个人开始,数m个数,到第m个人,第m个人出列,他的下一个人又从m报数,直到所有人出列。问,出来的人的序号是多少? */public class JosephuCi...原创 2019-11-09 16:24:19 · 270 阅读 · 0 评论 -
算法时间复杂度的一点点理解
1. 时间频度用T(n)表示,表示当一个程序,其中某个变量n,他的值是n时,执行的语句/命令的次数。比如T(n)=3+2n+1。n表示问题规模,可以理解为一个算法,一个函数或程序的输入参数。具体可以理解为程序的循环次数。时间复杂度用O(f(n))表示,f(n)是一个辅助函数,随着n值增大,与T(n)比值接近常数的函数。比如f(n) =。此时,时间复杂度可以用O()表示,表示随着代码中变量...原创 2019-11-08 15:35:00 · 282 阅读 · 0 评论 -
关于Algorithm 4这本书中使用书中带的工具类StdIn从标准输入读数据时无法结束的问题
可以使用ctrl + D结束输入。不像使用scanner,我们可以通过回车键结束输入。原创 2019-11-04 13:58:43 · 262 阅读 · 0 评论
分享