diff --git a/ml/PCA/PCA.ipynb b/ml/PCA/PCA.ipynb
new file mode 100644
index 000000000..b789cda9c
--- /dev/null
+++ b/ml/PCA/PCA.ipynb
@@ -0,0 +1,350 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "PCA.ipynb",
+ "provenance": []
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "NKbFf5MGILD_",
+ "outputId": "7e9dd1a9-8084-4522-affb-81264e2d0d44",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 206
+ }
+ },
+ "source": [
+ "import pandas as pd\n",
+ "url = \"https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data\"# load dataset into Pandas DataFrame\n",
+ "df = pd.read_csv(url, names=['sepal length','sepal width','petal length','petal width','target'])\n",
+ "df.head()"
+ ],
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length | \n",
+ " sepal width | \n",
+ " petal length | \n",
+ " petal width | \n",
+ " target | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 5.1 | \n",
+ " 3.5 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ " Iris-setosa | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 4.9 | \n",
+ " 3.0 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ " Iris-setosa | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 4.7 | \n",
+ " 3.2 | \n",
+ " 1.3 | \n",
+ " 0.2 | \n",
+ " Iris-setosa | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 4.6 | \n",
+ " 3.1 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ " Iris-setosa | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 5.0 | \n",
+ " 3.6 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ " Iris-setosa | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length sepal width petal length petal width target\n",
+ "0 5.1 3.5 1.4 0.2 Iris-setosa\n",
+ "1 4.9 3.0 1.4 0.2 Iris-setosa\n",
+ "2 4.7 3.2 1.3 0.2 Iris-setosa\n",
+ "3 4.6 3.1 1.5 0.2 Iris-setosa\n",
+ "4 5.0 3.6 1.4 0.2 Iris-setosa"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 12
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "0ahOyAF-IOsM"
+ },
+ "source": [
+ "from sklearn.preprocessing import StandardScaler\n",
+ "features = ['sepal length', 'sepal width', 'petal length', 'petal width']# Separating out the features\n",
+ "x = df.loc[:, features].values# Separating out the target\n",
+ "y = df.loc[:,['target']].values# Standardizing the features\n",
+ "x = StandardScaler().fit_transform(x)\n"
+ ],
+ "execution_count": 13,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "tlDaM49qISdp"
+ },
+ "source": [
+ "from sklearn.decomposition import PCA\n",
+ "pca = PCA(n_components=2)\n",
+ "principalComponents = pca.fit_transform(x)\n",
+ "\n",
+ "principalDf = pd.DataFrame(data = principalComponents\n",
+ " , columns = ['principal component 1', 'principal component 2'])"
+ ],
+ "execution_count": 5,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "spbeLNJCIZ1M",
+ "outputId": "ba51020c-4e5a-4181-f573-0aa0898007c6",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 424
+ }
+ },
+ "source": [
+ "finalDf = pd.concat([principalDf, df[['target']]], axis = 1)\n",
+ "finalDf"
+ ],
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " principal component 1 | \n",
+ " principal component 2 | \n",
+ " target | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " -2.264542 | \n",
+ " 0.505704 | \n",
+ " Iris-setosa | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " -2.086426 | \n",
+ " -0.655405 | \n",
+ " Iris-setosa | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " -2.367950 | \n",
+ " -0.318477 | \n",
+ " Iris-setosa | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " -2.304197 | \n",
+ " -0.575368 | \n",
+ " Iris-setosa | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " -2.388777 | \n",
+ " 0.674767 | \n",
+ " Iris-setosa | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 145 | \n",
+ " 1.870522 | \n",
+ " 0.382822 | \n",
+ " Iris-virginica | \n",
+ "
\n",
+ " \n",
+ " 146 | \n",
+ " 1.558492 | \n",
+ " -0.905314 | \n",
+ " Iris-virginica | \n",
+ "
\n",
+ " \n",
+ " 147 | \n",
+ " 1.520845 | \n",
+ " 0.266795 | \n",
+ " Iris-virginica | \n",
+ "
\n",
+ " \n",
+ " 148 | \n",
+ " 1.376391 | \n",
+ " 1.016362 | \n",
+ " Iris-virginica | \n",
+ "
\n",
+ " \n",
+ " 149 | \n",
+ " 0.959299 | \n",
+ " -0.022284 | \n",
+ " Iris-virginica | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
150 rows × 3 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " principal component 1 principal component 2 target\n",
+ "0 -2.264542 0.505704 Iris-setosa\n",
+ "1 -2.086426 -0.655405 Iris-setosa\n",
+ "2 -2.367950 -0.318477 Iris-setosa\n",
+ "3 -2.304197 -0.575368 Iris-setosa\n",
+ "4 -2.388777 0.674767 Iris-setosa\n",
+ ".. ... ... ...\n",
+ "145 1.870522 0.382822 Iris-virginica\n",
+ "146 1.558492 -0.905314 Iris-virginica\n",
+ "147 1.520845 0.266795 Iris-virginica\n",
+ "148 1.376391 1.016362 Iris-virginica\n",
+ "149 0.959299 -0.022284 Iris-virginica\n",
+ "\n",
+ "[150 rows x 3 columns]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 10
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "OHYXlrIjIhKU",
+ "outputId": "4987771b-5520-4b18-c3eb-eea08af8e7a0",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 523
+ }
+ },
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "fig = plt.figure(figsize = (8,8))\n",
+ "ax = fig.add_subplot(1,1,1) \n",
+ "ax.set_xlabel('Principal Component 1', fontsize = 15)\n",
+ "ax.set_ylabel('Principal Component 2', fontsize = 15)\n",
+ "ax.set_title('2 component PCA', fontsize = 20)\n",
+ "targets = ['Iris-setosa', 'Iris-versicolor', 'Iris-virginica']\n",
+ "colors = ['r', 'g', 'b']\n",
+ "for target, color in zip(targets,colors):\n",
+ " indicesToKeep = finalDf['target'] == target\n",
+ " ax.scatter(finalDf.loc[indicesToKeep, 'principal component 1']\n",
+ " , finalDf.loc[indicesToKeep, 'principal component 2']\n",
+ " , c = color\n",
+ " , s = 50)\n",
+ "ax.legend(targets)\n",
+ "ax.grid()"
+ ],
+ "execution_count": 9,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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i69K+La3vS2y9/3KV74S2WtXg4J6vcpkYNky6Oz0HjOZardIRGpFhb4/tm/fDsC9994byeuDgrokQXc3tLXBggWwZIn32NbmbRcRKSXi7481a9Zwyimn8L73vY/DDz8cGLqLf+GFF3j729/OtGnTmDp1Kvfcc89uz1+/fj0nnHAC06ZN46ijjqKnpweA66+/fuf2888/nx07drBo0SJee+01pk2bxpw5cwD49re/zdSpU5k6dSrf/OY3Aejr6+Nv/uZvOProo5k6dSpdXV0AXH755Rx//PFMnTqV+fPn45wL5RyMhrLf600mAx0du15Z9/V5jx0dsHEjlOgGE5E6VqHvj3Xr1vHwww/vlvX94x//mPe85z18/vOfZ8eOHWzZsmW351577bV8+tOfZs6cOQwMDLBjxw4effRRurq6+PWvf01jYyMXXHABy5cv54orruDb3/42Dz74IABr167l+uuv57777sM5x4knnsipp57Kk08+yYEHHsjNN98MwCuvvALAJz/5Sb7whS8A8JGPfIRf/vKX/O3f/u2o//6joTv1etPVBYOD/vsGB739IiJ+KvT9ccIJJ/hO4zr++OP5/ve/z2WXXcYf/vAH36lnJ510El/5ylf46le/ytNPP82ee+7JHXfcwdq1azn++OOZNm0ad9xxB08++eRuz+3u7ua9730vLS0ttLa28sEPfpB77rmHI488kttvv53Ozk7uuece9t57bwBWr17NiSeeyJFHHsmdd97J+vXrQ/n7j4aCer3p6Rm6si7U1wcbNlS2PSJSOyr0/dHS0uK7/e1vfzt33303bW1tnHPOOfzwhz/kpptuYtq0aUybNo0HHniAD3/4w/z85z9nzz33pKOjgzvvvBPnHHPnzuXBBx/kwQcf5PHHH+eyyy4L3J5DDz2UdevWceSRR3LxxRdz+eWXs3XrVi644AJWrlzJH/7wB84777yyp59FQUG93rS3Q5EPDC0tMGVKZdsjIrWjyt8fTz/9NBMnTuS8887j3HPPZd26dXzgAx/YGaynT5/Ok08+yRvf+EY+9alP8f73v5///d//5R3veAcrV67kpZdeAmDz5s08/fTTADQ2NrJt2zYATjnlFG6++Wa2bNlCX18fN910E6eccgobN25k3Lhx/MM//AOf/exnWbdu3c4APmHCBHp7e1m5cmWkf/egNKZeb9JpWLjQf19Dg7dfRMRPlb8/1qxZw9e+9jUaGxtpbW3lhz/84W7H/OQnP+FHP/oRjY2NHHDAAXzuc59j/PjxfPnLX+bd7343g4ODNDY2cvXVV/OGN7yB+fPnc9RRR3HssceyfPly5syZwwknnADAueeeyzHHHMNtt93GZz/7WRoaGmhsbOSaa65hn3324bzzzmPq1KkccMABHH/88ZH+3QNzztX0z3HHHecKrV69erdt9cr3XNxzj3OplHMtLc6B95hKedsTTP8vPDoPQ3QuPI888oh79dVXgx2c8O+PwOehQh555JHdtgEPuCIxUXfq9WjGDC9LtavLGwObMsW7wlbWu4gMR98fsaagXq9aW2HevGq3QkRqkb4/YkuJciIiIgmhoC4iIpIQCuoiIiIJoaAuIiKSEArqIiJSddVaejWIjRs3cuaZZ47ouTNnzuSBBx4IuUXFKftdRETKkunP0LW+i56Xe2jft530EWlSzbvXYR+t7du3M3bs2EiXXi18Pz8HHnhgxSrG7dixgzFjxoz4+bpTFxGRwLqf6abtqjYW3LqAJfcuYcGtC2i7qo3uZ6q/9Oorr7zCG97wBgazi8709fUxefJktm3bxh//+EdOP/10jjvuOE455RQee+wxAM455xw+9rGPceKJJ/Iv//IvdHd376wlf8wxx5DJZHjqqaeYOnUq4AXdiy66iKlTp3LUUUfxrW99C4A77riDY445hiOPPJKPfvSj9Pf37/Z3u+GGGzjyyCOZOnUqnZ2dO7e3trZy4YUXcvTRR/Ob3/xmVOdPd+oiIhJIpj9Dx/IOMgNDS6/2bfMWeOlY3sHGCzfS2lS9pVf33ntvpk2bxl133cWsWbP45S9/yXve8x4aGxuZP38+1157Le3t7fzud7/jggsu4M477wTgueee495772XMmDGcccYZXH311Zx88sn09vayxx577PIe3/3ud3nqqad48MEHGTt2LJs3b2br1q2cc8453HHHHRx66KH84z/+I9dccw0LFizY+byNGzfS2dnJ2rVred3rXse73/1ufvazn/F3f/d39PX1ceKJJ3LllVeO+tzpTl1ERALpWt/FoPNfenXQDdL1cPWXXk2n03Rll4BdsWIF6XSa3t5e7r33Xs466yymTZvG+eefzwsvvLDzOWedddbOLu+3vvWtLFy4kH//93/nr3/9K2PH7nrv+6tf/Yrzzz9/5/bx48fz+OOPc8ghh3DooYcCMHfuXO6+++5dnnf//fczc+ZM9ttvP8aOHcucOXN2HjNmzBhmz5490tO1CwV1EREJpOflnp135oX6tvWxYXP1l1593/vex6233srmzZtZu3Ytp512GoODg+zz/9u7/+ioyjuP4+9PMBpMYC1oVwQRKBSFICAEW+VU3NVWEUFdMVXrLltBqaUiWEu3tqhYT6lue9ptyy4qiihiFtEja7PHXxBc9hx/gAtV5IeURatQFFgxQVOEfPeP5yYZhiHMhAyXmfm+zrlncu997r3feSbJM89zn/s8J5zQNJvbqlWrWLt2bcrrTZ06lQcffJDPPvuMc889t6mZPptKSkoO6z56Ii/UnXPOpaVP5z6UFqcucEuLS+ndKf6pV8vKyqioqGDy5MmMGjWKdu3a0bFjR3r27MnChQuBMJHZ6tWrU15j06ZNDBgwgGnTplFRUXFAoX7hhRcye/bspk51O3fupG/fvmzevJmN0Xzyjz76KOedd95+xw0bNoxly5axfft29u3bx4IFCw5I0xa8UHfOOZeWyv6VFCl1sVGkIirLsz/16sCBAxk8eDBVVVVMnjw5ZbrKykoee+wxKhOmgp0/fz5z5sxh4MCB9O/fn2eeeSblsbNmzWrqBFdcXMzFF1+83/7x48fTvXt3zjzzTAYOHMjjjz9OSUkJDz/8MGPHjmXAgAEUFRUxceLE/Y7r0qULM2fO5Pzzz2fgwIEMGTKEMWPGHGaOHEhhFrfcNXToUEt+BrCmpoYRI0bEE9BRxvOimedF4PnQzPMiWLt2Ld26dUt5jzrZ8veWM3L+SBqsgd2f76a0uJQiFVF9bTXDuw8/AtFmV21tbVr5cKSsXbuWM844Y79tklaa2dBU6b33u3POubQN7z6cLbduoeqtKjbu3EjvTr2pLK9sk17v7vB5oe5cnjhSA4I4V3ZsGdef5VOvHo28UHcuD6RqEp363NS8aRJ1zqXHO8o5l+MSBwRpfNxo9+e7qd0TttftqYs5QufckeKFunM57kgNCOKcO/p5oe5cjjtSA4I4545+Xqg7l+PiHhDEubaQ7alXp0+fzosvvpjRMYsXL2bmzJktpjmcaVmzwTvKOZfjKvtXMvW5qSn3HYkBQVzhqa2Fqip45x3o0wcqKyEbj3a35dSrM2bMSLm9palOR48ezejRo1s875GcljUdXlN3Lsd1OK4D1ddW0+HYDk019tLiUjocG7b788OuLS1fDl27wi23wL33hteuXcP2tpCtqVfHjRvXVPj26NGDadOmcdZZZ7Fw4UKqq6s5/fTTGTJkCLfddhujRo0CYO7cuUyaNAkIU7TefPPNnHPOOfTq1avpXOlMyzpjxgwqKiooLy/nhhtuIJuDvnlN3bk84AOCuCOhthZGjgyvjXZH3TlGjoQtW6CFVvS0ZWPq1WSdO3fmjTfeoL6+nj59+vDyyy/Ts2fPFpvSt27dyvLly1m3bh2jR48+IG2qaVkBJk2axPTp0wG47rrrePbZZ7n00ktblTeH4jV15/JE44AgP7vgZ1x/1vVeoLs2V1UFDakftKChIexvC2099WoqjdvXrVtHr169mq43duzYg8Z12WWXUVRURL9+/di2bdsB+1NNywqwdOlSzj77bAYMGMCSJUtYs2ZNS2//sHih7pxzLi3vvNNcM0+2ezdsbKMHLdp66tVMrtGS4447runndJvQ6+vruemmm3jyySd58803mTBhAvX19RlfO11eqDvnnEtLnz5wsLKwtBR6Z/lBi9ZOvdqSvn37smnTJjZv3gzAokWLWh1fqmlZGwvwE088kbq6uqx3qvN76s4559JSWQlTUz9oQVFR2J9NNTU13HfffRQXF1NWVsa8efNSpqusrGTs2LHU1NQc8pzt27dn1qxZXHTRRZSWljJo0KCU9+DTMX78eDZs2NA0beuECROYNGkSEyZMoLy8nJNPPpmKiopWnTtdPvVqnvO8aOZ5EXg+NPO8CDKaenV56BTX0BCa3EtLQ4FeXQ3Dc3Sagbq6OsrKyjAzJkyYQP/+/ZkyZUrcYQE+9apzzrksGj489HKvqgr30Hv3DjX0tuj1HpcHHniARx55hD179lBeXs6NN94Yd0it5oW6c865jJSVwfV5NPPqlClTmmrmtbW1HH/88TFH1HreUc4555zLE16oO+ecy+ooZ651WvOZeKHunHMFrqSkhF27dnnBfhQxM3bs2EFJSUlGx/k9deecK3DdunVj9erV1NXVxR1K7Orr6zMuSLOlpKSEbt26ZXSMF+rOOVfgiouLqaurY+jQlE9JFZSamhoGDx4cdxit5s3vzjnnXJ7wQt0555zLE16oO+ecc3ki54eJlfQR8G7S5hOB7TGEczTyvGjmeRF4PjTzvGjmeRHkQj6cZmYnpdqR84V6KpJWHGxc3ELjedHM8yLwfGjmedHM8yLI9Xzw5nfnnHMuT3ih7pxzzuWJfC3U7487gKOI50Uzz4vA86GZ50Uzz4sgp/MhL++pO+ecc4UoX2vqzjnnXMHJ20Jd0t2S/iBplaTnJZ0Sd0xxkXSfpHVRfjwt6YS4Y4qDpLGS1khqkJSzvVsPh6SLJK2XtFHSD+OOJy6SHpL0oaS34o4lTpJOlbRU0tvR38bkuGOKi6QSSa9JWh3lxV1xx9Qaedv8LqmjmX0S/Xwz0M/MJsYcViwkfR1YYmZ7Jf0cwMymxRzWESfpDKABmA1838xWxBzSESWpHbABuBB4H3gduNrM3o41sBhI+hpQB8wzs/K444mLpC5AFzN7Q1IHYCVwWYH+TggoNbM6ScXAcmCymb0Sc2gZyduaemOBHikF8vPbSxrM7Hkz2xutvgJkNu1PnjCztWa2Pu44YjQM2Ghmm8xsD/AEMCbmmGJhZi8DO+OOI25mttXM3oh+rgXWAl3jjSoeFjROU1ccLTlXbuRtoQ4g6R5JfwKuBabHHc9R4tvAf8YdhItFV+BPCevvU6D/wN2BJPUABgOvxhtJfCS1k7QK+BB4wcxyLi9yulCX9KKkt1IsYwDM7HYzOxWYD0yKN9rsOlReRGluB/YS8iMvpZMPzrn9SSoDFgG3JLVyFhQz22dmgwitmcMk5dytmZyeT93MLkgz6XygGrgji+HE6lB5IWkcMAr4W8vXjhRk9DtRiD4ATk1Y7xZtcwUsun+8CJhvZk/FHc/RwMw+lrQUuAjIqc6UOV1Tb4mkPgmrY4B1ccUSN0kXAT8ARpvZp3HH42LzOtBHUk9JxwLfBBbHHJOLUdQ5bA6w1sx+GXc8cZJ0UuOTQZLaEzqU5ly5kc+93xcBfQm9nd8FJppZQdZKJG0EjgN2RJteKcQnASRdDvwGOAn4GFhlZt+IN6ojS9JI4FdAO+AhM7sn5pBiIWkBMIIwI9c24A4zmxNrUDGQNBz4L+BNwv9KgB+ZWXV8UcVD0pnAI4S/jSLg381sRrxRZS5vC3XnnHOu0ORt87tzzjlXaLxQd8455/KEF+rOOedcnvBC3TnnnMsTXqg755xzecILdVcwJN0pyRKWLZIWSfpSGsfOldTmE8BEMW1v6/NG5x4Xvc+yNNIOklQl6c+S9kR5M19SRTZiyzeSrooGeEonbaWkpyRtjT6ftI5zLh1eqLtCswv4arR8HxgEvCSp9BDH3Q2My0I8DwKxPisv6QrgNaAzMAW4ALgV+Cvg+RhDyyVXkf7vx5VAD+DZbAXjCldODxPrXCvsTZhK8RVJ7xEG3xgJLExOLKm9mX1mZn/MRjBm9j5hYpVYSDqFMODGAmBc0hDCCySNiieyvFZpZg1RC8r4uINx+cVr6q7QrYxeewBI2izpF5J+Iul94JNo+37N7wlN2wMkvSBpt6R1Ua13P5Iul/SapM8k7ZBULem0aN9+ze+SRkTn/bqkZ6PzvidpYtI5vyppcdSEu1vSKknXtuL9jweOBW5NNSeAmTXVJqMZrO6M4vmLpDWSrkmKa66kFZIukfS2pE8l/V5SJ0m9JS2N4l0RjeCVeKxJmirp15J2SvpY0m+iIW0T0w2S9FJ07v+LbhP8dcL+HtG5rpI0W9IuSe9LuktSUdK5yqP4aqNloaSTE/Y3fh4jon11kjZJuinxPQN/B5yXcGvnzoNluJk1HGyfc4fLC3VX6HpEr39O2HYNcB5wE1B5iOMfJ4yffjnwDvCEpKb56iVdBzwF/JHQRPuPwAbCULUtmQP8AbiCMBnRvybVmk8D/hu4HriUMCHHw5KuPsR5k50HrDCzdO7rzwBuB+4HRkfXn5/imt2jtD8GbgDOiY55IlquJLQSPiFJScfeSpho5lrgp9HxTUPZSjoJqAGOJ3xO34vewwvJhT9wL1AXXe8xwvTLVyacq3f0HkqAbxGaz/sD/5EirgeA1YTPuQb4naRh0b67gaXA/9B8a+dBnIuDmfniS0EswJ3AdkKBcgzwZcI/40+ALlGazcBWoCTp2LmEwq9xfRxgwLcTtnUmTG07MVovIsyC9tShYkpYHxGd9/6kdC8QxuxPdQ5F72c2sCRFjGUtXH8dsCCNvOsE7CaMkZ64vRpYn5RPe4EvJWy7N4rj7xO2jYy2nZGwzaJ4ihK23Q58CnSK1mcSxu3vmJDm7OjYq6P1HtH6vKRYVwFPJKw/CqwHjk3Y1gfYB1yS9HnMSEhTDHwEzEzY9iRQk+HvY1l07nFx/234kj+L19RdoekMfB4t64FehHucWxPSvGRm9Wmer6kjmZntAD4k1DQhTCh0CvBwK+J8Omn9KWCIpHYAkr4g6V8kvUvz+7mB8EUlU+lMAFFOqB0n9zuoAr4c1aAbbbb9+yBsjF6XpNjWNel8z9j+zdNPAe2j6wMMA563hDm/zexVwpex4UnnSu7k9zbNnw2EDoFPAw2SjpF0DPC/0bmGHuxcZvY5oVWmG84dZbyjnCs0uwj/zI3Q5L7FzJILtW0ZnO/jpPU9hOZcCF8gINT8M/VhivVjaJ5VbC7wFULT79uE1obvEKYZzsQHhObyQ+kSvSbnTeN6J0LtFVLnSfL2xm0lSWlTve/E63cB1qSIb1sUQ6KWPhsIeTktWpKdmrR+qHM5d1TwQt0Vmr1mdqjnzdtq6sLGqW67tJgqtS+mWN8LbJdUAowCvmtm/9aYILkTWJpqgNsldTKznS2ka/xi8kWa3xdAYwe1lo7NRKr3nXj9rSnSNMaxMsX2luwk1NRT3f/OytgBzmWbN787lz3rCTXhf2jFsZenWF9pZvuA4wh/u39p3CmpA6HzWqbmEJru/znVTkmXRD++Rbi3PTYpyVXABjP7iLYxJunLyRXAZ9H1AV4FvhG938YYKwj30ZdneK2XCB3jVprZiqRlc4bn8pq7Oyp4Td25LLHwLPIPCD3E5xOeBTfgbwid01pqMbhY0j3AMkLBdiFR07qZ7ZL0OjBd0idAA/BDwq2FjhnGuEVhRLMFUa/9hwhfRLoC3wS+RuiktlPSr4AfS9oLrIjiGglk2uO+JR2AhZIeIBS4PwF+l9CK8EvCbYbnJP2c0NlsJvAm4QmATNxJGHTn95IeItTOuxLyeq6Z1WRwrnWELySXEcYd2GJmW1IllNQP6Efzl4ChkuqAj8xsWYbvwbn9eKHuXBaZ2eOS6gm9uJ8k9CB/heb7zwczHriFMMLbTkJT++KE/dcQervPIzSH/5bQkW1SK2JcJOls4J+AX9N8f3wJof9Bo+mEWwDfITR3bwS+ZWZPZHrNFvyC0HlxAaE1Yg7wo4RYP5J0fpRuAaGGXA1MMbM9B57u4Mxsg6SvEB6du5/QIe8DQg1+Y0vHpjALGEz4UvQF4C7Cl4ZUrgLuSFj/brQsI/S2d67VdGAfIedcXCSNIDxmN8DM3jpE8rwiyYDvmdlv447FuVzl99Sdc865POGFunPOOZcnvPndOeecyxNeU3fOOefyhBfqzjnnXJ7wQt0555zLE16oO+ecc3nCC3XnnHMuT3ih7pxzzuWJ/wesw5FUyJsCjAAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": [],
+ "needs_background": "light"
+ }
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "8OZlpF1YIjm0"
+ },
+ "source": [
+ ""
+ ],
+ "execution_count": null,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/python/searching/Fibonacci Search.py b/python/searching/Fibonacci Search.py
new file mode 100644
index 000000000..4ce3d6473
--- /dev/null
+++ b/python/searching/Fibonacci Search.py
@@ -0,0 +1,63 @@
+
+from bisect import bisect_left
+
+def fibMonaccianSearch(arr, x, n):
+
+ fibMMm2 = 0 # (m-2)'th Fibonacci No.
+ fibMMm1 = 1 # (m-1)'th Fibonacci No.
+ fibM = fibMMm2 + fibMMm1 # m'th Fibonacci
+
+ # fibM is going to store the smallest
+ # Fibonacci Number greater than or equal to n
+ while (fibM < n):
+ fibMMm2 = fibMMm1
+ fibMMm1 = fibM
+ fibM = fibMMm2 + fibMMm1
+
+ # Marks the eliminated range from front
+ offset = -1;
+
+ # while there are elements to be inspected.
+ # Note that we compare arr[fibMm2] with x.
+ # When fibM becomes 1, fibMm2 becomes 0
+ while (fibM > 1):
+
+ # Check if fibMm2 is a valid location
+ i = min(offset+fibMMm2, n-1)
+
+ # If x is greater than the value at
+ # index fibMm2, cut the subarray array
+ # from offset to i
+ if (arr[i] < x):
+ fibM = fibMMm1
+ fibMMm1 = fibMMm2
+ fibMMm2 = fibM - fibMMm1
+ offset = i
+
+ # If x is less than the value at
+ # index fibMm2, cut the subarray
+ # after i+1
+ elif (arr[i] > x):
+ fibM = fibMMm2
+ fibMMm1 = fibMMm1 - fibMMm2
+ fibMMm2 = fibM - fibMMm1
+
+ # element found. return index
+ else :
+ return i
+
+ # comparing the last element with x */
+ if(fibMMm1 and arr[offset+1] == x):
+ return offset+1;
+
+ # element not found. return -1
+ return -1
+
+arr = [10, 22, 35, 40, 45, 50,
+ 80, 82, 85, 90, 100]
+n = len(arr)
+x = 85
+print("Found at index:",
+ fibMonaccianSearch(arr, x, n))
+
+# This code is contributed by rishabh_jain
diff --git a/python/sorting/Bucket sort.py b/python/sorting/Bucket sort.py
new file mode 100644
index 000000000..cebfd4ca8
--- /dev/null
+++ b/python/sorting/Bucket sort.py
@@ -0,0 +1,44 @@
+# Python3 program to sort an array
+# using bucket sort
+def insertionSort(b):
+ for i in range(1, len(b)):
+ up = b[i]
+ j = i - 1
+ while j >= 0 and b[j] > up:
+ b[j + 1] = b[j]
+ j -= 1
+ b[j + 1] = up
+ return b
+
+def bucketSort(x):
+ arr = []
+ slot_num = 10 # 10 means 10 slots, each
+ # slot's size is 0.1
+ for i in range(slot_num):
+ arr.append([])
+
+ # Put array elements in different buckets
+ for j in x:
+ index_b = int(slot_num * j)
+ arr[index_b].append(j)
+
+ # Sort individual buckets
+ for i in range(slot_num):
+ arr[i] = insertionSort(arr[i])
+
+ # concatenate the result
+ k = 0
+ for i in range(slot_num):
+ for j in range(len(arr[i])):
+ x[k] = arr[i][j]
+ k += 1
+ return x
+
+# Driver Code
+x = [0.897, 0.565, 0.656,
+ 0.1234, 0.665, 0.3434]
+print("Sorted Array is")
+print(bucketSort(x))
+
+# This code is contributed by
+# Oneil Hsiao