diff --git a/docs/m05-scalefree/lab05.ipynb b/docs/m05-scalefree/lab05.ipynb
new file mode 100644
index 0000000..6ae1739
--- /dev/null
+++ b/docs/m05-scalefree/lab05.ipynb
@@ -0,0 +1,873 @@
+{
+ "cells": [
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# BA model and scale-free networks\n",
+ "\n",
+ "
\n",
+ "\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "XtLwnyz-Ys9j"
+ },
+ "source": [
+ "\n",
+ "## 1. Implement BA algorithm\n",
+ "For this assignment you will be implementing the BA algorithm from the reading (see [Barabasi Ch 5.3](http://barabasi.com/networksciencebook/)). Create a function that takes `n` the number of nodes for the graph, and `m0` the initial number of nodes, as arguments and returns a networkx graph with a scale-free degree distribution.\n",
+ "\n",
+ "The first step is figuring out how to do \"preferential attachment\" based on the degree of existing nodes. A brute-force way to do this is creating a huge list with duplicated items. Say, node 1's degree is 6, node 2's degree is 3, and node 3's degree is 2. (This is not a 'graphical' sequence. But for the sake of simplicity let's just assume that.) Then, we can create the following list to *preferentially sample* nodes from the network. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "GQZErbFjYs9p"
+ },
+ "outputs": [],
+ "source": [
+ "alist = [1,1,1,1,1,1,2,2,2,3,3]"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "wCe87EqOYs9q"
+ },
+ "source": [
+ "1 is repeated 6 times, 2 is repeated 3 times, and so on. Now if we randomly sample from this list, we will be three times more like to sample node 1 than node 3!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "executionInfo": {
+ "elapsed": 7,
+ "status": "ok",
+ "timestamp": 1644860506350,
+ "user": {
+ "displayName": "Shubham Singh",
+ "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64",
+ "userId": "12193469281340462671"
+ },
+ "user_tz": 300
+ },
+ "id": "GASQfT4lYs9r",
+ "outputId": "014d84a6-e275-4ebc-ba9a-1cc7b3ae01ee"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[3]"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import random\n",
+ "\n",
+ "random.sample(alist, 1)"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "putSesFfYs9r"
+ },
+ "source": [
+ "So, if you can maintain this list for your network, you can implement preferential attachment. Simply update this list whenever you add an edge! \n",
+ "\n",
+ "A more space-efficient way is using `numpy`'s sampling method. If you run the following cell, the documentation for the [`np.random.choice`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.choice.html) function will appear. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "qQEsSvShYs9s"
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "\n",
+ "np.random.choice?"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "2_3vrd5FYs9s"
+ },
+ "source": [
+ "It accepts `p` parameter and you can specifies the probability of each item in the list! So instead of creating"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "wlCS5F9oYs9t"
+ },
+ "outputs": [],
+ "source": [
+ "alist = [1,1,1,1,1,1,2,2,2,3,3]"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "R8Mne9h1Ys9t"
+ },
+ "source": [
+ "You can do"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "executionInfo": {
+ "elapsed": 165,
+ "status": "ok",
+ "timestamp": 1644860506513,
+ "user": {
+ "displayName": "Shubham Singh",
+ "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64",
+ "userId": "12193469281340462671"
+ },
+ "user_tz": 300
+ },
+ "id": "AKsBZeY8Ys9u",
+ "outputId": "9c6e807d-967e-4727-f6bd-5c81a325e7ef",
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[0.5454545454545454, 0.2727272727272727, 0.18181818181818182]"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "nodes = [1,2,3]\n",
+ "degrees = [6,3,2]\n",
+ "sum_degrees = sum(degrees)\n",
+ "node_probs = [degree*1.0/sum_degrees for node, degree in zip(nodes,degrees)] \n",
+ "node_probs"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "executionInfo": {
+ "elapsed": 6,
+ "status": "ok",
+ "timestamp": 1644860506514,
+ "user": {
+ "displayName": "Shubham Singh",
+ "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64",
+ "userId": "12193469281340462671"
+ },
+ "user_tz": 300
+ },
+ "id": "F4u8bSHEYs9u",
+ "outputId": "3586ad0d-4b86-4eff-89ac-733a12afb4b6"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "np.random.choice(nodes, p=node_probs)"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "rvmljTQ6Ys9v"
+ },
+ "source": [
+ "or sample two nodes from the list. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "executionInfo": {
+ "elapsed": 3,
+ "status": "ok",
+ "timestamp": 1644860506514,
+ "user": {
+ "displayName": "Shubham Singh",
+ "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64",
+ "userId": "12193469281340462671"
+ },
+ "user_tz": 300
+ },
+ "id": "FGqHQ5duYs9v",
+ "outputId": "13da7c37-ad5d-4f45-c7ed-d456e36ea9a5"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([3, 2])"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "np.random.choice(nodes, 2, replace=False, p=node_probs)"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "8lFnaZpkkS9Z"
+ },
+ "source": [
+ "Ok, now the sampling can be done. How about the initial graph with `m0` nodes? `networkx` has a convenient function for that: https://networkx.org/documentation/stable/reference/generated/networkx.generators.classic.complete_graph.html \n",
+ "\n",
+ "Can you create a complete graph with 5 nodes and then check the edges to make sure you have the right graph? "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "executionInfo": {
+ "elapsed": 662,
+ "status": "ok",
+ "timestamp": 1644860507174,
+ "user": {
+ "displayName": "Shubham Singh",
+ "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64",
+ "userId": "12193469281340462671"
+ },
+ "user_tz": 300
+ },
+ "id": "JbgsmrAcj72N",
+ "outputId": "66fb5ee1-07cb-4d8b-d3d0-565ced1c0a82"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "EdgeView([(0, 1), (0, 2), (0, 3), (0, 4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)])"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# YOUR SOLUTION HERE"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "4xeLpD43Ys9v"
+ },
+ "source": [
+ "Now you're ready to implement the BA algorithm! Create a fully-connected network with `m0` nodes. Then in each step, sample `m` nodes from the existing node pool. Add a new node and connect it to the chosen `m` nodes. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "vClsd6d9Ys9w"
+ },
+ "outputs": [],
+ "source": [
+ "def barabasi_albert_graph(n, m0, m=1):\n",
+ " \"\"\"Create a BA network with n nodes, where each new node connects to \n",
+ " m existing nodes according to the preferential attachment rule. The initial\n",
+ " network is a clique (fully-connected network) with m0 nodes. \n",
+ " \"\"\"\n",
+ " # Initial network of m_o nodes (a complete graph)\n",
+ "\n",
+ " # YOUR SOLUTION HERE\n",
+ "\n",
+ " # Until network has n nodes, \n",
+ " # 1. preferentially sample m nodes from the network,\n",
+ " # 2. create a new node, \n",
+ " # 3. and connect the new node to the m selected nodes. \n",
+ "\n",
+ " # YOUR SOLUTION HERE\n",
+ " return G "
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "_Jbyx4JyYs9w"
+ },
+ "source": [
+ "## 2. BA graph analysis\n",
+ "Test your algorithm by creating a graph with `N = 1200` and `m0 = 7`. Calculate (and print) the average shortest path length of the graph:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "_-DFRrhyYs9w"
+ },
+ "outputs": [],
+ "source": [
+ "# YOUR SOLUTION HERE"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "cO3K1xxWYs9x"
+ },
+ "source": [
+ "Calculate (and print) the average clustering coefficient of the graph. (Note: You may need to try values of m > 1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "executionInfo": {
+ "elapsed": 191,
+ "status": "ok",
+ "timestamp": 1644860510434,
+ "user": {
+ "displayName": "Shubham Singh",
+ "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64",
+ "userId": "12193469281340462671"
+ },
+ "user_tz": 300
+ },
+ "id": "1GitJsGdYs9x",
+ "outputId": "874011c9-3b25-4d11-bc6d-95dcb505e62a"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.039526110720144475\n"
+ ]
+ }
+ ],
+ "source": [
+ "# YOUR SOLUTION HERE"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "6YIsMN0zYs9x"
+ },
+ "source": [
+ "The [cumulative distribution function (CDF) and complementary cumulative distribution function (CCDF)](https://en.wikipedia.org/wiki/Cumulative_distribution_function) are among the most direct ways to identify a power-law-like distribution. Plot the **CCDF** of the graph's degree distribution. \n",
+ "\n",
+ "First, **CDF** for a discrete distribution is defined as the following:\n",
+ "\n",
+ "$$ F_X(x) = P(X \\le x) = \\sum_{x' \\le x} P(x') $$\n",
+ "\n",
+ "CCDF is it's reverse and is defined as following:\n",
+ "\n",
+ "$$\\bar F_X(x) = P(X > x) = \\sum_{x' > x} P(x') = 1 - F_X(x).$$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 300
+ },
+ "executionInfo": {
+ "elapsed": 1752,
+ "status": "ok",
+ "timestamp": 1644860512182,
+ "user": {
+ "displayName": "Shubham Singh",
+ "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64",
+ "userId": "12193469281340462671"
+ },
+ "user_tz": 300
+ },
+ "id": "pu3WfD26Ys9y",
+ "outputId": "0c42ba86-bc14-42f4-dced-7d2768b31cd9"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "