diff --git a/AI/Classification/Supervised/SVM.md b/AI/Classification/Supervised/SVM.md index 8efccda..52f4661 100644 --- a/AI/Classification/Supervised/SVM.md +++ b/AI/Classification/Supervised/SVM.md @@ -5,11 +5,11 @@ - Optimal hyperplane for a space - Margin maximising hyperplane - Can be used for - - Classification + - [Classification](../Classification.md) - SVC - Regression - SVR -- Alternative to Eigenmodels for supervised classification +- Alternative to Eigenmodels for [supervised](../../Learning.md#Supervised) classification - For smaller datasets - Hard to scale on larger sets diff --git a/AI/Neural Networks/CNN/FCN/Super-Resolution.md b/AI/Neural Networks/CNN/FCN/Super-Resolution.md index ca66cf2..a823e14 100644 --- a/AI/Neural Networks/CNN/FCN/Super-Resolution.md +++ b/AI/Neural Networks/CNN/FCN/Super-Resolution.md @@ -4,7 +4,7 @@ - Bi-cubic - Encode-decode to deep sharpen - No ground truth - - Unsupervised? + - [Unsupervised](../../../Learning.md#Un-Supervised)? - Decoder stage - Identical architecture to encoder ![super-res](../../../../img/super-res.png) diff --git a/AI/Neural Networks/CNN/GAN/GAN.md b/AI/Neural Networks/CNN/GAN/GAN.md index 622fd0d..6220502 100644 --- a/AI/Neural Networks/CNN/GAN/GAN.md +++ b/AI/Neural Networks/CNN/GAN/GAN.md @@ -2,7 +2,7 @@ - Remove [Max Pooling](../Max%20Pooling.md) - Use strided [UpConv](../UpConv.md) - Remove [FC](../../MLP/MLP.md) layers - - Hurts convergence in non-classification + - Hurts convergence in non-[classification](../../../Classification/Classification.md) - Normalisation tricks - Batch normalisation - Batches of 0 mean and variance 1 diff --git a/AI/Neural Networks/CNN/GAN/cGAN.md b/AI/Neural Networks/CNN/GAN/cGAN.md index 54a1f85..870cceb 100644 --- a/AI/Neural Networks/CNN/GAN/cGAN.md +++ b/AI/Neural Networks/CNN/GAN/cGAN.md @@ -5,7 +5,7 @@ Conditional [GAN](GAN.md) - Condition synthesis on a class label - Concatenate unconditional code with conditioning vector - Label -- No longer unsupervised +- No longer [unsupervised](../../../Learning.md#Un-Supervised) - Everything labelled - Fake images and dataset - **Requires pairing** diff --git a/AI/Neural Networks/CNN/Interpretation.md b/AI/Neural Networks/CNN/Interpretation.md index 5be7f8c..9037b22 100644 --- a/AI/Neural Networks/CNN/Interpretation.md +++ b/AI/Neural Networks/CNN/Interpretation.md @@ -12,7 +12,7 @@ - Update image ![am-process](../../../img/am-process.png) -## Regulariser +## R3egulariser - Fit to natural image statistics - Prone to high frequency noise - Minimise diff --git a/AI/Neural Networks/Deep Learning.md b/AI/Neural Networks/Deep Learning.md index b5d6ca1..7aa8c17 100644 --- a/AI/Neural Networks/Deep Learning.md +++ b/AI/Neural Networks/Deep Learning.md @@ -1,5 +1,7 @@ ![deep-digit-classification](../../img/deep-digit-classification.png) +OCR [Classification](../Classification/Classification.md) + # Loss Function Objective Function diff --git a/AI/Neural Networks/MLP/MLP.md b/AI/Neural Networks/MLP/MLP.md index c918aa7..19cd0e4 100644 --- a/AI/Neural Networks/MLP/MLP.md +++ b/AI/Neural Networks/MLP/MLP.md @@ -3,7 +3,7 @@ - Universal approximation theorem - Each hidden layer can operate as a different feature extraction layer - Lots of [weights](../Weight%20Init.md) to learn -- [Back-Propagation](Back-Propagation.md) is supervised +- [Back-Propagation](Back-Propagation.md) is [supervised](../../Learning.md#Supervised) ![mlp-arch](../../../img/mlp-arch.png) diff --git a/AI/Neural Networks/Properties+Capabilities.md b/AI/Neural Networks/Properties+Capabilities.md index 3eae1b9..b4ff0e7 100644 --- a/AI/Neural Networks/Properties+Capabilities.md +++ b/AI/Neural Networks/Properties+Capabilities.md @@ -6,7 +6,7 @@ # Input-Output Mapping - Map input signal to desired response - - Supervised learning + - [Supervised](../Learning.md#Supervised) learning - Similar to non-parametric statistical inference - Non-parametric as in no prior assumptions - No probabilistic model diff --git a/AI/Neural Networks/RNN/Representation Learning.md b/AI/Neural Networks/RNN/Representation Learning.md index 4cc42a4..213c173 100644 --- a/AI/Neural Networks/RNN/Representation Learning.md +++ b/AI/Neural Networks/RNN/Representation Learning.md @@ -1,4 +1,4 @@ -# Unsupervised +# [Un-Supervised](../../Learning.md#Un-Supervised) - Auto-encoder FCN - Learns bottleneck (latent) representation @@ -6,7 +6,7 @@ - $f(.)$ is CNN encoding function ![](../../../img/unsup-representation-learning.png) -# Supervised +# [Supervised](../../Learning.md#Supervised) - Triplet loss - Providing positive and negative requires supervision - Two losses diff --git a/AI/Pattern Matching/Markov/Markov.md b/AI/Pattern Matching/Markov/Markov.md index e69de29..02db462 100644 --- a/AI/Pattern Matching/Markov/Markov.md +++ b/AI/Pattern Matching/Markov/Markov.md @@ -0,0 +1,56 @@ +[Hidden Markov Models - JWMI Github](https://jwmi.github.io/ASM/5-HMMs.pdf) +[Rabiner - A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition](https://www.cs.cmu.edu/~cga/behavior/rabiner1.pdf) + +- Stochastic sequences of discrete states + - Transitions have probabilities +- Desired output not always produced the same + - Same pronunciation + +![](../../../img/markov-state.png) + +$$P(X|M)=\left(\prod_{t=1}^Ta_{x_{t-1}x_t}\right)\eta_{x_T}$$ +$$a_{x_0x_1}=\pi_{x_1}$$ + +# 1st Order +- Depends only on previous state + - Markov assumption + +$$P(x_t=j|x_{t-1}=i,x_{t-2}=h,...)\approx P(x_t=j|x_{t-1}=i)$$ + +- Described by state-transition probabilities + +$$a_{ij}=P(x_t=j|x_{t-1}=i), 1\leq i,j\leq N$$ + +- $\alpha$ + - State transition +- For $N$ states + - $N$  by $N$ matrix of state transition probabilities + +# Weather + +![](../../../img/markov-weather.png) +$$A=\left\{a_{ij}\right\}=\begin{bmatrix} 0.4 & 0.3 & 0.3\\ 0.2 & 0.6 & 0.2 \\ 0.1 & 0.1 & 0.8 \end{bmatrix}$$ +rain, cloud, sun across columns and down rows +$$A=\{\pi_j,a_{ij},\eta_i\}=\{P(x_t=j|x_{t-1}=i)\}$$ + +# Start/End +- Null states + - Entry/exit states + - Don't generate observations + +![](../../../img/markov-start-end.png) +$$\pi_j=P(x_1=j) \space 1 \leq j \leq N$$ +- Sub $j$ because probability of kicking off into that state +$$\eta_i=P(x_T=i) \space 1 \leq i \leq N$$ +- Sub $i$ because probability of finishing from that state + +![](../../../img/markov-start-end-probs.png) +![](../../../img/markov-start-end-matrix.png) + +# State Duration +- Probability of staying in state decays exponentially +$$p(X|x_1=i,M)=(a_{ii})^{\tau-1}(1-a_{ii})$$ +![](../../../img/markov-state-duration.png) +- Given, $a_{33}=0.8$ +- $\times0.8$ repeatedly + - Stay in state \ No newline at end of file diff --git a/AI/Searching/Informed.md b/AI/Searching/Informed.md new file mode 100644 index 0000000..4fbfb52 --- /dev/null +++ b/AI/Searching/Informed.md @@ -0,0 +1,43 @@ +# Best First + +- Uniform cost uses an evaluation function + - Doesn't necessarily direct towards goal + - Doesn't know how far to goal + - Only cost so far + - Still blind +- Look forward + - Lot of techniques aiming to define best node + +1. Expand node closest to goal + - Greedy +2. Expand node on least cost solution path + - A* + +# Greedy +- **Estimate** distance to goal + - Often can't determine exactly + - This cost is a heuristic +- Could be crow-flies distance +- Expand nodes in increasing order of heuristic cost +- **Fast** +- **Not optimal** + - Simple heuristic + +# A* +- Combines advantages of uniform cost and greedy search +- ***Optimal & Complete*** +- $h(n)$ + - Estimate of distance to goal + - Greedy +- $g(n)$ + - Cost of cumulative path + - *Uniform cost* +- $f(n)=g(n)+h(n)$ +- Heuristic must be ***admissible*** + - Underestimates the distance to the goal + - Never overestimates + - Monotonic +- Expand other low cost paths +- Pathmax + - For heuristics which might not be monotonic + - Select last option if going in wrong direction \ No newline at end of file diff --git a/AI/Searching/README.md b/AI/Searching/README.md new file mode 120000 index 0000000..7e2aac6 --- /dev/null +++ b/AI/Searching/README.md @@ -0,0 +1 @@ +Searching.md \ No newline at end of file diff --git a/AI/Searching/Searching.md b/AI/Searching/Searching.md new file mode 100644 index 0000000..d7f917d --- /dev/null +++ b/AI/Searching/Searching.md @@ -0,0 +1,60 @@ +# [Uninformed](Uninformed.md) +- Breadth First +- Uniform Cost +- Depth First +- Depth Limited +- Iterative Deepening +- Bi-directional + +## Characteristics +- Goal-led +- No information on # steps +- General purpose + - Weak + - Optimal + - Exact + +# [Informed](Informed.md) +- Best First +- Greedy +- Route Planning +- A* + +## Characteristics +- Knowledge used to limit # possibilities +- Intelligent heuristic methods +- May give sub-optimal / wrong results + +# Exhaustive +- All possibilities + +# Evaluation +- Completeness + - Guaranteed to find a solution? +- Time Complexity + - How long? +- Space Complexity + - How much memory? +- Optimality + - Is solution the best solution? + +# Queuing +- Search strategy dictates which nodes on frontier to expand in which order +- Easiest to implement as a queue +- Breadth first + - New nodes to back of queue +- Depth first + - New nodes added to front of queue + - Likely need to use recursion +- Uniform cost + - Nodes added to queue in order of lowest cost first + +# Abstraction +- Remove superfluous information +- Represent problem in ***state space*** + - States reachable from initial state by actions is ***path*** + + +![](../../img/searching-graph.png) + +![](../../img/searching-graph-tree.png) \ No newline at end of file diff --git a/AI/Searching/Uninformed.md b/AI/Searching/Uninformed.md new file mode 100644 index 0000000..ed7de51 --- /dev/null +++ b/AI/Searching/Uninformed.md @@ -0,0 +1,44 @@ +# Breadth First +- Uniform cost with cost function proportional to depth +- All of each layer +- Max nodes before solution + - $=1+b+b^2+b^3+b^4+...+b^n$ +- Time, space complexity = $O(b)^d$ + - Exponential + - Lots of time but complete and optimal +- Goal at depth, $d1$ + - $1+b+b^2+b^3+b^4+...+b^{d-1}=\frac{b^d-1}{b-1}$ +- Average at $\frac{1+b^d}{2}$ terminal nodes + +![](../../img/search-breadth-first.png) + +# Depth First +- Between $(1+d)$ and $(\frac{b^{d+1}-1}{b-1})$   + - If at left hand side or right hand side +- Much less memory space than BFS + - Non-optimal, non-complete +![](../../img/depth-first.png) +![](../../img/depth-first-cons.png) + +## Depth Limited +- Predetermined max depth +- Only complete if max depth is sufficiently large + - Hard to determine + + +# Bi-Directional +- Out from start and goal until they meet +- If done with heuristics + - May not crossover + +![](../../img/search-bidirectional.png) + +# Iterative Deepening +- Combine BFS and DFS + +![](../../img/search-lim1.png) +![](../../img/search-lim2.png) +![](../../img/search-lim3.png) +![](../../img/search-lim3-2.png) +![](../../img/search-lim4.png) +![](../../img/search-lim-goal.png) diff --git a/CS/Languages/Javascript.md b/CS/Languages/Javascript.md new file mode 100644 index 0000000..2cebcee --- /dev/null +++ b/CS/Languages/Javascript.md @@ -0,0 +1,29 @@ +[https://www.learnui.design/blog/spice-up-designs.html](https://www.learnui.design/blog/spice-up-designs.html) + +# Modules +- For splitting files + +## import +`import defaultExport from "module-name";` +`import { export1, export2 } from "module-name";` + +- Read-only live bindings + - Exported from another module +- Come in strict mode + +### Dynamic Import +- Conditionally or on demand + +`import('/modules/module.js')` + `.then((module) => {` + `// Do something` + `});` + +`let module = await import('/modules/module.js');` + +## Export +- Stick in front of statements + +`export const name = 'square';` +`export function …` +`export { name, draw, reportArea, reportPerimeter };` \ No newline at end of file diff --git a/CS/Languages/Python.md b/CS/Languages/Python.md index 3933be9..e8c229a 100644 --- a/CS/Languages/Python.md +++ b/CS/Languages/Python.md @@ -18,7 +18,7 @@ Publication-quality Graphs [NLTK](https://www.nltk.org) NLP -If you are not getting good results, you should first check that you are using the right classification algorithm (is your data well fit to be classified by a linear SVM?) and that you have enough training data. Practically, that means you might consider visualizing your dataset through PCA or t-SNE to see how "clustered" your classes are, and checking how your classification metrics evolve with the amount of data your classifier is given. +If you are not getting good results, you should first check that you are using the right [classification](../../AI/Classification/Classification.md) algorithm (is your data well fit to be classified by a linear SVM?) and that you have enough training data. Practically, that means you might consider visualizing your dataset through PCA or t-SNE to see how "clustered" your classes are, and checking how your classification metrics evolve with the amount of data your classifier is given. If you then confirm that investing in tweaking your linear SVM is the right way to approach your problem, you can look at modifying the class weights. Note then that what you suggest as weights is probably the opposite of what you want to do: you are giving more weights to less frequent classes, marginalizing them further - said differently, you typically want to use weights that are inversely proportional to class frequencies. You can calculate these manually, or you can let sklearn do it automatically for you by specificing class_weight='balanced'. diff --git a/CS/Languages/dotNet.md b/CS/Languages/dotNet.md index bfe54ea..feaf549 100644 --- a/CS/Languages/dotNet.md +++ b/CS/Languages/dotNet.md @@ -30,4 +30,8 @@ - Portable executable (PE) - DLL, EXE -![cli-infrastructure](../../img/cli-infrastructure.png) \ No newline at end of file +![cli-infrastructure](../../img/cli-infrastructure.png) + +## Resources +[Make microservices fun again with Dapr](https://www.daveabrock.com/2021/04/29/meet-dapr/) +[Dapr for .NET](https://docs.microsoft.com/en-gb/dotnet/architecture/dapr-for-net-developers/) \ No newline at end of file diff --git a/CS/Resources.md b/CS/Resources.md index fa14fe4..96aa880 100644 --- a/CS/Resources.md +++ b/CS/Resources.md @@ -1,2 +1,7 @@ #lit [Wigle - wifi enumerating](http://wigle.net) + +[0xAX/linux-insides book](https://github.com/0xAX/linux-insides) +[s-matyukevich/raspberry-pi-os](https://github.com/s-matyukevich/raspberry-pi-os) + +[binhnguyennus/awesome-scalability](https://github.com/binhnguyennus/awesome-scalability) \ No newline at end of file diff --git a/IOT/Cyber-Physical Systems.md b/IOT/Cyber-Physical Systems.md new file mode 100644 index 0000000..a760f0f --- /dev/null +++ b/IOT/Cyber-Physical Systems.md @@ -0,0 +1,21 @@ +- Highly pervasive +- High automated +- More decentralised + +- Collaborating computational elements to control physical entities + - Integrates + - Computation + - Networking + - Physical processes + +![](../img/cyberphysical-systems.png) + +# Cyber-Physical Social Data +![](../img/cyberphysical-social-data.png) + +![](../img/cyberphysical-system-types.png) +- Middle indicates a network but + - Small + - Proprietary + - Closed + - Cannot be extended that far \ No newline at end of file diff --git a/IOT/Networking/Networking.md b/IOT/Networking/Networking.md new file mode 100644 index 0000000..7a7f423 --- /dev/null +++ b/IOT/Networking/Networking.md @@ -0,0 +1,76 @@ +#net +![](../../img/iot-network-types.png) + +# Gateway +- Connects IoT devices to internet +- Operator deployed + - LTE etc +- Self-deployed + - Wi-Fi +## Roles +- Machine-to-machine connections + - Cheaper telecoms cost + - Cheaper hardware + - Not everything has to be LTE connected + - Simpler config +- Translate protocols between IoT and internet +- Processing data + - Encrypting, filtering, consolidating +- Boundary between networks + - Security + +![](../../img/iot-network-radar.png) + +# Network Module +- 802.15.4 only a channel + - End-to-end provided by network module +- Multi-hop wireless network + - Wireless sensor networks (WSN) + - Wireless mobile ad hoc networks (MANET) + - Wireless mesh network (WMN) + - Vehicular ad hoc network (VANET) +## Roles +- Management + - Packet + - Adapting size and format + - Address + - Adapting and/or resolving addresses + - Device + - Joining/leaving of nodes + - Service + - Add-ons such as security +- Operational + - Route discovery & maintenance + - Packet forwarding + +# Performance +- Power consumption + - Limited supply + - Significant power in communications +- Network Lifetime + - Duration of proper operation + - Before no longer provides services + - When a node fails + - Design-time + - Design deployment that will last + - Run-time + - Dynamic operation to conserve energy usage + - All layers + - App + - Consolidating data + - Adaptive frequency for data grouping + - Network + - Avoid aggressive topology maintenance + - MAC + - Duty-cycle MAC to keep radio asleep + - Physical + - Power level control +## Issues +- Bottleneck + - One node relaying lots of data + - Bad placement of gateway + +![](../../img/iot-network-types%201.png) +![](../../img/iot-mesh-network.png) +- Low power devices +- Multi-hop \ No newline at end of file diff --git a/IOT/Networking/README.md b/IOT/Networking/README.md new file mode 120000 index 0000000..608c378 --- /dev/null +++ b/IOT/Networking/README.md @@ -0,0 +1 @@ +Networking.md \ No newline at end of file diff --git a/IOT/Software Services.md b/IOT/Software Services.md new file mode 100644 index 0000000..0be726d --- /dev/null +++ b/IOT/Software Services.md @@ -0,0 +1,71 @@ +- Large number of heterogeneous devices +- Spread physically +- Ability to join and leave +- Process data in-network or send directly + +# Challenges +- Fault tolerance + - Nodes can + - Get damaged + - Run out of power + - Lose comms + - Redundant deployment +- Lifetime + - Limited energy supply + - Replacing sometimes not practical + - Underwater + - Large/remote field deployments + - Energy efficient a necessity +- Scalability + - WSM can have lots of nodes + - Architectures and protocols need to scale +- Densities + - Density of network can vary + - Granularity + - Coverage + - Different applications warrant different numbers + - Range of nodes + - Space and time requirement + - Not necessarily homogenous density throughout + - Need to handle this +- Programmability + - Flexible nodes with changing tasks + - Changeable programs during operation +- Maintainability + - WSN and environment can change + - Adaptable system + - Changing operational parameters + - To increase energy efficiency for example + +# Node Types +- Sensor + - Low power + - Sensing, memory, processor, radio + - Resource-constrained +- Sink + - Another sensor node + - Or different wireless node + - Normally more powerful/better resources +- Gateway + - Bridge IoT and internet networks + - More powerful + - Can have + - Service representation + - Cache/storage + - Discovery + +# Application Types +- Event detection + - Reporting event occurrences + - Reporting abnormalities + - May need collaboration with other nodes + - Defining events and classification difficult +- Periodic measurements + - Sense something and report + - Period is application-dependent +- Approximation and pattern detection + - Sense messages in space and time + - E.g. combine wind, light, heat to detect forest fires +- Tracking + - Source of event is mobile + - Event updates with location information \ No newline at end of file diff --git a/img/cyberphysical-social-data.png b/img/cyberphysical-social-data.png new file mode 100644 index 0000000..4c7bf6e Binary files /dev/null and b/img/cyberphysical-social-data.png differ diff --git a/img/cyberphysical-system-types.png b/img/cyberphysical-system-types.png new file mode 100644 index 0000000..759fcad Binary files /dev/null and b/img/cyberphysical-system-types.png differ diff --git a/img/cyberphysical-systems.png b/img/cyberphysical-systems.png new file mode 100644 index 0000000..fe936d8 Binary files /dev/null and b/img/cyberphysical-systems.png differ diff --git a/img/depth-first-cons.png b/img/depth-first-cons.png new file mode 100644 index 0000000..2747b38 Binary files /dev/null and b/img/depth-first-cons.png differ diff --git a/img/depth-first.png b/img/depth-first.png new file mode 100644 index 0000000..c19043f Binary files /dev/null and b/img/depth-first.png differ diff --git a/img/iot-mesh-network.png b/img/iot-mesh-network.png new file mode 100644 index 0000000..27e1a95 Binary files /dev/null and b/img/iot-mesh-network.png differ diff --git a/img/iot-network-radar.png b/img/iot-network-radar.png new file mode 100644 index 0000000..3501316 Binary files /dev/null and b/img/iot-network-radar.png differ diff --git a/img/iot-network-types 1.png b/img/iot-network-types 1.png new file mode 100644 index 0000000..8bde598 Binary files /dev/null and b/img/iot-network-types 1.png differ diff --git a/img/iot-network-types.png b/img/iot-network-types.png new file mode 100644 index 0000000..cd71c16 Binary files /dev/null and b/img/iot-network-types.png differ diff --git a/img/markov-start-end-matrix.png b/img/markov-start-end-matrix.png new file mode 100644 index 0000000..98be517 Binary files /dev/null and b/img/markov-start-end-matrix.png differ diff --git a/img/markov-start-end-probs.png b/img/markov-start-end-probs.png new file mode 100644 index 0000000..9b3641e Binary files /dev/null and b/img/markov-start-end-probs.png differ diff --git a/img/markov-start-end.png b/img/markov-start-end.png new file mode 100644 index 0000000..d68b164 Binary files /dev/null and b/img/markov-start-end.png differ diff --git a/img/markov-state-duration.png b/img/markov-state-duration.png new file mode 100644 index 0000000..5a2dcab Binary files /dev/null and b/img/markov-state-duration.png differ diff --git a/img/markov-state.png b/img/markov-state.png new file mode 100644 index 0000000..fea355a Binary files /dev/null and b/img/markov-state.png differ diff --git a/img/markov-weather.png b/img/markov-weather.png new file mode 100644 index 0000000..58e9253 Binary files /dev/null and b/img/markov-weather.png differ diff --git a/img/search-bidirectional.png b/img/search-bidirectional.png new file mode 100644 index 0000000..baf179e Binary files /dev/null and b/img/search-bidirectional.png differ diff --git a/img/search-breadth-first.png b/img/search-breadth-first.png new file mode 100644 index 0000000..0050b67 Binary files /dev/null and b/img/search-breadth-first.png differ diff --git a/img/search-lim-goal.png b/img/search-lim-goal.png new file mode 100644 index 0000000..abdc191 Binary files /dev/null and b/img/search-lim-goal.png differ diff --git a/img/search-lim1.png b/img/search-lim1.png new file mode 100644 index 0000000..7592669 Binary files /dev/null and b/img/search-lim1.png differ diff --git a/img/search-lim2.png b/img/search-lim2.png new file mode 100644 index 0000000..e37bb3a Binary files /dev/null and b/img/search-lim2.png differ diff --git a/img/search-lim3-2.png b/img/search-lim3-2.png new file mode 100644 index 0000000..f1a59bd Binary files /dev/null and b/img/search-lim3-2.png differ diff --git a/img/search-lim3.png b/img/search-lim3.png new file mode 100644 index 0000000..746e7db Binary files /dev/null and b/img/search-lim3.png differ diff --git a/img/search-lim4.png b/img/search-lim4.png new file mode 100644 index 0000000..153f556 Binary files /dev/null and b/img/search-lim4.png differ diff --git a/img/searching-graph-tree.png b/img/searching-graph-tree.png new file mode 100644 index 0000000..4fb7a4c Binary files /dev/null and b/img/searching-graph-tree.png differ diff --git a/img/searching-graph.png b/img/searching-graph.png new file mode 100644 index 0000000..39aa1dd Binary files /dev/null and b/img/searching-graph.png differ