
数据结构与算法
文章平均质量分 69
个人学习记录。
Ingsuifon
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法设计与分析(2):具体模型和下限
对于某个问题和某个长度。原创 2024-01-10 14:15:00 · 1304 阅读 · 0 评论 -
算法设计与分析(1):导论和线性时间选择
本系列的目的是简要概述算法主题及其涉及的思维类型:为什么我们专注于我们所做的主题,以及为什么我们强调证明保证。我们会通过一个很容易涉及到的问题示例,即查找n个元素集合的中位数。对于这个问题,有一个简单的Onlogn时间算法,但我们可以使用随机化和巧妙的确定性构造做得更好。这些说明了我们将在本系列中使用(和构建)的一些想法和工具。我们还将练习编写和解决递归关系,这是算法分析的关键工具。原创 2024-01-09 11:38:46 · 1061 阅读 · 0 评论 -
网络流问题
网络流算法。原创 2022-06-15 11:48:15 · 1075 阅读 · 0 评论 -
算法设计与分析笔记
0. 总述算法:动态规划分治散列和数据结构随机化网络流线性规划近似算法分析:复发概率分析摊销分析潜在功能1. 线性时间选择(随机性的和确定性的);递归树例子:寻找中位数在求中位数问题中,我们有一组不同的数字:a1,a2,...,ana_1,a_2,...,a_na1,a2,...,an,并且想要求出索引 iii 使得正好有 ⌊n/2⌋⌊n/2⌋⌊n/2⌋ 个数大于aia_iai。如何找到中位数?检查每个元素是否为中位数:Θ(n2)Θ(n^2)Θ(n2)原创 2022-04-11 10:52:15 · 496 阅读 · 0 评论 -
考研数据结构
先序遍历public void preorderTraversal(TreeNode root) { Deque<TreeNode> stack = new LinkedList<>(); TreeNode cur = root; while (cur != null || !stack.isEmpty()) { while (cur != null) { visit(cur.val); sta原创 2021-06-19 23:12:10 · 164 阅读 · 0 评论 -
HashMap源码阅读记录
MIN_TREEIFY_CAPACITY:最小允许树化的哈希表容量。也就是说,如果哈希表的容量没有达到这个最小值,而桶里已经有很多节点了,不会把链表转成红黑树,而是先扩容,因为扩容会进行再散列,原先在一个桶里的节点可能会被散列到不同的桶中。...原创 2021-05-27 00:01:44 · 189 阅读 · 0 评论 -
基础算法(一)
二分寻找一个数int binarySearch(int[] arr, int target) { int left = 0, right = arr.length - 1; while(left <= right) { int mid = left + (right - left) / 2; if(arr[mid] == target) return mid; else if(arr[mid] < target) left = mid + 1; else原创 2020-10-09 22:38:34 · 197 阅读 · 0 评论 -
滚动哈希:Karp-Rabin字符串匹配
应用:在大文本中寻找字符串朴素的模式匹配思想将模式s从文本t的开头位置匹配,不匹配则往后移一个位置,重新匹配,时间复杂度为O(∣s∣∗(∣t∣−∣s∣))O(|s|*(|t|-|s|))O(∣s∣∗(∣t∣−∣s∣)),约为O(∣s∣∗∣t∣)O(|s|*|t|)O(∣s∣∗∣t∣).滚动哈希考虑模式s本次匹配的子串与下一次匹配的子串的区别,仅仅在于移除了它的头以及添加了一个尾,如果能有效利用这个特点来计算字符串的哈希值,使得中间部分不变时,哈希值的变化只与首尾的变化有关,那么计算下一次匹配的子串的原创 2020-08-25 11:35:17 · 423 阅读 · 2 评论 -
《算法》1.5部分题解
1.5.1 使用quick-find算法处理序列9-0 3-4 5-8 7-2 2-1 5-7 0-3 4-2。对于输入的每一对整数,给出id[]数组的内容和访问数组的次数。import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class quick_find_UF { pri...原创 2020-03-22 18:16:56 · 881 阅读 · 0 评论 -
PAT甲级刷题记录
以下内容均参考自柳神——努力,自信,热爱生活的小姐姐。1001 A+B Format (20分)Calculate a+b and output the sum in standard format – that is, the digits must be separated into groups of three by commas (unless there are less than...原创 2020-03-16 18:02:05 · 316 阅读 · 0 评论 -
《算法》1.4节部分题解
14public int fourSum(int[] a) { int len = a.length; int cnt = 0; for (int l = 0; l < len - 3; l++) { for (int i = l + 1; i < len - 2; i++) { for (int j = i + 1, ...原创 2020-02-29 22:34:13 · 327 阅读 · 0 评论 -
数学归纳法证明从N个数中取三个数的不同组合的总数为N(N-1)(N-2)/6
设P(n)为命题:从n个数中取三个数的不同组合的总数为n(n−1)(n−2)6\frac{n(n-1)(n-2)}{6}6n(n−1)(n−2)。基础步骤: P(3)为真,因为只有1种组合,而 3∗(3−1)∗(3−2)6=1\frac{3*(3-1)*(3-2)}{6} = 163∗(3−1)∗(3−2)=1。归纳步骤: 归纳假设对正整数k > 3,P(k)为真。即假定从k个数中取...原创 2020-02-27 23:42:47 · 3337 阅读 · 2 评论 -
HashSet底层实现
\quadHashSet是采用哈希算法实现,底层实际是用HashMap实现的(HashSet本质就是一个简化版的HashMap),因此,查询效率和增删效率都比较高。我们来看一下HashSet的源码:public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java....原创 2020-02-04 10:15:53 · 644 阅读 · 0 评论 -
HashMap底层实现
\quad HashMap底层实现采用了哈希表,这是一种非常重要的数据结构。对于我们以后理解很多技术都非常有帮助(比如:redis数据库的核心技术和HashMap一样)。\quad 数据结构中由数组和链表来实现对数据的存储,他们各有特点。\quad(1) 数组:占用空间连续。寻址容易,查询速度快。但是,增加和删除效率非常低。\quad(2) 链表:占用空间不连续。寻址困难,查询速度慢。但是,...原创 2020-02-03 15:25:00 · 210 阅读 · 0 评论 -
Java数据结构之List
•List\quad\quad• 特点:有序 不唯一List常用的实现有ArrayList和LinkedList。•ArrayList顺序表\quad\quad• 在内存中分配连续的空间,实现了长度可变的数组\quad\quad• 优点:遍历元素和随机访问元素的效率比较高\quad\quad• 缺点:添加和删除需大量移动元素效率低,按照内容查询效率低•LinkedList双向链表...原创 2020-02-02 14:43:40 · 236 阅读 · 0 评论 -
递归打印一个目录下的所有文件
问题来源:《算法(第四版)》习题1.3.43import java.io.*;public class Test { public static void main(String[] args) { String s = StdIn.readString(); File src = new File(s); if(src.exists()...原创 2020-01-21 20:35:14 · 276 阅读 · 0 评论 -
Java双端队列Deque
import java.util.Iterator;public class Deque<Item> implements Iterable<Item> { private class Node { Item item; Node next; Node pre; } private class Que...原创 2020-01-21 10:50:32 · 227 阅读 · 0 评论 -
编写一个可迭代的Stack用例,它含有一个静态的copy()方法,接受一个字符串的栈作为参数并返回该栈的一个副本
问题来源:《算法(第四版)》习题1.3.12主要是泛型里如何定义静态的泛型方法。 public static<T> Stack<T> copy(Stack<T> S) { Stack<T> s = new Stack<>(); for(T i: S) s.push(i); ...原创 2020-01-20 21:11:12 · 314 阅读 · 2 评论 -
从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式
问题来源:《算法(第四版)》习题1.3.9sample input1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) )sample output( ( 1 + 2 ) * ( ( 3 - 4 ) * ( 5 - 6 ) ) )思路:遇到“)”以外的字符串都压栈,否则弹栈直到一个完整的表达式形成,两边添加括号后再压栈。Stack<String> S = new St...原创 2020-01-20 20:32:46 · 984 阅读 · 0 评论 -
递推法求样本方差和标准差
问题来源:《算法(第4版)》习题1.2.18#include <cmath>class Accumulator{public: Accumulator() { m = 0.0; s = 0.0; n = 0; } void addDataValue(double x) { n...原创 2020-01-19 13:29:40 · 2251 阅读 · 1 评论