{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# [Chapter 2](https://github.com/Ziaeemehr/netsci/blob/main/docs/examples/chap_02.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### **Graph Theory**\n", "\n", "Code by : Abolfazl Ziaeemehr \n", "- https://github.com/Ziaeemehr\n", "\n", "\"Open" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# uncomment and run this line to install the package on colab\n", "# !pip install \"git+https://github.com/Ziaeemehr/netsci.git\" -q" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import netsci\n", "import numpy as np\n", "import networkx as nx\n", "from tqdm import tqdm\n", "import matplotlib.pyplot as plt\n", "from netsci.plot import plot_graph\n", "from netsci.analysis import find_sap, find_hamiltonian_path" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "np.random.seed(0)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Degrees: {0: 2, 1: 2, 2: 2, 3: 5, 4: 3, 5: 1, 6: 3, 7: 2}\n", "Average degree: 2.5\n", "Adjacency matrix:\n", " [[0 0 0 1 1 0 0 0]\n", " [0 0 1 0 0 0 1 0]\n", " [0 1 0 1 0 0 0 0]\n", " [1 0 1 0 0 1 1 1]\n", " [1 0 0 0 0 0 1 1]\n", " [0 0 0 1 0 0 0 0]\n", " [0 1 0 1 1 0 0 0]\n", " [0 0 0 1 1 0 0 0]]\n", "Edges: [(0, 3), (0, 4), (1, 2), (1, 6), (2, 3), (3, 5), (3, 6), (3, 7), (4, 6), (4, 7)]\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe0AAAGrCAYAAADttc+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB47ElEQVR4nO3dd1wUd/oH8M/sLm0F6SKIHQV7QUGjqKCxoYCVYgEEc0mMuVwu97tYcpdiSblLcjGa5AKWqGCXtReUGCsKlmhUFBVsiHSRpe3u9/cH7p4IKGWW2fK8Xy9eicPMd55dZveZ+VaOMcZACCGEEJ0nEjoAQgghhNQPJW1CCCFET1DSJoQQQvQEJW1CCCFET1DSJoQQQvQEJW1CCCFET1DSJoQQQvQEJW1CCCFET1DSJoQQQvSEQSTtiIgIdOjQQegw9EZGRgY4jsO//vWvZj1vQ/5OERERsLS01G5AOuDjjz8Gx3FCh6EV6uts7dq1QodiEAz5WtEXI0aMwIgRIwSNoUFJe+3ateA4TvMjkUjQpk0bRERE4MGDB9qKUW/duXMH77zzDrp27QqpVAqpVIru3btj3rx5+P3334UOT3ByuRwff/wxfv31V62Uv2XLFgwaNAg2Njawt7fH8OHDsXfvXq2ci/Bn48aN4Diuzpu2a9euYezYsbC0tISdnR1mzZqFnJycepe/a9cu9O/fH+bm5mjXrh3++c9/QqFQVNvn6tWr8PHxgZWVFQYMGIDTp0/XKOfrr79Gjx49ahxL9NvVq1fx8ccfIyMjQ+hQaiVpzEGffvopOnbsiLKyMpw5cwZr167FiRMncOXKFZibm/Mdo17as2cPgoODIZFIMGPGDPTp0wcikQjXr1/Hjh078MMPP+DOnTto37690KE2m59//hkqlUrzb7lcjk8++QQAeL97XbFiBd599134+/vj888/R1lZGdauXYsJEyZg+/btmDx5Mq/nI/x4+vQp/u///g8tWrSo9ff379/HsGHDYG1tjWXLluHp06f417/+hcuXL+Ps2bMwNTV9afn79+9HUFAQRowYgRUrVuDy5ctYsmQJHj9+jB9++AEAoFQqMXnyZNjZ2eGrr77Crl27EBgYiPT0dLRs2RIA8PjxY3z66afYsmULJJJGfY0SHXX16lV88sknGDFiRI2awUOHDgkT1HMadbWNGzcOAwYMAABER0fDwcEBX3zxBXbt2oXp06fzGqA+unXrFkJCQtC+fXscOXIEzs7O1X7/xRdfYNWqVRCJXl7RUVJSUueXlz4yMTFptnOtWLECAwcOxO7duzVVinPmzEGbNm2wbt06Sto6asmSJbCysoKvry8SEhJq/H7ZsmUoKSlBamoq2rVrBwDw8vLC66+/jrVr1+KNN954afkffPABevfujUOHDmmSbcuWLbFs2TL8+c9/hoeHB27evIm0tDRkZmaiXbt2mD17NhwcHHD69GmMGTMGALBw4UIMGzYMo0eP5vcNIDrtVTeFzYGXNm0fHx8AVclKraKiAv/4xz/g6ekJa2trtGjRAj4+PkhKSqp27PPtq//973/RuXNnmJmZYeDAgTh37lyNcyUkJKBnz54wNzdHz549sXPnzlpjKikpwV//+le0bdsWZmZmcHd3x7/+9S+8uKgZx3F45513sHXrVnTv3h0WFhYYPHgwLl++DAD46aef4ObmBnNzc4wYMaJeVSZffvklSkpKsGbNmhoJGwAkEgneffddtG3bVrNN3YZ769YtjB8/HlZWVpgxYwYA4Pjx45g2bRratWsHMzMztG3bFn/5y19QWlparVx1Gbdv38aYMWPQokULuLi44NNPP63xutXq854/r7CwEGKxGN99951mW25uLkQiEezt7aud56233kLr1q2rxae+c83IyICjoyMA4JNPPtE0uXz88cfVzvfgwQMEBQXB0tISjo6O+OCDD6BUKl8aIwA8efIErVq1qtYG2LJlS1haWsLCwuKlxzb0mjx69Ch8fHzQokUL2NjYIDAwENeuXaux34kTJzBw4ECYm5ujc+fO+Omnn+qMYcOGDfD09ISFhQXs7OwQEhKCe/fuVdvn5s2bmDJlClq3bg1zc3O4uroiJCQERUVFL319Db2e6vM3KCwsREREBKytrWFjY4Pw8HAUFha+NI4X3bx5E9988w2+/vrrOp9et2/fjgkTJmgSNgCMGjUKXbt2xZYtW15a/tWrV3H16lW88cYb1cp/++23wRjDtm3bAEDzPtja2gIApFIpLCwsIJfLAQDnz5/Hxo0b8fXXXzfo9QFAcnIyxo4dC2tra0ilUgwfPhwnT56ssV99r5XS0lK8++67cHBwgJWVFQICAvDgwYM6P0tz5syBk5MTzMzM0KNHD6xevbresW/YsAFeXl6QSqWwtbXFsGHD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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# make a random graph with n nodes and p% probability of edge connection\n", "num_nodes = 8\n", "probability = .4\n", "seed = 2\n", "graph = nx.gnp_random_graph(num_nodes, probability, seed=2, directed=False)\n", "\n", "# degree distribution\n", "degrees = dict(graph.degree())\n", "print(\"Degrees:\", degrees)\n", "\n", "# calculate the average degree\n", "average_degree = np.mean(list(degrees.values()))\n", "print(\"Average degree:\", average_degree)\n", "\n", "# adjacency matrix\n", "adjacency_matrix = nx.to_numpy_array(graph).astype(int)\n", "print(\"Adjacency matrix:\\n\", adjacency_matrix)\n", "\n", "# edges\n", "edges = list(graph.edges())\n", "print(\"Edges:\", edges)\n", "\n", "# plot the graph\n", "plot_graph(graph, node_size=1000,\n", " node_color='darkred',\n", " edge_color='gray',\n", " figsize=(5, 5),\n", " title=\"Random Graph with {} nodes and {}% edge connection\".format(num_nodes, probability*100))\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Shortest path from 3 to 0 : [3, 0]\n", "Diameter: 3\n", "Average shortest path length: 1.82\n" ] } ], "source": [ "# shortest path, find distance between two nodes\n", "source = np.random.randint(0, len(graph)) # random source node\n", "target = np.random.randint(0, len(graph)) # random target node\n", "shortest_path = nx.shortest_path(graph, source, target)\n", "print(\"Shortest path from\", source, \"to\", target, \":\", shortest_path)\n", "\n", "# diameter : maximal shortest path length\n", "if nx.is_connected(graph):\n", " diameter = nx.diameter(graph)\n", " print(\"Diameter:\", diameter)\n", " \n", "# average shortest path length\n", "avg_shortest_path_length = nx.average_shortest_path_length(graph)\n", "print(f\"Average shortest path length: {avg_shortest_path_length:.2f}\")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfoAAAGrCAYAAAAox1UbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB4eUlEQVR4nO3dd3xUVfr48c+UVNJIJaGEEgi9BRNUOriIoAQFBSzYVvcni+uuuy4g7nd3FXDXhgJrZVdXQcGWILZVAaVDAkSKAYKEGkJ6b5M5vz/CjIQkEMid3Mnkeb9evDR37pz7ZHJnnrnnnvMcg1JKIYQQQgiXZNQ7ACGEEEI4jiR6IYQQwoVJohdCCCFcmCR6IYQQwoVJohdCCCFcmCR6IYQQwoVJohdCCCFcmCR6IYQQwoVJohdCCCFcmEsk+nvvvZfOnTvrHYZL27hxIwaDgY8++qhZjztq1ChGjRrV6H379u3r2ICcgCuf77bzbOPGjXqH4hJc+VxpKTp37sy9996rawxXlOjffvttDAaD/Z/ZbKZ9+/bce++9nD592lExtjgXv06enp5EREQwfvx4XnnlFYqKihp87o8//sh9991Hly5d8PT0xMfHh4EDB/LEE0/w888/N+Nv4ZzOnDnDX//6V/bu3at521arlddee42BAwfi4+NDWFgYEyZMYOvWrZofS2hr4cKFGAyGBr/obd26lWHDhuHt7U27du149NFHKS4ubnT7K1asoFevXnh6etK9e3eWLl1aZ58tW7YwePBgfH19GTVqFKmpqXX2efTRRxk/fnzjfzHRImzdupW//vWv5Ofn6x1KvcxX86S///3vdOnShfLycrZv387bb7/N5s2b2b9/P56enlrH2GLZXqeqqirOnj3Lxo0beeyxx3jxxRdZu3Yt/fv3r7X/m2++yf/7f/+P4OBg7rzzTnr27InFYmH//v3897//ZcmSJZSVlWEymXT6jZrf//73v1o/nzlzhr/97W907tyZgQMHanqsP/3pT7z44ovcddddPPLII+Tn5/P6668zcuRItmzZQmxsrKbHE9o4deoUixYtok2bNvU+vnfvXsaOHUuvXr148cUXOXXqFM8//zxHjhzhyy+/vGz7r7/+Or/5zW+47bbb+MMf/sCmTZt49NFHKS0t5c9//jMABQUFTJ48maFDh/LQQw/x9ttvc9ttt/Hjjz/a368HDhzgzTffJDk5WbtfXjiFrVu38re//Y17772XgICAWo8dOnQIo1HnznN1Bf7zn/8oQO3atavW9j//+c8KUKtXr76S5jQza9YsFRkZqcux69PQ66SUUt99953y8vJSkZGRqrS01L59y5YtymQyqREjRqjCwsI6zysrK1MLFixQFovlkscuKSlp+i9Qjw0bNihAffjhhw5pv7F27dqlAPWf//ynzmMjR45Uffr0uap2q6qqlJeXl5o6dWqt7T///LMC1KOPPnpV7TqCs53vWrKdZxs2bGj0c+644w41ZsyYBv/+EyZMUOHh4aqgoMC+7c0331SA+vrrry/ZdmlpqQoKClITJ06stf3OO+9Ubdq0Ubm5uUoppb788kvl7e2tysrKlFJKHTt2TAEqNTXV/pxx48apOXPmNPr30oIrnyvO5LnnnlOAOnbsmN6h1EuTrxnDhw8H4OjRo/ZtlZWV/OUvfyEmJgZ/f3/atGnD8OHD2bBhQ63npqenYzAYeP7553njjTfo1q0bHh4eXHPNNezatavOsRISEujbty+enp707duXTz/9tN6YSkpKePzxx+nYsSMeHh5ER0fz/PPPoy5arM9gMPDb3/6WDz/8kN69e+Pl5cW1117Lvn37gJpv81FRUXh6ejJq1CjS09Ob8lIxZswYnnrqKY4fP857771n3/63v/0Ng8HAypUr8fX1rfM8T09Pnn766VpX87Z70snJyYwYMQJvb2/mz58PQGJiIhMnTiQiIgIPDw+6devG008/TXV1da12L2zjuuuuw8vLiy5duvDaa6/VG7/VamXhwoV06NABT09Pxo4dS1pa2iV/5x9//BGDwcDatWvt25KTkzEYDAwePLjWvhMmTCAuLq5WfLZ79Bs3buSaa64B4L777rPfGnn77bdrtXHw4EFGjx6Nt7c37du355///Ocl4wOoqqqirKyMsLCwWttDQ0MxGo14eXld8vm2e8tr1qxp1Ovz4YcfEhMTg5eXF8HBwdx111313v5q7PlutVpZsmQJffr0wdPTk7CwMB5++GHy8vJq7ZeUlMT48eMJDg62/63vv//+y708V3w+NeZvcOrUKeLj42nTpg2hoaH8/ve/p6Ki4rKxXOiHH37go48+YsmSJfU+XlhYyDfffMNdd92Fn5+fffs999yDj48Pa9asuWT7GzZsICcnh0ceeaTW9tmz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117L66+/zrp162r1flzI9rq+++67tGvXrs7jDX0maMF27D/+8Y8Nzvu/OEFfrcZeGV/JeXW5ffV8ba+UFu+nJv82tuQ9evRoli1bxty5cwH46KOP6Nq1K5988kmtP2R9XTmNERkZCfzyTexChw4dqrPvt99+S1FRUa2relsXo60tvbz77rsA9jdQmzZtGDVqFN9//z2nT59u8FtyY23cuJGcnBw++eQTRowYYd9+7Nixevc/c+YMJSUlta7qDx8+DKBZVS1b9+2mTZvo1KmTvftp+PDhVFRUsHLlSjIzM2vFW5+r7S67nMzMTIA6o8ihZkS+xWLR5Di2c+/QoUN1riYOHTpkf/xKzvdu3brx7bffcv3111/2ChVg6NChDB06lIULF7Jq1SruvPNOPvjgAx588MF697/S86kxIiMj2b9/P0qpWn/Ti3+3+pw+fRqr1cqjjz5a5/Yc1PQY/u53v2PJkiX07dsXs9lMUlISt99+u32fyspK9u7dW2tbfWy1GpKSkrjpppvs25OSkrBarQ3WclBK8eijj/K73/2Obt26ATXvswu/GERERFyy+9v2vNDQUMaNG9fgflf62bhhwwZKS0trXdVfPIq7a9euALi5uV3y2JeK/euvvyY3N7fBq/rIyEisVitHjhyxX81CzXsxPz/foZ/TjX1tba9DfRdhF7qSz6XIyMh6z3NH5idNpteNGjWK2NhYlixZQnl5OfDLt5ALv3Xs2LGDbdu2XdUxwsPDGThwIO+8806trsJvvvmmzj2Nm266ierqapYtW1Zr+0svvYTBYGDChAlXFYMW1q9fz9NPP02XLl2488477dv/8pe/UF1dzV133VVvF/6VfHur77WvrKzkX//6V737WywWXn/99Vr7vv7664SEhBATE9Po417O8OHD2bFjBxs2bLAn+uDgYHr16mXvFr/wHlx9bF9GtK5AZbtV8cEHH9Tavnv3bg4dOsSgQYM0Oc6QIUMIDQ3ltddeq9Wd/OWXX/LTTz8xceJE4MrO99tvv53q6mqefvrpOsezWCz21yovL6/OeWRLVJea1nal51Nj3HTTTZw5c6ZWSeXS0lLeeOONyz7XNnXs4n99+vShU6dOfPrppzzwwANAze22cePG8d5779WqSPnuu+9SXFzMtGnTah0/NTW11niMMWPGEBgYyKuvvlorhldffRVvb2/73+tib7/9NidPnrRPwYKabn3bh3lVVRVpaWn1Xk3ajB8/Hj8/PxYtWlTvmArbdLErOVfGjx9PVVUVb775pn2b1Wpl+fLltfYLDQ1l1KhRvP766/X2htQ3Ve1Ct912G0qpeqcT2s4j2xeni6dG2nrVGnpttdDY1zYkJIQRI0bw73//mxMnTtTa58L3w5V8Lt10003s3LmzVi4sKSnhjTfeoHPnznXGVWhBs/6JP/3pT0ybNo23336b3/zmN0yaNIlPPvmEKVOmMHHiRI4dO8Zrr71G7969r6j05IUWL17MxIkTGTZsGPfffz+5ubksXbqUPn361Grz5ptvZvTo0Tz55JOkp6czYMAA/ve//5GYmMhjjz1m/zbnaF9++SWpqalYLBYyMzNZv34933zzDZGRkaxdu7bWYKzhw4ezbNky5syZQ/fu3e2V8SorKzl8+DArV67E3d39kh8MNtdddx1t27Zl1qxZPProoxgMBt59990GvyxERETwj3/8g/T0dHr06MHq1avZu3cvb7zxBm5ubpq9HsOHD2fhwoWcPHmyVkIfMWIEr7/+Op07d641oLM+3bp1IyAggNdeew1fX1/atGlDXFxcveM+rkRMTAw33HAD77zzDoWFhfzqV78iIyODpUuX4uXlxWOPPdak9m3c3Nz4xz/+wX333cfIkSOZMWMGmZmZvPzyy3Tu3Jnf//739n0be76PHDmShx9+mMWLF7N3715+9atf4ebmxpEjR/jwww95+eWXmTp1Ku+88w7/+te/mDJlCt26daOoqIg333wTPz+/WlerF7vS86kxfv3rX7Ns2TLuuecekpOTCQ8P5913361z77g+wcHBxMfH19luSxgXP7Zw4UKuu+46Ro4cyUMPPcSpU6d44YUX+NWvfsWNN95o32/nzp2MHj2a//u//+Ovf/0rUHNr7Omnn2b27NlMmzaN8ePHs2nTJt577z0WLlxY79VqUVER8+fPZ9GiRbV6FKdOncrf//53rFYrW7Zsoby8/JKvu5+fH6+++ip33303gwcPZvr06YSEhHDixAk+//xzrr/+evvFTGPPlfj4eGJjY3n88cdJS0ujZ8+erF27ltzcXKD2leny5csZNmwY/fr149e//jVdu3YlMzOTbdu2cerUKVJSUhqMffTo0dx999288sorHDlyhBtvvBGr1cqmTZsYPXo0v/3tbxkwYACzZs3ijTfesN8e2rlzJ++88w7x8fGMHj26wfab6kpe21deeYVhw4YxePBgHnroIbp06UJ6ejqff/65vRS37YLoySefZPr06bi5uXHzzTfXW61x7ty5vP/++0yYMIFHH32UwMBA3nnnHY4dO8bHH3/smCp6jR6fry49bay6ulp169ZNdevWTVksFmW1WtWiRYtUZGSk8vDwUIMGDVLr1q2rU6nJNr3uueeeq9MmoP7v//6v1raPP/5Y9erVS3l4eKjevXurTz75pN7qT0VFRer3v/+9ioiIUG5ubqp79+7queeeqzUlwnaM2bNn19rWUEyNrQ5ne51s/9zd3VW7du3UDTfcoF5++eV6K9/Z7NmzR91zzz2qU6dOyt3dXbVp00b1799fPf7447WmBSp16UpwW7ZsUUOHDlVeXl4qIiJCPfHEE+rrr7+uM3XJ1kZSUpK69tprlaenp4qMjKwz57eh3932WtU33e1ihYWFymQyKV9f31pTjd577z0FqLvvvrvOcy6eXqdUzdTL3r17K7PZXOvYDb0eja0OVlpaqv7+97+r3r17Ky8vL+Xv768mTZpUq+5DQ6709Vm9erUaNGiQ8vDwUIGBgerOO+9Up06dqtNuY893pZR64403VExMjPLy8lK+vr6qX79+6oknnlBnzpxRStVMX5wxY4bq1KmT8vDwUKGhoWrSpEkqKSnpsr/flZ5PF6sv5uPHj6tbbrlFeXt7q+DgYPW73/3OPiXwSirjXe7YStVMQbzuuuuUp6enCgkJUbNnz67zPrT9DS/+zFGq5rWNjo5W7u7uqlu3buqll16q81li86c//UkNGTKkzuPFxcXqnnvuUQEBAapnz57qq6++atTvtWHDBjV+/Hjl7++vPD09Vbdu3dS9995b5+/W2HMlKytLzZw5U/n6+ip/f3917733qi1btihAffDBB7X2PXr0qLrnnntUu3btlJubm2rfvr2aNGmS+uijjy4bt8ViUc8995zq2bOncnd3VyEhIWrChAkqOTnZvk9VVZX629/+prp06aLc3NxUx44d1bx582pN6VOqZoraxdUJlar7+dBQjmqo4mJjX9v9+/erKVOmqICAAOXp6amio6PVU089VWufp59+WrVv314ZjcZaU+0unl6nVM3rOnXqVHt7sbGxat26dfXG3JTPXBuDUs0w2k04rVGjRpGdnX3Ze1BC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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# directed graph\n", "graph_dir = nx.to_directed(graph)\n", "plot_graph(graph_dir, \n", " node_size=1000,\n", " node_color='darkred',\n", " edge_color='gray',\n", " figsize=(5, 5),\n", " seed=1,\n", " title=\"Random DGraph with {} nodes and {}% edge connection\".format(num_nodes, probability*100));" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Weighted adjacency matrix:\n", " [[0 9 4 9 9]\n", " [9 0 1 6 4]\n", " [4 1 0 0 6]\n", " [9 6 0 0 8]\n", " [9 4 6 8 0]]\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# weighted graph\n", "seed = 3\n", "np.random.seed(seed) # to fix the plot\n", "\n", "num_nodes = 5\n", "probability = 0.8\n", "graph_w = nx.erdos_renyi_graph(num_nodes, probability, seed=seed)\n", "\n", "for (u,v) in graph_w.edges():\n", " graph_w[u][v]['weight'] = np.random.randint(1, 10)\n", "\n", "# plot the weighted graph\n", "edge_labels = nx.get_edge_attributes(graph_w, 'weight')\n", "\n", "plot_graph(graph_w, \n", " with_labels=True, \n", " node_color='lightblue', \n", " node_size=700, \n", " font_size=12,\n", " edge_labels=edge_labels, \n", " figsize=(5, 5), \n", " title=\"Weighted Random Network\")\n", "\n", "weighted_adjacency_matrix = nx.to_numpy_array(graph_w, weight='weight').astype(int)\n", "print(\"Weighted adjacency matrix:\\n\", weighted_adjacency_matrix)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "self avoiding path" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A->B->E->F\n", "A->C->F\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create a graph\n", "G = nx.Graph()\n", "edges = [('A', 'B'), ('A', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'F'), ('E', 'F')]\n", "G.add_edges_from(edges)\n", "\n", "# Find all self-avoiding paths from 'A' to 'F'\n", "start_node = 'A'\n", "target_node = 'F'\n", "all_saps = list(find_sap(G, start_node, target_node))\n", "\n", "for path in all_saps:\n", " print(\"->\".join(path))\n", "\n", "plot_graph(G, seed=2, figsize=(3, 3))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A Hamiltonian path is a path in a graph that visits each vertex exactly once." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hamiltonian Path found: (1, 2, 3, 4, 5, 6)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Example usage\n", "G = nx.Graph()\n", "G.add_edges_from([(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 1)])\n", "\n", "plot_graph(G, seed=2, figsize=(3, 3))\n", "\n", "path = find_hamiltonian_path(G)\n", "if path:\n", " print(\"Hamiltonian Path found:\", path)\n", "else:\n", " print(\"No Hamiltonian Path found\")\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hamiltonian Path found: (0, 1, 2, 4, 3)\n" ] } ], "source": [ "# hamiltonian path of weighted graph:\n", "path = find_hamiltonian_path(graph_w)\n", "if path:\n", " print(\"Hamiltonian Path found:\", path)\n", "else:\n", " print(\"No Hamiltonian Path found\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Adjacency List" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "adjacency matrix\n", " [[0 1 1 0 0 0]\n", " [1 0 0 1 1 0]\n", " [1 0 0 0 0 1]\n", " [0 1 0 0 0 0]\n", " [0 1 0 0 0 1]\n", " [0 0 1 0 1 0]]\n", "adjacency list\n", " {1: [2, 3], 2: [1, 4, 5], 3: [1, 6], 4: [2], 5: [2, 6], 6: [3, 5]}\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "G = nx.Graph()\n", "edges = [(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (5, 6)]\n", "G.add_edges_from(edges)\n", "\n", "plot_graph(G, seed=2, figsize=(3, 3))\n", "\n", "adjacency_matrix = nx.to_numpy_array(G).astype(int)\n", "print(f\"adjacency matrix\\n {adjacency_matrix}\")\n", "\n", "\n", "adjacency_list = {n: list(neighbors) for n, neighbors in G.adj.items()}\n", "print(f\"adjacency list\\n {adjacency_list}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Adjaceccy list of directed graph:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "adjacency matrix\n", " [[0 1 1 0 0 0]\n", " [0 0 0 1 1 0]\n", " [0 0 0 0 0 1]\n", " [0 0 0 0 0 0]\n", " [0 0 0 0 0 1]\n", " [0 0 0 0 0 0]]\n", "adjacency list\n", " {1: [2, 3], 2: [4, 5], 3: [6], 4: [], 5: [6], 6: []}\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPwAAAD7CAYAAABOrvnfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAnxklEQVR4nO3deVxU5f4H8M+ZDZhhGdlNUXAPNUDcSsMNUHPp/jTLXOqKN3dLs6xsueUtK+v3M71eyzVNb5r+0rz+jCOD5JYbGq5hGItiJJsMywzMen5/IBQCMwNzZmHm+369er1yzpnneSg/PM95zjnPw3Acx4EQ4hYEjm4AIcR+KPCEuBEKPCFuhAJPiBuhwBPiRijwhLgRCjwhboQCT4gbocAT4kYo8IS4EQo8IW6EAk+IG6HAE+JGKPCEuBEKPCFuhAJPiBsROboBhLgTvdGIKq0BRo6DgGHgLRFCJLBfv0uBJ8TGKjQ65CrVuKvSQKUzNDouEwsRKvNAhFwKXw+xTdvC0BJXhNiGSqtHRmE5itRaMABMBa3ueLBUgpgQP8gktumLKfCE2ECuUo3LReXgONNBfxADgGGAqGA/RMilvLeLAk8Iz26UVuLnkiqry4kM9EavAB8eWvQHuoYnhEe5SrXJsOdcv4Jv1v83bvyUDq2mBiFhnZEwZTrGPfe3Ruf+XFIFT6EQ4Tz29BR4Qnii0upxuai82eOXTh3Dh/P/iojIPnhq/hJ4SmW4m5+H0sLfm/9OUTmCpBLerulpSE8IT07ll6JYrW3yml1dVYnFY4aiZ0x/vLJ2MwQW3opjAARJJRgaFsBLG+nBG0J4UKHRoaiZsAPAyf87AGVJMaYteR0CgQA1ajWMRqPZcjkARWotKjQ6XtpJgSeEB7lKNRgTx6+cPgmptw9KC3/H4jFDMb1fN8zs3wMb330dWk2NybKZ++XzgQJPCA/uqjQmb7/9fisXBoMeHy+cheihw/Hqui0YOWkqUvZ8hfVvLDVZNne/fD7QpB0hVtIZjU0+QfdnNWoVNNXVSJz6HGa/9T4AYHDiE9DrdEj5ZiemvvgqHgrv0uz3VToD9Eaj1Y/hUg9PiJVUWtNhBwCJpycAYOi4vzT4fOj4/wIAZF26aLaMKgvqMYcCT4iVjBbc6PIPCgEAyAMCG3zuF1A7+15V0fztvJbUYw4FnhArCRhT03W1uvR+BABwr+hug8/LigoBAH7t/Hmpx2wZVpdAiJvzlgjNnvPY2AkAgKP/u7vB56n7voZQJELvgY/xUo85NGlHiJVEAgFkYqHJibsukX0xcvJUpH27BwaDHr0HPIpr58/gDHsIk+Yshn9IqMk6ZGJ+3punJ+0I4cHlwnLkKNUmb83pdTrs37gOafu/QVlxIQIf6oix0/6K8c+/YLJsBkAXuRRRIX5Wt5MCTwgPKjQ6pOaV2Kz8+PBAXhbHoGt4Qnjg6yFGsFRi8mm71mBQuygGXyvhUOAJ4UlMiB94mEhvgGFqy+ULBZ4QnsgkIkQF8xdOAIgO5ne5Kwo8ITyKkEsRGejNS1mRgT68Ln4B0KQdITZh7Zp20cF+vIcdoMATYjO0ai0hbqikUo3N/3sQfR+Lg7aJq2hal54QF2E0GjFmzBgoFAosW7YMqz76CAOHxqFLt+7YtmWL3XeeoUk7QmyE4zi89NJLUCgUAICysjLs3bMHl8+dwXdf74T6XrFdww5Q4AmxmVWrVmH9+vX1f05PT8frr79e/+e1a9favU00pCfEBjZv3ow5c+Y0+EwgEDRYuFImk+G3336Dnx+/9+5NoR6eEJ7duXMH8+bNa/T5g6vUVldXY+PGjfZqFgDq4QnhndFoxOeff47vvvsOaWlpMBqNYBgGTUUtKCgI+fn58PDwsEvbKPCE2AjHcejQoQMGDRoEpVKJM2fOICAgAAUFBfD29oZQKIRMJsOVK1cQEMDPRhPmUOAJsZFr166hb9++SElJQUJCAoDa3l8oFGLr1q1ISkqye5voGp4QG2FZFl5eXnj88cfrP9NoateX97y/iq29UeAJsRGWZTFixIgG4a6pqd1lhgJPiAupqqrCyZMnMWbMmAafU+AJcUE//PADtFotxo4d2+DzusDba1b+QRR4QmyAZVl07doV3bp1a/A59fCEuBiO45CcnNxoOA9Q4AlxOTdv3kRubi4FnhB3wLIsJBIJRowY0egYBZ4QF8OyLOLi4iCTyRodo8AT4kKqq6tx7NixJofzAAWeEJdy4sQJVFdXU+AJcQcsyyIsLAyRkZFNHqf78IS4EJZlMWbMGDDNbEGj0WggEokgEjlm42YKPCE8ycvLw40bN5odzgO1PbyjhvMABZ4Q3rAsC5FIhFGjRjV7DgWeEBfBsiwee+wxk2vUUeAJcQFarRZHjx41OZwHKPCEuIQff/wRVVVVFgXeUTP0AAWeEF6wLIuQkBBERUWZPI96eEJcQN3tOIGZnWQo8IS0cQUFBbhy5YrZ4TxAgSekzWNZFgzD1K9MawoFnpA2jmVZDBw40KK15SnwhLRher0eCoWi0dp1zaHAE9KGnT9/Hkql0qLrd4ACT0iblpycDH9/f/Tv39+i8ynwhLRhLMsiMTERQqHQovMp8IS0UUVFRbhw4YLF1+8ABZ6QNkuhUAAAEhMTLf6ORqOhwBPSFiUnJyMmJgahoaEWf4d6eELaIKPRiCNHjlg8O1+HXp4hpA366aefUFJS0qLrd47jqIcnpC1iWRa+vr4YPHiwxd/RarUAHLdiLUCBJ6RVkpOTER8fD7FYbPF3HL1ENUCBJ6TFysrKcPbs2VZdvwMUeELalNTUVBiNRgo8Ie6AZVn07t0bYWFhLfoeBZ6QNobjuPrVbVqKAk9IG3P16lUUFBRQ4AlxByzLQiqV4vHHH2/xd50h8Hbf4EpvNKJKa4CR4yBgGHhLhBCZWfiPEGfBsixGjhzZqqfl3CbwFRodcpVq3FVpoNIZGh2XiYUIlXkgQi6Fr4fl9zUJsafKykqcOnUKa9asadX3XT7wKq0eGYXlKFJrwQDgmjtPZ0COUo1spRrBUgliQvwgkzhmd01CmpOWlgadTteq63fAOQJvs7F0rlINRV4xitW1jxM2F/Y6dceL1Voo8oqRq1TbqmmEtArLsujevTu6du3aqu+7bOBvlFYio7AcRs580B/EATByQEZhOW6UVtqieYS0mDW34+poNBowDOOwveEBGwQ+V6nGzyVVFp37v1+sxeReD2HJhBFNHv+5pAp51NMTJ/DLL78gLy/PqsDXvSnHMAyPLWsZXgOv0upxuajconNL7xZg/8Z18JRKTZ53qagcKq2ej+YR0mosy8LDwwPDhw9vdRmOfjUW4DnwGYXl4Cwcw+9YvRI9omLRtbfpzfe4+8N7QhyJZVkMGzYMUjMdlCkuFfgKjQ5Faq1F1+zX08/izJHDmPXGe2bP5QAUqbWo0OisbiMhraFWq3Hs2DGrhvOAiwU+V6mGJVcmBoMBW99/C/FPTUPnng9bVDZzv3xCHOH48ePQaDQU+D+7q9JY1Lun7PkKxQV3MPWl5RaXzd0vnxBHYFkWnTp1Qq9evawqx2UCrzMam3yC7kGVZfewZ92nmDJ/Cfz8zW+892cqnQF6o7G1TSSk1ViWxdixY62eXXeZwKu05sMOAF+vXQ1vuRxjZyS1qp4qC+shhC85OTnIysqyejgPOEfgeXkCwGjB1HxBXg5S9+7CrDfeQ1lRYf3nWq0GBp0ORXfy4eXtDR95O6vqIYRPLMtCJBJh5MiRVpflMoEXWDDUuVd4F0ajEVs/eBtbP3i70fH58YMw7rm/IWnFSqvqIYRPLMtiyJAh8PX1tboslwm8t8T8RnqdevTE8vVbG32+e+1qVKuqkLRiJULDwq2uhxC+aDQapKWl4e23G3dQrVFTUwO5XM5LWa3FS+BFAgFkYqHJiTvfdgEYFN940f7DO7YAQJPH/kwmbvzevMFggEql4uW3LyEPOnXqFFQqFS/X74Bz9PC83ZYLlXlYdB++NRgAqQf2ISwsDBEREQgKCoKXlxdEIhH8/PywefNmG9VM3BnLsggNDcUjjzzCS3mO3mYK4PF9+Ai5FNmteDhm5c5vzZ7DAVDs3YU7d+40eZyv/yGE/Fnd23F8veziUj28r4cYwVIJ7708AyBYKgF78ACCg4Mb/cfv1q0bBg4cyHOtxN3duXMH165da9Hecea4VOABICbED3xPpDNMbbmhoaFISUmBh4dHg9D/+uuv6NOnDzZu3Ai1mh6/JfxgWRYCgQDx8fG8lenoveEBngMvk4gQFezHZ5GIDv5juauoqCjs3bu3/lhQUBAUCgV69uyJBQsWoGPHjnjttddw69YtXttA3A/Lshg0aBD8/f15K9Plenig9lo+MtCbl7IiA30QLm/4OuKECROwevVqAMDixYsRHx+P/fv3Izs7G0lJSdi4cSO6dOmCp556CidPngRHD+uQFtLpdFAoFLzNztdxycADQK8AH8SE+EHAoMXX9AwAAQP0C/FDr4Cmf3EsW7YMCoUCy5f/8QJOeHg4Pv30U9y5cwfr16/H9evXERcXh9jYWGzfvr1+PTFCzDl79iwqKip4vX53hr3hARsuYhkhlyIhPAhBUgkA88GvOx4klSAhPKhRz97gXIZBfHx8k7c4vL29MX/+fFy/fh1HjhxB+/btMWvWLHTq1AnvvPMOCgoKWvkTEXfBsiwCAwMRGxvLW5l6vR5Go9F1Aw/UXtMPDQtAfHggusilkImbflJOJhaii1yK+PBADA0L4GWJaoFAgMTERBw+fBi//PILpk6dijVr1qBz586YPn06zp8/b3UdxDWxLIvExEQIeNwgxRlWrAUAcHamMxi4smotV6rWcGXVWk5nMNitbqVSya1Zs4br0qULB4AbPHgw9/XXX3NardZubSDO7e7duxwAbufOnbyWW1RUxAHgvvvuO17LbSm77/EkEggg9xTD30sCuafYrttM+fn5YcmSJcjKysLBgwchk8kwbdo0hIeH44MPPkBxcbHd2kKc05EjRwAAiYmJvJbrLD28W27qJhQKMXHiRKSmpuLq1asYN24c3n//fYSFhSEpKQmXL192dBOJg7Asi9jYWAQHB/NaLgXeSfTp0webNm3CnTt38N577yE1NRXR0dEYPnw49u/fD4OBFt1wFwaDASkpKbzfjgMo8E4nICAAr732GnJycrB3714YDAZMnjwZXbt2xaeffoqysjJHN5HY2MWLF1FaWsrr7bg6FHgnJRKJMGXKFJw8eRIXLlzAsGHD8Oabb6Jjx46YP38+MjMzHd1EYiPJycnw8/PDoEGDeC+7LvCOfluOAm9CbGwsduzYgdu3b2P58uU4cOAAIiMjMXr0aBw+fBhGGy6qqTcaoazR4V61FsoaHS3gaQcsyyIhIcEme785Sw/PcBw9e2oprVaLvXv3Yu3atbhw4QK6d++OxYsX469//St8fHysLr9Co0OuUo27Kk2Ti4nIxEKEyjwQIZfC10NsdX3kD6WlpQgODsamTZswe/Zs3ss/dOgQJk6ciN9//x2hoaG8l28p6uFbQCKRYMaMGTh//jxOnz6Nfv36YenSpejQoQOWLFmC7OzsVpWr0upxKr8UqXklyFGqm105SKUzIEepRmpeCU7ll9KeezxSKBQwGo02mbADaEjfpjEMg0cffRR79uxBXl4eFi1ahF27dqF79+6YMGECUlNTLX5pJ1ephiKvGMVqLQDz22vXHS9Wa6HIK6YdeXjCsiz69u2LDh062KT8usB7eXnZpHxLUeCt1LFjR6xatQr5+fnYvHkzbt26hYSEBPTt2xebNm0y+Y7+jdJKZBSWw8iZD/qDOADG+xtt3iittOpncHdGo9Hqvd/N0Whqd06iHt5FeHl5Yfbs2bh8+TLS0tLQvXt3zJs3r/4d/du3bzc4P1epxs8lVY3K+fXqJWxeuQIvjR+OaTFdMXdEf3y6ZC4Kcpu/XPi5pAp51NO32pUrV1BYWGjTwNetZ+fIveEBCjzvGIbBiBEjcODAAWRnZ2PWrFnYuHEjIiIi6t/Rr9LqcLmo6S2wD2z+F84qvscjg4ciacVKJDw9A5kXzuLVyaNxO+tGs/VeKiqna/pWSk5Ohkwmw9ChQ21WhzO8GgvQLL1dVFVVYceOHVi3bh2ysrKwNfUM2nXs3OQw/sZP6ejaJwpiiaT+s4K8HLw8cRQeHT0OL32yvsk6GNS+Wjw0rGV79hFg2LBhkMvlOHjwoM3qeP/997F+/XrcvXvXZnVYgnp4O/D29sbChQuRmZmJ5LTjkDcTdgDo1W9Ag7ADwEPhXRDWrQfuZN9stg4OQJFaiwqNjr+Gu4Hy8nKcPn3apsN5wHl6eAq8HQkEArSPjGrxKkAcx0FZWgKfdqbXV2MAmrVvobS0NOj1ego8sY27Kk2LZ+RPHNqPe4W/Y8gTE02ex90vn1guOTkZPXv2REREhE3rocC7IZ3RaHI7rqbcybmJLStXoGd0LIb/5Wmz56t0BnoM10Icx9n8dlwdCrwbUrVwf/uy4iKsmvscpD4+eGXtZgiFlm2mWdXCetxVZmYm8vPz3Srw/L8lQJrVkv3tVZUV+GDOdKgqKvD+vw/AP8Ty569bUo87S05OhqenJ4YNG2bzuijwbsjS/e21mhp8OP95FOTl4O/bvkFYtx42qcfdsSyL4cOH2+VxV2fYSBKgIb1dWbK/vcFgwP8snYesSxex7LNN6BnT3yb1uDuVSoUTJ07YZTgPUA/vlkQCAWRiocmJux0fv4f0tBT0H5GAqnIljv+n4e66wyZONlmHTCy068KgbdWxY8eg1Wop8MS2QmUeyFGqm701l5d5HQBw4QcFLvygaHTcVOANej2upP+I0MruiIqK4qO5Lis5ORnh4eHo0aNll0ut5QwbSQIUeLuLkEuRbeLhmJU7v232mDlCkQh7v/gnlv94AvHx8XjllVeQmJjo8Bc2nBHLshg7dqzd/ts4Sw9PYz878/UQI1gqafHTduYwAIKlEpw5dhS7d+9GWVkZxowZg0ceeQTbt2+vfz2T1G4xnp2dbbfhPECBd2sxIX7gu2NhmNpyRSIRpk6divT0dBw7dgzh4eGYNWsWwsPDsWrVKty7d4/fitsglmUhFosxYsQIu9VJgXdjMokIUcF+vJYZHezXYE8+hmEwbNgwHDp0CJmZmZgwYQJWrlyJsLAwLF68uNXLcbmC5ORkPP7447ysQ2gpCrybi5BLERnY9HbYLRUZ4G1yt91evXph06ZNuH37Nl599VXs2bMHPXr0wFNPPYWzZ8/y0oa2oqamBj/88INdh/N19VLg3VyvAB/EhPhBwJjfTvtBDACDXocNby7Dk0P64/vvvze7jl5wcDDeffdd3L59Gxs2bMDVq1fx6KOPYsiQIThw4IBb7LJz8uRJVFdXU+CJY0TIpUgID0KQtPYdeHPBrzseJJXA/14+jn67G1lZWRg3bhxiY2Nx+PBhs8H38vLC3LlzkZmZiYMHD0IkEmHSpEno2bMn/vWvf0GlUln/gzmp5ORkdOjQAX369LFbnXq9Hnq9ngJPaskkIgwNC0B8eCC6yKWQiZt+Uk4mFqKLXIr48EAMDQvAgKi+DY5fuXIF48ePR79+/fDLL7+YrVcgEGDixIk4fvw4zp8/j/79++PFF19Ep06d8NZbbzl8dRZbqHs7zp63KuvukDhD4O2+PzyxjM5g4MqqtVypWsOVVWs5ncHQ5HkdO3bkUPsqPAeAYxiGYxiGO3jwYKvqzc3N5ZYsWcJ5e3tzEomES0pK4q5du2bNj+I08vLyOADcvn377FpvSUkJB4Dbv3+/XettCvXwTkokEEDuKYa/lwRyT3Gzj8vGxsZC8Kdj3t7eYFkWEyeaXiyjOeHh4VizZg3y8/Pxj3/8A0eOHEGfPn3wxBNP4OjRoxavt++Mjhw5AqFQiPj4eLvW6yzbTAE0pG/zoqOjwXEcGIaBn58fPDw88Mgjj1hdrlwux/Lly5GTk4OvvvoKBQUFiI+PR79+/bBr1y7odG1v7bzk5GQMHjwYcrncrvVS4Alvhg4dCo7j8Nprr+H69esQiUSYNm0abzPuEokEM2fOREZGBlJTUxEaGoqZM2ciIiICn3zyCcrLm15u29lotVocPXrUJltBm+Ms20wBoGt4V1BaWlr/72lpaZxAIODeeecdm9V39epVbtasWZxEIuG8vb25pUuXcnl5eTarjw/Hjh3jAHAXLlywe90XL17kAHAXL160e90PosC7oJUrV3IMw3ApKSk2raegoIBbsWIF165dO04oFHLPPPMMl56ebtM6W+v111/ngoKCOEMzk5+29OOPP3IAuOvXr9u97gdR4F2QXq/nEhISuKCgIO63336zeX1VVVXcP//5T65Lly4cAC4uLo77z3/+45BwNScqKoqbMWOGQ+o+evQoB4DLzs52SP1/RtfwLkgoFGLXrl0Qi8V49tlnodfbdgsqmUyGRYsWISsrC99++y10Oh0mTpyIyMhIbNq0CdXV1Tat35yCggJcvnzZIdfvAE3aETsIDg7G7t27cerUKbz77rt2qVMoFGLSpEk4ffo0fvzxR/Tu3Rvz5s1D586d8d5776G4uNgu7XhQSkoKGIZBQkKCQ+p3psDTkN7FrVq1imMYhmNZ1iH137x5k1u4cCEnlUo5T09Pbs6cOdyNGzdsWueDDy1NnzmTGzBggE3rNOXf//43B4BTqVQOa0Md2kzSxRmNRowfPx7p6enIyMhAx44dHdKOe/fu4YsvvsC6detQWFiICRMmYNmyZYiLi2v0mCvHcaisrISvr6/F5VdodMhVqnFXpWm0ZiDHcTBUq9DzoWBEyKXw9RDz8jNZatu2bZg9ezb0er3FewvYCg3pXZxAIMBXX30FT09Pu1zPN8ff3x8rVqzArVu3sG3bNuTk5GD48OEYOHAg9uzZ06BdH3/8Mdq3b49Lly6ZLVel1eNUfilS80qQo1Q3uUAowzAQSb2Ro1QjNa8Ep/JL7bq1dk1NDcRiscPDDlDg3UJgYCD27NmDM2fO4K233nJoWzw8PDBr1ixcvXoVycnJkMvlePbZZ9GtWzesWbMGRUVFWL16NdRqNcaPH2/yuj9XqYYirxjFai0AmN2zr+54sVoLRV6x3TbedJZXYwEKvNsYMmQIPvzwQ3z88cc4fPiwo5sDhmEwZswYKBQKZGRkIC4uDsuXL0fnzp1RVlYGALh79y4mTZrU5GO8N0orkVFYDiNnPugP4gAYOSCjsBw3Siut/2HMcKbA0zW8GzEajXjyySdx+vRpZGRkoFOnTo5uUgO3b99GVFQUlEpl/WcMw2DevHnYsGFD/We5SjUyChs/0nvt3Gn8/fmnmiz7wz2H0CM6tslj/UL8TK4YZK133nkH27dvx+3bt21Wh6VomWo3IhAIsGPHDsTExGDq1Kk4fvw4xGL7TmCZcuXKlQZhB2on3D7//HP4+vrio48+gkqrx+Ui08/vPzFzNrr1jW7wWWjn8GbPv1RUjiCppMGagHxyph6ehvRuxt/fH9988w3S09PxxhtvOLo5DXz7bfNr8m/fvh1A7TDc3Jg0MnYQhk2c3OAf33YBzZ7P3R/e24ozBZ56eDc0ePBgrF69Gi+//DLi4uJa/e483z755BPMnDkTMpkMUqm0wT/e3t6o0OhQdH+CzpzqqipIPD0hFJn/K84BKFJrUaHR2eSWnbPsOgNQ4N3WkiVLcPz4cTz//PPIyMhAeHi4o5uEwMBAjBw5stnjuSVVYGB+km79iqWoUasgEArxcOwgPPfq2+jW1/TWWwxq5waiQvhdPhxwrh6ehvRuimEYfPnll5DL5XjmmWeg1VrWczrSXZXGZNhFYjEGJ45D0psr8fqGL/HsS8txOysTb8/4L+T8fNVk2dz98m3BWbaKBmiW3u2lp6djyJAhWLBgAT777DNHN6dZOqMRh24Wtvh7v9/KxctPjkJk/8F4e8vXZs+f2D2E9913n3zySRiNRhw6dIjXcluDeng3N2DAAHz66adYu3Yt9u/f7+jmNEulbd0KPu07R2DAyNG4du60RasAVbWyHlNoSE+cyuLFizF58mQkJSUhJyfH0c1pktGKgWhg+4eg12mhqTb/ZJ019TSHAk+cCsMw2Lp1KwICAvD000875U6zAivWkS/Mvw2Jhyc8pTKb1tMcCjxxOn5+fti3bx+uXr2KV155xdHNacRbYv7Fk/J7pY0+y7txHRd+SEHUkLgGy3lbU09LOVPg6bYcqdevXz+sWbMGCxcuRFxcHKZMmeLoJtUTCQSQiYVNvg1X53+WzoPE0xM9Y/rDzz8Qd7KzoNi7CxJPL8xY9qbZOmRiIe8TdgAFnjix+fPn48SJE5g9ezZiYmLQrVs3RzepXqjMAzlKdbO35gaOGo2T/3cAh77chGpVJXzbBWBQwhN4euHLaN85wmTZzP3ybcGZAk+35UgjFRUV6N+/P2QyGc6cOeM0f1krNDqk5pXYrPz48ECbPGkXEhKCF198EW++aX6UYWt0DU8a8fX1xd69e5GZmYmlS5c6ujn1fD3ECJZKWry1tjkMgGCpxGYr4ThTD0+BJ02Kjo7GunXr8MUXX2D37t2Obk69mBA/8D2RzjC15doKBZ60CS+88AKmTZuGOXPmWLT9tD3IJCJEBfMbzuhgP5u9Gms0GqHVainwxPkxDIONGzeiQ4cOePrppx2+vnydCLkUkYHevJQVGehj08Uv6t5RoMCTNsHb2xv79u3DzZs38eKLLzq6OfV6BfggJsQPAgYtvqZnAAiY2pVuegXw84ujOU61Jj0o8MQCffv2xfr167Flyxbs2rXL0c2pFyGXIiE8CEFSCQDzwa87HiSVICE8yKY9ex1nCzzdhycWmTVrFo4fP465c+ciNjYWDz/8sKObBKD2mn5oWIDJdemB2odqQmUedl+X3qm2igbdhyctoFKpMGDAAAgEApw7dw4ymfln0x1BbzSiSmuAkeMgYBh4S2zzBJ0lbty4gYcffhgnT57E0KFDHdKGP6MhPbGYTCbDvn37kJubi0WLFjm6Oc0SCQSQe4rh7yWB3FPssLADzjekp8CTFunduzc2bNiA7du31y8sSZpHgSdt3vPPP49Zs2ZhwYIFuHbtmqOb49Qo8MQlrF+/Hl27dsWUKVNQVVXl6OY4LQo8cQlSqRT79u1Dfn4+FixYAJr7bRoFnriMXr16YePGjdi5cye2bdvm6OY4JQo8cSnTp0/HCy+8gEWLFuHKlSvNnqc3GqGs0eFetRbKGh30RqMdW+k4zhZ4evCGWG3t2rU4f/48pkyZggsXLsDHxwcAnPZhGHuqqamBUCiEyIIdcOyBenhiNS8vL+zduxcFBQWYO3cuqrQ6nMovRWpeCXKU6maXpVLpDMhRqpGaV4JT+aVQafV2brntOdM2UwAFnvCkR48e2LJlC4p0DFKyi1B8fw84c1N5dceL1Voo8oqRqzS/lHRb4kzvwgM0pCc8iop/Agui4wCYD/qDOPyxi6vGYECvAB/e2+cIFHjiknKVavxc0vT9+GqVCge3bsDNKxn49eolVJUrsXDVGoyc9EyT5/9cUgVPodAub7PZmrMFnob0xGoqrR6Xi5rfX72y7B72bViDOzk30blnpEVlXioqd4lrego8cTkZheUw9dxNu+BgbDl5CRvT0vHcq29bVGbd8L6to8ATl1Kh0aFIrTV5zS6WeKBdUHCLyuUAFKm1qNDorGqfoznTVtEABZ5YKVep5n3Z6DrM/fLbMurhiUu5q9K0eEbeUtz98tsyCjxxGTqj0eReb3xQ6Qxt+jFcCjxxGSqtbcNep8pO9dgCBZ64DKOdXom1Vz22QIEnLkPA955PDq7HFijwxGV4S4QuVY8tONvLM/RoLWk1kUAAmVho0cTd97u2QV1ZgXtFhQCACz8ocK/wdwDA2BlJkPn4Nvm94ju3MefjN5GYmIj4+HgEBgby9wPYgbP18BR4YpVQmQdylGqzt+b+s+0LFBfcqf/zOcX3OKf4HgAQN2Fy04HnOOiVJbhw4QK+/PJLMAyDfv36ITExEYmJiXjssccgkUh4/Gn4U7c2fkhEN/iFtIfeaHToctl1aCMKYpUKjQ6peSU2Kz8+PBC+HmIUFBQgNTUVKSkpSElJQXFxMWQyGYYPH47Ro0cjMTERPXr0AOPA6/22sOAHBZ5Y7VR+KYrNPF7bUgxq94AbGhbQ6JjRaMTly5frw3/q1ClotVp06tSpvvcfNWoU/P39eWxR81RaPTIKy1Gk1oKB6VeD644HSyWICbHdNtXN1k+BJ9ZSafVQ5BXDyOPfJAEDJIQHWRQIlUqFEydOICUlBUeOHEFmZiYYhsGAAQOQmJiI0aNHY9CgQRCL+e9Vc5VqXC6qfXmoJT8+A4BhgKhgP0TY8TVgCjzhRa5Szevbbf1C/Fr9Pnx+fj4UCgVSUlKgUChw7949+Pj4YOTIkfUjgK5du5oc/h86dAj9+/dH+/btmz3nRmlls2sAtERkoLfdFvygwBPe8BcAH972bTcYDPjpp5/qh/+nT5+GXq9HREREfe8/YsQIyOXy+u/k5+ejU6dOaN++PY4ePdrkTrnN/YK7ffMX7F3/38i+fgXKkiJ4eHqhY7ceeDJpPgaMTGy2ndb8gmsJCjzhlbVD3Ohg2/7Fr6ysxLFjx+p/AWRlZUEoFGLQoEH1vf+1a9cwZ84cCIVCyGQyfP/99xgyZEh9GaYuYS4eP4rvd25Fz+hYtAsOhaamGmdTDiPzwjnMfW81Ep+Z0WS7WnIJYw0KPOFdW5rEysvLqw//0aNHoVQqIRKJYDAYwHEcBAIBRCIRvvnmG/zlL38B0PJJSoPBgOWTR0Or0eCfySebPMfUJCWfKPDEZtrCbao/0+v1OHfuHEaNGgWNpvFrucuXL8ebK99v1W3IVfOeQ/a1y9h66rLJ8+puQ9oKPXhDbMbXQ4yoED9E4Y8HUYwcBwHDwFsidIoHUf5MJBJBIpE0CLtAIIDx/uu5n332Gaa9vMLsqAUAatRqaDXVUFdWIj0tBRknf8CQsRNNfqduwY+oED/rfhATKPDELkQCAeSezhXwptRtlyUQCNC1a1cMHjwYsbGxiI2NRVRUFE4XV1s0lN/x8XtI+WZnfVmDEp7A397+wOR36hb8iLLyZzCFAk/In0yfPh3R0dHo1asXZDJZg2M6oxGqAsvuQox7/m8YPHocyooKcTr5EIxGA/Q68+vz1S34YavRD13DE2IhZY0Oabda9xjxyqSpUFVW4KO9h80+/juycyDknra5jnf+MRYhTsKahTgGjx6PX69eQkFutk3rMYcCT4iFrFmIQ6up3TZaXVVp03rMlm2zkglxMZYsxFFe2njIr9fpcPy7fZB4eqJj1x681NNaNGlHiIUsWfDji78vR3VVFSL7D4J/SCiUJcU4cWg/fsv5Fc+/9nd4PTAR+CCZ2La3K2nSjpAWuFxYbnLBj1OHv8PRb3fjdtYNVCrL4CXzRpfeffHEjCQMGDnaZNkMgC5yqU3vw1PgCWkBey34YSt0DU9IC/h6iBEslfC+vRaD2vcJbP2IMQWekBaKCfED3xPpDFNbrq1R4AlpIZlEhKhgfsMZHWyfNwUp8IS0QoRcishAfhbpiAz0scviFwBN2hFiFWdf8KNRvRR4QqzTlhb8oMATwpO2sOAHBZ4QG3DWBT8o8IS4Ecf/yiGE2A0FnhA3QoEnxI1Q4AlxIxR4QtwIBZ4QN0KBJ8SNUOAJcSMUeELcCAWeEDdCgSfEjVDgCXEjFHhC3AgFnhA3QoEnxI38P7BYMY5paZN/AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "G = nx.DiGraph()\n", "edges = [(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (5, 6)]\n", "G.add_edges_from(edges)\n", "plot_graph(G, seed=2, figsize=(3, 3))\n", "\n", "adjacency_matrix = nx.to_numpy_array(G).astype(int)\n", "print(f\"adjacency matrix\\n {adjacency_matrix}\")\n", "\n", "adjacency_list = {n: list(neighbors) for n, neighbors in G.adj.items()}\n", "print(f\"adjacency list\\n {adjacency_list}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Implementation of BFS for Graph using Adjacency List:](https://www.geeksforgeeks.org/breadth-first-search-or-bfs-for-a-graph/)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Breadth First Traversal starting from vertex 0: 0 1 2 3 4 " ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from collections import deque\n", "\n", "# Function to perform Breadth First Search on a graph\n", "# represented using adjacency list\n", "def bfs(adjList, startNode, visited):\n", " # Create a queue for BFS\n", " q = deque()\n", "\n", " # Mark the current node as visited and enqueue it\n", " visited[startNode] = True\n", " q.append(startNode)\n", "\n", " # Iterate over the queue\n", " while q:\n", " # Dequeue a vertex from queue and print it\n", " currentNode = q.popleft()\n", " print(currentNode, end=\" \")\n", "\n", " # Get all adjacent vertices of the dequeued vertex\n", " # If an adjacent has not been visited, then mark it visited and enqueue it\n", " for neighbor in adjList[currentNode]:\n", " if not visited[neighbor]:\n", " visited[neighbor] = True\n", " q.append(neighbor)\n", "\n", "# Function to add an edge to the graph\n", "def addEdge(adjList, u, v):\n", " adjList[u].append(v)\n", "\n", "def main():\n", " # Number of vertices in the graph\n", " vertices = 5\n", "\n", " # Adjacency list representation of the graph\n", " adjList = [[] for _ in range(vertices)]\n", "\n", " # Add edges to the graph\n", " addEdge(adjList, 0, 1)\n", " addEdge(adjList, 0, 2)\n", " addEdge(adjList, 1, 3)\n", " addEdge(adjList, 1, 4)\n", " addEdge(adjList, 2, 4)\n", "\n", " # Mark all the vertices as not visited\n", " visited = [False] * vertices\n", "\n", " # Perform BFS traversal starting from vertex 0\n", " print(\"Breadth First Traversal starting from vertex 0:\", end=\" \")\n", " bfs(adjList, 0, visited)\n", " \n", " #plot the graph\n", " G = nx.Graph()\n", " G.add_edges_from([(0, 1), (0, 2), (1, 3), (1, 4), (2, 4)])\n", " plot_graph(G, seed=2, figsize=(3, 3))\n", "\n", "if __name__ == \"__main__\":\n", " main()\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Graph information\n", "Directed : False\n", "Number of nodes : 5\n", "Number of edges : 9\n", "Average degree : 3.6000\n", "Connectivity : connected\n" ] } ], "source": [ "from netsci.analysis import graph_info\n", "graph_info(graph_w)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Table 2.1" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "import networkx as nx\n", "import pandas as pd\n", "from netsci.analysis import average_degree\n", "from netsci.utils import list_sample_graphs, load_sample_graph" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "# nets = list(list_sample_graphs().keys())\n", "nets = [\n", " 'Collaboration',\n", " 'Internet',\n", " 'PowerGrid',\n", " 'Protein',\n", " 'PhoneCalls',\n", " 'Citation',\n", " 'Metabolic',\n", " 'Email',\n", " 'WWW',\n", " 'Actor'\n", "]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### run the following only on colab" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", "from google.colab import drive\n", "import os\n", "\n", "# URL of the zip file to be downloaded\n", "url = \"https://networksciencebook.com/translations/en/resources/networks.zip\"\n", "# Mount Google Drive\n", "drive.mount('/content/drive')\n", "# Create the 'network_science' directory in MyDrive if it doesn't exist\n", "network_science_dir = '/content/drive/MyDrive/network_science'\n", "os.makedirs(network_science_dir, exist_ok=True)\n", "# empty the directory\n", "!rm -rf /content/drive/MyDrive/network_science/*\n", "# Change directory to 'network_science'\n", "os.chdir(network_science_dir)\n", "# Download the zip file to the 'network_science' directory\n", "!wget $url -O networks.zip\n", "# Unzip the downloaded file in the 'network_science' directory\n", "!unzip networks.zip\n", "\n", "json_file = \"https://raw.githubusercontent.com/Ziaeemehr/netsci/main/netsci/datasets/sample_graphs.json\"\n", "# download json file\n", "!wget $json_file -O sample_graphs.json\n", "\n" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "# on colab:\n", "# G = load_sample_graph(\"Internet\", colab_path=network_science_dir)\n", "\n", "# on local:\n", "G = load_sample_graph(\"Internet\")" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Graph information\n", "Directed : False\n", "Number of nodes : 192244\n", "Number of edges : 609066\n", "Average degree : 6.3364\n", "Connectivity : disconnected\n" ] } ], "source": [ "graph_info(G)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Processing sample graphs: 100%|██████████| 10/10 [00:00<00:00, 79588.31it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Collaboration\n", "Internet\n", "PowerGrid\n", "Protein\n", "PhoneCalls\n", "Citation\n", "Metabolic\n", "Email\n", "WWW\n", "Actor\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "for net in tqdm(nets, desc=\"Processing sample graphs\"):\n", " print(net)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Processing sample graphs: 100%|██████████| 9/9 [00:30<00:00, 3.42s/it]\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
num_nodesnum_edgesavg_degreedirectedname
023133934398.078416FalseCollaboration
11922446090666.336385FalseInternet
2494165942.669095FalsePowerGrid
3201829302.903865FalseProtein
436595918265.018500TruePhoneCalls
5449673468947920.857285TrueCitation
61039580211.168431TrueMetabolic
7571941037313.627339TrueEmail
832572914971349.192513TrueWWW
\n", "
" ], "text/plain": [ " num_nodes num_edges avg_degree directed name\n", "0 23133 93439 8.078416 False Collaboration\n", "1 192244 609066 6.336385 False Internet\n", "2 4941 6594 2.669095 False PowerGrid\n", "3 2018 2930 2.903865 False Protein\n", "4 36595 91826 5.018500 True PhoneCalls\n", "5 449673 4689479 20.857285 True Citation\n", "6 1039 5802 11.168431 True Metabolic\n", "7 57194 103731 3.627339 True Email\n", "8 325729 1497134 9.192513 True WWW" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_list = []\n", "\n", "for net in tqdm(nets[:-1], desc=\"Processing sample graphs\"):\n", " G = load_sample_graph(net) # on colab: add colab_path=network_science_dir\n", " num_nodes = G.number_of_nodes()\n", " num_edges = G.number_of_edges()\n", " avg_degree = average_degree(G)\n", " directed = nx.is_directed(G)\n", " \n", " # Append a dictionary of data for this network to the list\n", " data_list.append({\n", " 'num_nodes': num_nodes,\n", " 'num_edges': num_edges,\n", " 'avg_degree': avg_degree,\n", " \"directed\": directed,\n", " \"name\": net\n", " })\n", "\n", "# Create the DataFrame from the list of dictionaries\n", "df = pd.DataFrame(data_list)\n", "\n", "# Display the DataFrame\n", "df" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 2 }