# Overview

Metanautix now has Personal Quest online where individual users can download and do analytics on desktop. I have been working on a new systematic way to learn music theory and do musical analysis with mathematical matrix and vectors, and Quest is a critical tool in query on large dataset such as a pool of thousands of song scores. In this article, I will talk about my methodology in detail.

An overview for my system will be:

# 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