- 博客(95)
- 收藏
- 关注
转载 Hash Tables
哈希表红黑树实现的符号表可以保证对数级别的性能,但我们可以做得更好。哈希表实现的符号表提供了新的数据访问方式,插入和搜索操作可以在常数时间内完成(不支持和顺序有关的操作)。所以,在很多情况下的简单符号表,用哈希表实现是最好的选择。hash functions如果键是小整数,那么我们可以直接使用数组来实现符号表,把键当做数组索引,于是键 i 对应的值放在数组位置 i 上。哈希(散列)...
2019-02-22 20:09:00 299
转载 Symbol Table Applications
符号表应用在计算机发展的早期,符号表帮助程序员从使用机器语言的数字地址进化到在汇编语言中使用符号名称;在现代应用程序中,符号名称的含义能够通行于跨域全球的计算机网络。快速查找算法曾经并继续在计算机领域中扮演着重要角色。符号表的现代应用包括科学数据的组织,例如在基因组数据中寻找分子标记或模式从而绘制全基因组图谱;网络信息的组织,从搜索在线贸易到数字图书馆;以及物联网基础架构的实现,例如包...
2019-02-22 20:09:00 337
转载 Balanced Search Trees
平衡搜索树前面介绍的二叉搜索树在最坏情况下的性能还是很糟糕,而且我们不能控制操作的顺序,有时根本就不是随机的,我们希望找到有更好性能保证的算法。2-3 search trees于是先来了解下 2-3 查找树,它可以保证树的平衡性,维护树高在 lgN 级别。这里的 2,3 指的是孩子的数目,图例:有两个孩子的节点和二叉搜索树一样,节点里有一个键,且大于左子树的键并小于右子树的键。...
2019-02-05 22:53:00 277
转载 Programming Assignment 5: Kd-Trees
编程作业五作业链接:Kd-Trees & Checklist我的代码:PointSET.java & KdTree.java问题简介是平衡树的几何应用中介绍的 2d 树,不再过多描述,要求实现范围查找和最近邻居这两个功能。任务摘要Brute-force implementation. Write a mutable data type PointSET.ja...
2019-02-05 22:53:00 331
转载 Geometric Search
几何搜索平衡搜索树(BST)在几何方面的应用,处理的内容变成几何对象,像点,矩形。1d range search先来看一维的情况,一维的范围搜索是后面的基础,处理的对象是在一条线上的点。这是符号表的一个小拓展,多了范围查找(range search) 和范围计数(range count)即希望知道给定范围上有哪些点或是有多少点。用无序链表来实现的话,插入直接放开头,但是范围查找和...
2019-02-05 22:53:00 379
转载 Programming Assignment 4: 8 Puzzle
编程作业四作业链接:8 Puzzle & Checklist我的代码:Board.java & Solver.java问题简介借助优先队列,实现解决八数码(8puzzle)问题的 A* 算法。八数码问题就是下面这样,移动方块重排数字,最后使其有序,希望找到最少的移动次数。 1 3 1 3 1 2 3 ...
2019-01-22 17:43:00 179
转载 Symbol Tables
符号表符号表是键值对的集合,支持给定键查找值的操作,有很多应用:APIput() 和 get() 是最基础的两个操作,为了保证代码的一致性,简洁性和实用性,先说下具体实现中的几个设计选择。泛型 我们在考虑方法时不指定在处理的键和值的类型,而是使用泛型。重复的键 每个键只对应一个值(表里没有重复的键),插入键值对的时候如果发现表里已经有这个键,那就更新该键值对的值。这些约定...
2019-01-22 17:43:00 191
转载 Priority Queue
优先队列集合性质的数据类型离不开插入删除这两操作,主要区别就在于删除的时候删哪个,像栈删最晚插入的,队列删最早插入的,随机队列就随便删,而优先队列删除当前集合里最大(或最小)的元素。优先队列有很多应用,举几个见过的像:数据压缩的哈夫曼编码、图搜索中的 Dijkstra 算法和 Prim 算法、人工智能里的 A* 算法等,优先队列是这些算法的重要组成部分。API and element...
2019-01-22 17:43:00 294
转载 Quicksort
快排快排是另一个经典的排序算法,在实际中也被广泛地应用。quicksort快排的基本思想:混洗(shuffle)打乱待排数组。这样划分(partition)数组:元素 a[j] 在排好的位置上。j 左边元素都不大于 a[j]。j 右边元素都不小于 a[j]。递归地排好 j 的左边和右边。混洗是为了保证算法性能,下面分析性能时再说。随机打乱了数组,这里划分时直...
2019-01-02 16:23:00 158
转载 Mergesort
归并排序归并排序和快速排序是两个经典的排序算法,是计算机的基础设施的重要组成部分,完整科学地理解它们的特性有助于我们将其用于实际的系统排序,快排也是二十世纪科学和工程领域的十大算法之一。mergesort归并排序基本思想:把数组分成两半,递归地排好每一半,合并有序的两半。另外,冯诺依曼被公认为“归并排序之父”。合并操作并不复杂,需要先拷贝到一个辅助数组,然后子数组从头开始对应比...
2019-01-02 16:23:00 175
转载 Programming Assignment 3: Pattern Recognition
编程作业三作业链接:Pattern Recognition & Checklist我的代码:BruteCollinearPoints.java & FastCollinearPoints.java & Point.java问题简介计算机视觉涉及分析视觉图像中的模式并重建产生它们的现实世界对象。该过程通常分为两个阶段:特征检测和模式识别。特征检测涉及选择图像...
2019-01-02 16:23:00 207
转载 Elementary Sorts
初级排序rules of the game排序是很常见的需求,把数字从小到大排,把字符串按字典序排等等,目标是能对任何类型的数据进行排序,这可以通过回调(callback)实现:Java 用接口实现回调,具体来说是可比较接口(Comparable),里面有个方法 compareTo(),大于小于等于分别返回 +1,-1 和 0,sort() 即调用这个方法来比较数据大小,不同类型...
2018-12-25 10:56:00 171
转载 Programming Assignment 2: Deques and Randomized Queues
编程作业二作业链接:Deques and Randomized Queues & Checklist我的代码:Deque.java & RandomizedQueue.java & Permutation.java问题简介Write a generic data type for a deque and a randomized queue. The g...
2018-12-25 10:37:00 175
转载 Stacks And Queues
栈和队列大型填坑现场,第一部分的还没写,以上。栈和队列是很基础的数据结构,前者后进先出,后者先进先出,如下图:下面开始将客户端和具体实现分开,这样有两个好处:一是客户端不知道实现的细节,但同时也会有很多不同实现来选择;二是实现方面也不知道客户端需求的细节,但同时很多客户端可以也重用一样的实现。接口就像把二者连接起来的桥梁。stacks栈的操作主要是出栈入栈,热身来一个放字符...
2018-12-25 10:29:00 361
转载 Programming Assignment 5: Burrows–Wheeler Data Compression
编程作业五作业链接:Burrows-Wheeler Data Compression & Checklist我的代码:MoveToFront.java & CircularSuffixArray.java & BurrowsWheeler.java问题简介Burrows-Wheeler 数据压缩算法包括三个部分:Burrows-Wheeler transf...
2018-09-02 23:47:00 222
转载 Data Compression
数据压缩introduction压缩数据可以节省存储数据需要的空间和传输数据需要的时间,虽然摩尔定律说集成芯片上的晶体管每 18-24 个月翻一倍,帕金森定律说数据会自己拓展来填满可用空间,但数据压缩还是最经济的做法。数据压缩的基本模型如下,很简单,压缩和解压,压缩率即 C(B) 和 B 的比特数之比。数据压缩的对象本质上是二进制文件,抽象层次是比特流,所以有必要贴下课程里怎么...
2018-08-28 16:24:00 616
转载 Regular Expressions
正则表达式Regular Expressions在文本中查找子字符串只是寻找一个单一的字符串,但经常的我们可能不知道这个字符串的完整信息,或是寻找的是吻合某种模式的一些字符串,即所谓 模式匹配(Pattern Matching)。正则表达式(Regular Expressions) 就是用来描述模式的,表示符合某种模式的字符串的集合(可能是无限的),它有下面几种基本操作:连接、...
2018-08-21 10:49:00 299
转载 Programming Assignment 4: Boggle
编程作业四作业链接:Boggle & Checklist我的代码:BoggleSolver.java问题简介Boggle 是一个文字游戏,有 16 个每面都有字母的骰子,开始随机将它们放在 4 * 4 的板子上,如图:图片来自:wiki。游戏双方就在上面找有效的单词,单词越长分数越高,有效的单词具体指:有效单词相邻字符的骰子也相邻,上下左右,对角线也行。有效单...
2018-08-14 23:41:00 570
转载 Substring Search
查找子字符串Introduction在长度为 N 的文本里寻找长度为 M 的模式(子串),典型情况是 N >> M。这个应用就很广泛啦,在文本中寻找特定的模式(子串)是很常见的需求。Brute Force我们先来了解一下暴力查找。就暴力地两个循环,查找文本的每个位置,最坏情况下需要近似 \(MN\) 次字符比较。稍微贴下代码:public static ...
2018-08-07 17:12:00 229
转载 Tries
单词查找树和以字符串为键的排序算法类似,以字符串为键的符号表也有更加高效的实现,可以避免检测整个键。于是乎,先贴下我们要实现的 API:R-way Tries单词查找树(Tires),来自 retrieval,为和‘tree’区分,读作‘try’。节点里存储字符而不是键。每个节点有 R(字母表大小,像拓展 ASCII 是 256)个孩子,分别表示可能的下一个字符。为了方便...
2018-08-01 10:31:00 218
转载 Radix Sorts
基数排序Strings In JavaChar Data TypeC 语言中的字符数据类型占一个字节(8 比特),最多只能表示 256 个字符。支持 7 位的标准 ASCII(American Standard Code for Information Interchange,美国标准信息交换编码),最高位用于奇偶校验。或是拓展的 ASCII,最高位用来确定附加的 128 个特殊的...
2018-07-27 23:05:00 123
转载 Programming Assignment 3: Baseball Elimination
编程作业三作业链接:Baseball Elimination & Checklist我的代码:BaseballElimination.java问题简介这是一个最大流模型的实际应用问题:篮球淘汰赛,设想你现在知道如下的比赛信息: w[i] l[i] r[i] g[i][j]i team wins loss l...
2018-07-20 11:10:00 182
转载 Maximum Flow and Minimum Cut
最大流最小割IntroductionMincut Problem最小割问题,输入是带权有向图,有一个源点 s(source)和一个汇点 t(target),边的权重在这里称作容量(capacity),是个正数。st-cut(cut): 把图的点分成两个集合 A 和 B,源点 s 和汇点 t 分别属于集合 A 和 B。capacity: 从集合 A 的点指向集合 B 的点的边的...
2018-07-15 15:24:00 752
转载 Programming Assignment 2: Seam Carving
编程作业二作业链接:Seam Carving & Checklist我的代码:SeamCarver.java问题简介接缝裁剪(Seam carving),是一个可以针对照片内容做正确缩放的算法(由 Shai Avidan 和 Ariel Shamir 所发表)。概念上,这个算法会找出好几条 seams,而这些 seams 是在照片中最不重要的一连串像素,接着再利用这些 ...
2018-06-27 17:58:00 210
转载 Shortest Paths
最短路径APIs带权有向图中的最短路径,这节讨论从源点(s)到图中其它点的最短路径(single source)。Weighted Directed Edge API需要新的数据类型来表示带权有向边。Weighted Directed Edge:implementationpublic class DirectedEdge { private final int ...
2018-06-22 18:53:00 311
转载 Minimum Spanning Trees
最小生成树Introduction图的生成树是它的一棵含有其所有顶点的无环连通子图。一幅加权无向图的最小生成树(MST)是它的一棵权值(树中所有边的权值之和)最小的生成树。Greedy Algorithm假定图是连通的,且各个边有不同的权值,这样图就会存在唯一一棵最小生成树。Cut Property切分将图的所有点分为两个非空且不重复的集合,横切边(crossing edg...
2018-06-17 16:54:00 117
转载 Programming Assignment 1: WordNet
编程作业一作业链接:WordNet & Checklist我的代码:WordNet.java & SAP.java & Outcast.java这是第二部分的编程作业,因为第二部分课程开始了,第一部分博客就先放放。问题简介WordNet 按字面意思就是单词网,它是一个有向图,点里面是同义的单词,边则指向具有更高层次的抽象含义的点。举例来说,有个点里面含{...
2018-06-11 16:52:00 250
转载 Directed Graphs
有向图Introduction就是边是有方向的,像单行道那样,也有很多典型的应用。点的出度指从这个点发出的边的数目,入度是指向点的边数。当存在一条从点 v 到点 w 的路径时,称点 v 能够到达点 w ,但要注意这并不意味着点 w 可以到达点 v 。Digraph API先给出表示有向图的 API 以及简单的测试用例,booksite-4.2 上可以找到完整的。API...
2018-06-08 00:40:00 629
转载 Undirected Graphs
无向图Introduction图是由边连接的点的集合,有着广泛的应用空间。一些图的术语,点,边,路径,环(圈),连通分量(子图)。简单路径不重复经过点,简单环不含有重复点和边,简单图不含自环和平行边。树是一幅无环连通图。互不相连的树组成的集合称为森林。连通图的生成树是它的一幅子图,它含有图中的所有顶点且是一棵树。图的生成树森林是它的所有连通子图的生成树的集合。当且仅当一幅...
2018-06-05 17:59:00 619
转载 Analysis of Algorithms
算法分析Introduction有各种原因要求我们分析算法,像预测算法性能,比较不同算法优劣等,其中很实际的一条原因是为了避免性能错误,要对自己算法的性能有个概念。科学方法(scientific method)也适用于算法分析,它提供了一个预测性能和比较算法的框架:Observe 观察真实世界的某些特征Hypothesize 根据观察结果提出假设模型Predict 用模型预...
2018-06-02 22:12:00 162
转载 Programming Assignment 1: Percolation
编程作业一作业链接:Percolation & Checklist我的代码:Percolation.java & PercolationStats.java编程解决上篇博客 Union-Find 最后提到的渗透问题(Percolation),写个电脑程序来估计阈值 p* 。任务摘要Percolation Data TypeTo model a percola...
2018-05-29 23:19:00 149
转载 Union Find
并查集前言来自知乎,Coursera 上普林斯顿大学的算法公开课,稍微来博客上写写记记。课程资源:1. Algorithms, Part I 2. Algorithms, Part II 3. Algorithms, 4th EditionDynamic Connectivity动态连通性问题,这里的连通是一个等价关系,满足:symmetric: 自反性, p 和 p 自...
2018-05-27 01:03:00 93
转载 软工实践作业之个人总结
作业原文一、请回望暑假时的第一次作业,你对于软件工程课程的想象对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?在和他人合作编码的方面得到了锻炼,不仅是在刚开始一对一的结对编程,后面的团队作业也是。写代码不单单是考虑实现相应的功能,还要尽量让代码规范易读...
2017-12-26 17:52:00 253
转载 个人作业之软件产品案例分析
案例分析:同学多多少少经历过一轮敏捷开发,对软件工程的一系列工程流程及团队内各个人员分工有了一定的了解。而实际企业的开发流程又是如何?华为软件开发云则是将华为近10年的软件研发实践及工具集一体的研发云平台。对比你们团队的开发流程与华为实际开发流程有何差别,孰赢孰弱?如果你来做会做的更好吗?通过各种案例分析,评测,辩论,总结,我们就能看到软件工程的原则在实践中的种种体现。附:华为软件...
2017-12-02 20:44:00 172
转载 软工实践之个人技术博客(α)
前言在团队里主要负责后端的代码实现,大概就是点击按钮能实现一定的功能这样,但本文只是写写入门 Android Studio 过程中一些想记录的东西,感觉算不上技术博客,主要就是 AS (本文中 AS 就是指 Android Studio)版的 HelloWorld 的实现及一些碰到的问题。学习的资源当初找了挺多,第一行代码、ANDROID学习之路、Android基础入门教程、Andr...
2017-11-16 20:02:00 106
转载 软工实践:结对项目第二次作业
项目的Github链接:matchStu&Dept作业原文:结对项目第二次作业1.结对成员031502142 张鹏031502216 江郑2.数据生成部分2.1 策略部门:部门编号:从D001到D020顺序生成,保证有20个部门纳新总数:随机,范围[10, 15],整型特点标签:约定总的标签合集,从中随机选取4-6个,保证两个以上常规活动:每周随机选取...
2017-10-09 19:54:00 170
转载 软工实践作业2:个人项目实战之Sudoku
Github:Sudoku项目相关要求项目需求利用程序随机构造出N个已解答的数独棋盘 。输入数独棋盘题目个数N(0<N<=1000000)。输出随机生成N个不重复的已解答完毕的数独棋盘,并输出到sudoku.txt中,输出格式见下输出示例。[2017.9.4 新增要求] 在生成数独矩阵时,左上角的第一个数为:(学号后两位相加)% 9 + 1。以上要求摘抄...
2017-09-09 14:27:00 277
转载 Chapter 5 Order Inversion Pattern
5.1 IntrodutionThe main focus of this chapter is to discuss the order inversion (OI) pattern, which can be used in solving some problems using MapReduce framework. The OI pattern enables us to ...
2017-09-03 21:11:00 162
转载 Python 流程控制
if语句运行示例:注意冒号和缩进,简单的一条语句可以直接跟在冒号后面。关键字elif是“else if”的缩写,可以有效地避免过深的缩进。if...elif...elif...相当于其他语言中的switch或case语句,最后的else是可选的。在Python中非零整数、长度不为零的字符串以及非空序列都为True。不要写出if x == True:这样的代码,明显if x...
2017-09-03 13:29:00 55
转载 Chapter 4 Left Outer Join in MapReduce
4.1 IntrodutionConsider a company such as Amazon, which has over 200 millions of users and possibly can do hundreds of millions of transactions per day. To show the concept of Left Outer Join, ...
2017-08-31 16:24:00 165
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人