算法和数据结构
wuychn
这个作者很懒,什么都没留下…
展开
-
大 数 相 乘
package com.wuychn.bigcount;public class BigCount { /** * @param args */ public static void main(String[] args) { // 太大的数不能用int,会内存溢出,所以用字符串 String str1 = "113423423"; String str2 = "999423432"; int le.原创 2021-06-03 17:22:56 · 98 阅读 · 0 评论 -
四则运算表达式求值(后缀表达式、逆波兰表示法)
一、后缀(逆波兰)表示法小学的时候我们就学过数学运算的规则:先乘除后加减,从左算到右,先括号内后括号外。对于9 + (3 -1) ×3 + 10 ÷ 2这样一个表达式,我们很快就知道结果是20。但是在计算机内部,是如何计算的呢?20世纪50年代,波兰逻辑学家Jan Łukasiewicz想到了一种不需要括号的后缀表示法,我们称之为逆波兰表示(Reverse Polish Notatio...原创 2020-04-19 19:02:53 · 954 阅读 · 0 评论 -
串
121原创 2020-04-15 21:32:34 · 588 阅读 · 0 评论 -
回溯法(八皇后)
21原创 2020-11-03 11:01:21 · 180 阅读 · 0 评论 -
动态规划(最长公共子序列、最长公共子串)
package com.wuychn.lcs;public class LCS { public int findLCS(String A, String B) { int n = A.length(); int m = B.length(); char[] a = A.toCharArray(); char[] b =...原创 2020-11-03 10:20:02 · 130 阅读 · 0 评论 -
分治法(Divide and Conquer)
121原创 2020-11-03 11:04:37 · 1355 阅读 · 0 评论 -
贪心算法(部分背包算法)
普里姆算法在数据结构图中已经有涉及,这里以背包算法为例。背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。代码实现:package com.wuychn.greedy;import java.util.Arrays;public c...原创 2020-03-12 13:23:56 · 468 阅读 · 0 评论 -
穷举法(泊松汾酒)
泊松是法国数学家、物理学家和力学家。有一次闲暇时,他提出过一个有趣的问题,后称为:“泊松分酒”。在我国古代也提出过类似问题,遗憾的是没有进行彻底探索,其中流传较多是:“韩信走马分油”问题。有3个容器,容量分别为12升,8升,5升。其中12升中装满油,另外两个空着。要求你只用3个容器操作,最后使得某个容器中正好有6升油。规则如下:1、大瓶子只能倒入中瓶子2、中瓶子只能倒入小瓶子...原创 2020-03-12 12:47:50 · 786 阅读 · 0 评论 -
分治法:欧几里得算法(辗转相除法,求最大公约数)
欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。计算公式gcd(a,b) = gcd(b,a mod b)。代码如下:package com.wuychn.recursion;public class Gcd { // (m>n)m和n的最大公约数 = n 和m%n的最大公约数 // 36 24 12 = 24和12 = 12和 0 ...原创 2020-03-12 09:27:59 · 1087 阅读 · 0 评论 -
分治法:汉诺塔
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。代码实现:package com.wuychn.recursion;public cla...原创 2020-03-12 09:12:28 · 288 阅读 · 0 评论 -
基数排序
完全原创 2020-09-01 14:17:23 · 113 阅读 · 0 评论 -
归并排序
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是...原创 2020-03-11 21:09:34 · 105 阅读 · 0 评论 -
堆排序
https://www.cnblogs.com/chengxiao/p/6129630.html原创 2020-03-11 19:58:19 · 762 阅读 · 0 评论 -
直接插入排序和二分插入排序
一、直接插入排序假设数列第一个元素为已排序数列,剩余数列为未排序数列,将待排序元素挨个插入到已排序数列中每次插入都必须保证数列是有序的,即通过比较和移动有序数列中的元素,将元素插入到合适的位置。思路:如同玩扑克牌一样,每次摸牌都将它与手中的牌比较,始终将牌放在比它大的牌前面,比它小的牌后面。这样当牌全部摸到手上后,就是一个有序的序列。从后往前找合适的位置。直接插入排序的时间复杂度是:...原创 2020-03-10 21:38:16 · 723 阅读 · 0 评论 -
堆
21原创 2020-03-24 22:12:06 · 126 阅读 · 0 评论 -
图
21原创 2020-03-22 16:16:20 · 545 阅读 · 0 评论 -
选择排序
选择排序是一种简单直观的排序算法,它的时间复杂度是O(n²) 。选择排序的原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置;再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾;重复第二步,直到所有元素均排序完毕。动图示意如下:代码如下:package com.wuychn;import java.util.Arrays;public...原创 2020-03-05 20:28:45 · 135 阅读 · 0 评论 -
对有 5 亿整数的大文件排序
一、需求有1个大文件包含5亿个数(文件大小好几个G),其中每一行都是一个随机整数(不重复),现在要对这个文件进行排序,或者判断给定的某个数是否在此大文件中。二、实现2.1 内部排序2.2 归并排序数据太多,递归太深 ,栈溢出,加大Xss?数据太多,数组太长,OOM,加大Xmx?而且要将这么大的文件读入内存,在堆中维护这么大个数据量,还有内排中不断的拷贝,对栈和堆都是很大的...原创 2020-02-22 15:54:00 · 1726 阅读 · 0 评论 -
希尔排序
https://blog.csdn.net/qq_39207948/article/details/80006224原创 2020-03-10 22:06:18 · 391 阅读 · 0 评论 -
树
一、树1.1 定义树是由n(n≥0)个节点组成的有限集合,当n=0时成为空树;否则,在任意非空树中:必有一个根节点;剩下的节点被分为m≥0个互不相交的有限集合T1,T2······,这些有限集合的每一个又都是树。树T1,T2······被称作根的子树。树中的每一个节点都是该树中某一棵子树的根。需要注意的是,子树互不相交,即每个节点只属于一棵树(或子树),只有一个双亲。下图(a)表示只有一...原创 2020-03-21 16:29:18 · 187 阅读 · 0 评论