数据结构与算法
_萤火
这个作者很懒,什么都没留下…
展开
-
数据结构与算法总结——二叉查找树及其相关操作
我实现了如下操作插入,查找,删除,最大值树的高度,子树大小二叉树的范围和,范围搜索树的前序,中序,后序三种遍历rank前驱值在这一版本的代码中,我使用了类模板将接口与实现分离,在这之中,遇到了许多问题:当类模板和实现分别在两个文件中实现时,需要直接包含实现文件而不是模板文件实现文件中,返回类中自定义的数据结构(如结构体)前要加上类名,并且要在前面加入typename...原创 2018-11-21 16:34:34 · 138 阅读 · 0 评论 -
数据结构与算法总结——常见排序算法
本文包含的排序算法冒泡排序插入排序选择排序归并排序快速排序希尔排序堆排序桶排序基数排序本文关于C++ 的知识点尽量使用vector代替数组尽量使用std::move代替传值++i 比 i++ 更高效,后者需要复制出一个临时副本来完成当前操作comparator(比较器),当数据类型本身不支持比较(如自定义类),而你又不想改变这个数据类型本身,于是需要从外部传入一...原创 2018-11-21 21:49:36 · 143 阅读 · 0 评论 -
数据结构与算法总结——字符串算法
字符串排序低位优先从最右面开始排序,适合所有字符串长度一样的情况临时数组count大小为全部键的数量加1比如ASCII码全部键的数量为128加1是因为使用字符串某一位字符累加count数组时,不是累加对应的位置,而是加一位原因是当第二遍累加后,count数组的含义为以该字符为键的字符串第一次出现在原数组中的位置,这原本应该是前面的字符串数量加上一,又因为位置从0开始计数...原创 2019-09-17 08:21:40 · 321 阅读 · 0 评论 -
数据结构与算法总结——平衡二叉树(未完待续)
AVL树一般的二叉树只有在输入完全随机时才能实现nlogn的复杂度,最坏可到达n^2AVL树保证每个子根的左右子树的高度最大相差1,从而保证了nlogn的复杂度除了插入和删除外,其余操作的实现和普通二叉树无异主要多的操作就是左右旋转来实现再平衡和红黑树相比,AVL树的搜索操作更快,但是插入和删除操作更慢#pragma once#ifndef AVL_H#define AVL_H...原创 2018-12-03 18:03:16 · 108 阅读 · 0 评论 -
算法 1.3节:栈的数组和链表实现
栈的数组实现import java.util.Iterator;public class Stack<T> implements Iterable<T> { private T[] stack = (T[]) new Object[1]; private int N = 0; public boolean isEmpty(){ return N == 0;原创 2018-01-04 20:24:00 · 160 阅读 · 0 评论 -
算法 1.5节:带路径压缩的加权并查集
import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class UF_1{ private int[] id; private int[]sz; private int count; public UF_1(int N) { cou原创 2018-01-01 21:20:10 · 1092 阅读 · 0 评论 -
算法 2.1节 希尔排序、选择与插入排序的区别、排序的稳定性
希尔排序public class ShellSort { public static void sort(Comparable[] a) { int n = a.length; int h = 1; while (h 3) h = 3 * h + 1; while (h >= 1) { for原创 2018-01-09 02:24:07 · 420 阅读 · 0 评论 -
算法 2.2节 两种归并算法及其改进
改进后的归并算法(未完成)import edu.princeton.cs.algs4.StdOut;import edu.princeton.cs.algs4.StdIn;public class Merge { static private final int critical = 7; private Merge(){} static public原创 2018-01-10 18:41:02 · 633 阅读 · 0 评论 -
算法 2.3节 有重复数据和没有的快速排序
import edu.princeton.cs.algs4.StdRandom;public class Quick { private Quick() { } public static void sort( Comparable[] a ) { StdRandom.shuffle(a);//随机化初始数组 sort(a, 0原创 2018-01-11 15:18:46 · 949 阅读 · 0 评论 -
算法 2.4节 堆排序及其改进、索引优先队列
堆排序public class Heap { public static void sort(Comparable[] pq) { int N = pq.length; for (int k = N/2; k >=1; k --) sink(pq, k, N); while (N > 1) {原创 2018-01-12 23:05:51 · 365 阅读 · 0 评论 -
算法 3.2节 二叉查找树
根据书上的代码,用了递归的方法实现二叉查找树的各项功能,很多地方比较难理解,费了不少功夫import java.util.Iterator;import java.util.Stack;public class BST { private Node root; private class Node { private int key; ...原创 2018-03-11 13:56:09 · 152 阅读 · 0 评论 -
算法 3.3节 红黑树和B树
红黑树的查询等操作的实现均与二叉树一致,只有插入与删除不同public class RBT { private Node root; private static boolean RED = true; private static boolean BLACK = false; private class Node { private ...原创 2018-03-14 16:16:31 · 124 阅读 · 0 评论 -
算法 3.4节 两种哈希树的实现
链表对象public class LinkedList<Key,Value> { private Node first; private class Node { Key key; Value val; Node next; public Node(Key key, Value val, N...原创 2018-03-14 15:57:20 · 490 阅读 · 0 评论 -
算法 4.1节 无向图中DFS,BFS的实现和应用
//图对象import edu.princeton.cs.algs4.Bag;public class Graph { private final int V; private int E; private Bag<Integer>[] adj; public Graph(int V) { this.V = V; ...原创 2018-04-08 19:33:28 · 488 阅读 · 0 评论 -
算法 4.2节 有向图中环的判定以及Kosaraju算法实现强连通分量
//有向图判定import java.util.Stack;public class DirectedCircle { private boolean[] marked; private boolean[] onStack; private int[] edgeTo; private Stack<Integer> circle; publ...原创 2018-04-11 15:58:07 · 229 阅读 · 0 评论 -
算法 4.3节 两种Prim算法和Kruskal算法的最小生成树
//Edgepublic class Edge implements Comparable<Edge> { private final int v; private final int w; private final double weight; public Edge(int v, int w, double weight) { ...原创 2018-04-13 15:21:29 · 155 阅读 · 0 评论 -
算法 4.4节 Dijkstra算法,拓扑排序算法,bellman-ford算法(暂缺))实现最小路径
// Dijkstra算法import edu.princeton.cs.algs4.IndexMinPQ;public class Dijkstra { private double[] disTo; private Edge[] edgeTo; private IndexMinPQ<Double> pq; public Dijkstra(Ed...原创 2018-04-14 14:55:09 · 188 阅读 · 0 评论 -
算法 5.1 三种字符串排序方法
//LSDpublic class LSD { public static void sort(String[] a, int w) { int N = a.length; int R = 256; String[] aux = new String[N]; for (int i = w - 1; i >= 0; i...原创 2018-05-07 15:31:59 · 352 阅读 · 0 评论 -
算法 5.2 两种单词查找树
//R-ways TSTimport edu.princeton.cs.algs4.Queue;public class RTST { private static final int R = 256; private Node root; private class Node { Object val; Node[] next = ...原创 2018-05-11 14:44:23 · 174 阅读 · 0 评论 -
算法 5.3 三种子字符串查找算法
//KMP算法public class KMP { private String pat; private int[][] dfa; public KMP(String pat) { int len = pat.length(); this.pat = pat; int R =256; dfa = new ...原创 2018-05-11 22:37:19 · 244 阅读 · 0 评论 -
算法 5.4 正则表达式的实现
//NFAimport edu.princeton.cs.algs4.*;public class NFA { private Digraph G; private char[] ch; private int N; public NFA(String regexp) { Stack<Integer> ops = new Sta...原创 2018-05-17 21:34:15 · 168 阅读 · 0 评论 -
算法 5.5 霍夫曼压缩和LZW压缩
//Huffmanimport edu.princeton.cs.algs4.*;import edu.princeton.cs.algs4.MinPQ;public class Huffman { private final int R = 256; private class Node implements Comparable<Node>{ ...原创 2018-05-17 21:36:06 · 1126 阅读 · 0 评论 -
算法 6.4节 Ford-Fulkerson最大流算法
import edu.princeton.cs.algs4.Queue;public class FordFulkerson { private double value; private boolean[] marked; private FlowEdge[] edgeTo; public FordFulkerson(FlowNetwork G, int s...原创 2018-05-06 21:55:52 · 167 阅读 · 0 评论 -
归并排序的改进
转载:勇幸|Thinking (http://www.ahathinking.com)归并排序算法思想:分而治之分解:把长度为n 的待排序列分解成 两个长度为n/2 的序列治理:对每个子序列分别调用归并排序,进行递归操作。当子序列长度为1 时,序列本身有序,停止递归合并:合并每个排序好的子序列归并排序采用分治法(Divide and Conquer)的一个应用,先使每个子序转载 2018-01-09 14:33:58 · 1362 阅读 · 0 评论 -
逆波兰表达式
逆波兰表达式转自: 点击打开链接表达式一般由操作数(Operand)、运算符(Operator)组成,例如算术表达式中,通常把运算符放在两个操作数的中间,这称为中缀表达式(Infix Expression),如A+B。波兰数学家Jan Lukasiewicz提出了另一种数学表示法,它有两种表示形式:把运算符写在操作数之前,称为波兰表达式(Po转载 2018-01-07 15:20:29 · 858 阅读 · 0 评论 -
princeton algorithms part 1 第四周作业题
//solver.java的debug未完成另外以后我将把我的project代码都放在GitHub上了:https://github.com/wuwentao1998//Board.javaimport edu.princeton.cs.algs4.In;import edu.princeton.cs.algs4.StdOut;import java.util.Stack;impo...原创 2018-03-08 19:34:46 · 528 阅读 · 0 评论 -
princeton algorithms part 1 第三周作业题
pointimport java.util.Comparator;import edu.princeton.cs.algs4.StdDraw;public class Point implements ComparablePoint> { private final int x; // x-coordinate of this point private原创 2018-01-14 16:33:55 · 1007 阅读 · 0 评论 -
princeton algorithms part 1 第二周作业题
Dequeimport java.util.Iterator;public class Deque<Item> implements Iterable<Item> { private int N; private Node first; private Node last; private class Node { private Item node原创 2018-01-08 21:11:39 · 926 阅读 · 0 评论 -
princeton algorithms part 1 第一周作业题
import edu.princeton.cs.algs4.WeightedQuickUnionUF;public class Percolation { private WeightedQuickUnionUF uf; private WeightedQuickUnionUF uf_backwash; private int n; private boolean[]原创 2018-01-03 02:01:28 · 1344 阅读 · 0 评论 -
Stanford 算法 part II:第一周编程题
本周编程题没写,故转载别人的答案以作记录 答案转自:http://blog.csdn.net/zhaoxinfan/article/details/9713517 (比我写的好太多了。。。)#include <iostream> #include <fstream> #include <cstdio> #include <vector> #define N 875714 us转载 2017-11-28 14:11:18 · 195 阅读 · 0 评论 -
Stanford 算法 part I:第四周编程题
还没来得及测试,也不知道对不对省略读入文件,默认读入array[200][200]中 C语言编写#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<stdlib.h>#include<time.h>int main(void){ srand((unsigned int)time(NULL)); int ar原创 2017-11-25 16:29:46 · 566 阅读 · 0 评论 -
Stanford 算法 part I:第三周编程题
三道题基本上差不多,我就只贴第一题了 同样还是省略读入文件,假设读入数组array 使用语言为C语言int quicksort(long* array, int low, int high){ if (low >= high) return 0; int pivot = array[low],i=low+1,j=low+1; for (j; j <= h原创 2017-11-18 21:24:05 · 479 阅读 · 0 评论 -
Stanford 算法 part I:第二周编程题
这里只列出了核心算法,读入文件的过程省略了,默认读入了array数组 使用语言为C语言#include<stdio.h>#include<stdlib.h>long merge(long* array,int low,int mid,int high){ long count=0; int i = low; int j = mid + 1; long* tem原创 2017-11-18 10:31:59 · 227 阅读 · 0 评论