[DS Basics] Data structures
1, LinkedList
composed of one and one Node: [data][next].
[head] -> [data][next] -> [data][next] -> [data][next] -> [null].
Empty linkedList: head == null.
V.S. Array DS: fast at insert/delete.
2, hashtable
“数组可以通过下标直接定位到相应的空间”,对就是这句,哈希表的做法其实很简单,就是把Key通过一个固定的算法函数,既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里,而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位。
![]()
Hash tables are O(1) average and amortized case complexity, however is suffers from O(n) worst case time complexity.
Hash tables suffer from O(n) worst time complexity due to two reasons:
- If too many elements were hashed into the same key: looking inside this key may take
O(n)time. - Once a hash table has passed its load balance - it has to rehash [create a new bigger table, and re-insert each element to the table].
HashMap<T>也是buckets的概念,但是如果你只override了T class的hashcode()方法返回constant,那么当你往这个HashMap里存放多个object的时候,它们都被hash到了同一个bucket,但它们还是会被当成不同的value来处理。所以只override hashcode()是不够的。
Collision resolution
大多数的hashtable implementations都有collision resolution strategy,所有的方法都会需要将keys(或指向key的指针)随同associated values也存到table中。
Separate chaining:
这种方法中each bucket has some sort of list of entries with the same index. 用Linked lists的Chained hash table很流行,有时会选择用ordered linked list。
3, Binary tree
Binary tree: at most 2 child nodes.
Full Binary tree: depth k and have 2^k -1 nodes.
Binary search tree: left child node< current node< right child node
Define BinaryNode:
class BinaryNode {
BinaryNode left;
BinaryNode right;
int element;
public BinaryNode(int element) {
this.element = element;
left = right = null;
}
}
Function to see if a tree is a BST:
public boolean isBST() {
return isBST(root, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
private boolean isBST2(BinaryNode currRoot, int low, int high) { //注意最低限和最高限,并且不断update它
if(currRoot.left != null) {
if(currRoot.left.element < low || currRoot.left.element > currRoot.element || !isBST2(currRoot.left, low, currRoot.element))
return false;
}
if(currRoot.right != null) {
if(currRoot.right.element > high || currRoot.right.element < currRoot.element || !isBST2(currRoot.right, currRoot.element, high))
return false;
}
return true;
}
Breadth-First-Search:[Queue], 这个算法就是要用Queue来实现, Java只有Queue interface, extends Collection
public void bfs() {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
if(root== null) return;
queue.add(root);
while(!queue.isEmpty()) {
TreeNode node = queue.remove(); //LinkedList.remove() will remove the head of the linked list
System.out.print(node.val + " ");
if(node.left != null) queue.add(node.left);
if(node.right != null) queue.add(node.right);
}
}
Depth-First-Search:[Stack] Java有Stack class, implements List interface. 方法peek()返回top,方法pop()返回top并移除。
4, AVL tree
is a self balancing Binary Search Tree, In an AVL tree, the height of two sub-trees of ANY node can not differ more than 1. If any time the height differs more than 1, rebalancing is done to restore the property.
Rebalancing: LL, RR, LR, RL.
[DS Basics] Data structures的更多相关文章
- 【DataStructure】Linked Data Structures
Arrayss work well for unordered sequences, and even for ordered squences if they don't change much. ...
- A library of generic data structures
A library of generic data structures including a list, array, hashtable, deque etc.. https://github. ...
- The Swiss Army Knife of Data Structures … in C#
"I worked up a full implementation as well but I decided that it was too complicated to post in ...
- 剪短的python数据结构和算法的书《Data Structures and Algorithms Using Python》
按书上练习完,就可以知道日常的用处啦 #!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving wit ...
- Persistent Data Structures
原文链接:http://www.codeproject.com/Articles/9680/Persistent-Data-Structures Introduction When you hear ...
- Go Data Structures: Interfaces
refer:http://research.swtch.com/interfaces Go Data Structures: Interfaces Posted on Tuesday, Decembe ...
- Choose Concurrency-Friendly Data Structures
What is a high-performance data structure? To answer that question, we're used to applying normal co ...
- 无锁数据结构(Lock-Free Data Structures)
一个星期前,我写了关于SQL Server里闩锁(Latches)和自旋锁(Spinlocks)的文章.2个同步原语(synchronization primitives)是用来保护SQL Serve ...
- [CareerCup] 10.2 Data Structures for Large Social Network 大型社交网站的数据结构
10.2 How would you design the data structures for a very large social network like Facebook or Linke ...
随机推荐
- Just a Hook(HDU1698 线段树的简单应用)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Prob ...
- Response.Clear()和Response.ClearContent()区别
Response.Clear()方法 Clear方法删除所有缓存中的HTML输出.但此方法只删除Response显示输入信息,不删除Response头信息. Response.ClearContent ...
- Android 获取全部应用
package com.lvshandian.menshen.download;import android.content.Context;import android.content.Inte ...
- Linux基础※※※※如何使用Git in Linux(二)
参考资料: 1. http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 2. Git-简 ...
- 深入浅出设计模式——简单工厂模式(Simple Factory)
介绍简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导,所以我想 ...
- 关于xcode不同版本打开相同工程问题
今天刚下好了xcode7正式版,于是乎用其创建一个工程.随后关闭此工程用xcode6.3打开此工程.发现报错不能运行,随后网上查资料,可惜中文版的资料几乎可以说是没有,因此写下此文,以方便其他遇到此情 ...
- Deep Learning 12_深度学习UFLDL教程:Sparse Coding_exercise(斯坦福大学深度学习教程)
前言 理论知识:UFLDL教程.Deep learning:二十六(Sparse coding简单理解).Deep learning:二十七(Sparse coding中关于矩阵的范数求导).Deep ...
- 动态内存分配导致Javascript性能的问题
内存分配对性能的影响是很大的,分配内存本身需要时间,垃圾回收器回收内存也需要时间,所以应该尽量避免在堆里分配内存.不过直到最近优化HoLa cantk时,我才深刻的体会到内存分配对性能的影响,其中有一 ...
- solr 6.1 服务端 tomcat 搭建及调用
一.下载 apache solr6.1.0 最新版本zip,解压缩生成一个solr6.1.0文件夹 二.安装 1.在d:/projects下新建一个solr 2.把solr6.1.0/server/s ...
- cxf的soap风格+spirng4+maven 客户端
上篇博客介绍了,cxf的soap风格的服务端,现在我们写客户端来调用 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...