# BFS vs DFS

## Overview

• search algorithms for graphs and trees

• used for unordered graph and tree

• graph representation

• BFS

• scan each node in the each level
• while traversing each level, decide if target is found
• DFS

• follow on branch as far as possible until target is found or hit a leaf node
• if hit a leaf node, continue search at the nearest ancestor

## Comparison

• memory
• BFS uses a large amount of memory because need to store pointers to a level(serious problem if the tree is very wide)
• DFS uses less memory because no need to store all child pointers at a level
• depend on the data you search for
• look for people alive in family tree: DFS because targets are likely to be on the bottom of the tree
• look for people who died: BFS

• recursive

• iterative

• recursive
• iterative

## Solution

• BFS: complete algorithm, give optimal solution
• DFS: suboptimal solution

## Complexity

• BFS: worst time O(V+E), worst space O(V)
• DFS: worst time O(v+E), worst space O(V)

# Electronic MIDI Control on SG

Here is a quick showcase of a project I have been playing around with recently. An Midi Control Pad installed on SG being synced with an arduino. # Introduction for Noobs

During a software development, a team usually have different roles, each role is responsible at a certain stage of the development period. Summarizing them into a flowchart, it will show as follow: Git vs SVN such as Perforce: # Reset Porblems ## List

List add remove get contains next Data Structure
ArrayList O(1) O(n) O(1) O(n) O(1) Array
CopyOnWriteArrayList O(n) O(n) O(1) O(n) O(1) Array

## Set

Set add remove contains next size Data Structure
HashSet O(1) O(1) O(1) O(h/n) O(1) Hash Table
EnumSet O(1) O(1) O(1) O(1) O(1) Bit Vector
TreeSet O(log n) O(log n) O(log n) O(log n) O(1) Red-black tree
CopyOnWriteArraySet O(n) O(n) O(n) O(1) O(1) Array
ConcurrentSkipListSet O(log n) O(log n) O(log n) O(1) O(n) Skip List

## Queue

Queue offer peek poll remove size Data Structure
PriorityQueue O(log n) O(1) O(log n) O(n) O(1) Priority Heap
LinkedList O(1) O(1) O(1) O(1) O(1) Array
ArrayDequeue O(1) O(1) O(1) O(n) O(1) Linked List
ArrayBlockingQueue O(1) O(1) O(1) O(n) O(1) Array
PriorirityBlockingQueue O(log n) O(1) O(log n) O(n) O(1) Priority Heap
SynchronousQueue O(1) O(1) O(1) O(n) O(1) None!
DelayQueue O(log n) O(1) O(log n) O(n) O(1) Priority Heap

## Deque

Deque offer/offerLast peek poll/pollLast remove/removeLast Size Data Structure
LinkedList O(1) O(1) O(1) O(1) O(1) Array
ArrayDequeue O(1) O(1) O(1) O(n) O(1) Linked List

## Map

Map put get containsKey next Data Structure
HashMap O(1) ~ O(n) O(1) O(1) O(h / n) Hash Table
IdentityHashMap O(1) ~O(n) O(1) O(1) O(h / n) Array
WeakHashMap O(1) ~O(n) O(1) O(1) O(h / n) Hash Table
EnumMap O(1) ~O(n) O(1) O(1) O(1) Array
TreeMap O(log n) O(log n) O(log n) O(log n) Red-black tree
ConcurrentHashMap O(1) ~O(n) O(1) O(1) O(h / n) Hash Tables
ConcurrentSkipListMap O(1) ~O(n) O(log n) O(log n) O(1) Skip List

# Java Data Structure Review

Interesting Summary for inheritances and relationships of default Java Data Structure I feel like it’s more fun to summarize built in Java 7 data structures using this kinda graph. This should be a on going project as well as I could prepare for my first year exams :)

# Collection

`(interface)` can’t be instantiated. i.e. `Queue<Interger> queue = new Queue<Integer>(); // will print error` 