From f8a14a1d9078dcc4b51049a613cbae21fe207fd2 Mon Sep 17 00:00:00 2001 From: Ajay-Dhangar Date: Wed, 2 Oct 2024 17:42:12 +0530 Subject: [PATCH] added some docs --- docs/Hash/_category_.json | 8 + docs/Hash/hash.md | 150 ++++ docs/Hash/image-1.png | Bin 0 -> 22802 bytes docs/Hash/image.png | Bin 0 -> 48804 bytes docs/Heaps/_category_.json | 12 + docs/Heaps/heaps.md | 134 ++++ docs/Heaps/image.png | Bin 0 -> 149934 bytes docs/Matrix/_category_.json | 9 + docs/Matrix/image.png | Bin 0 -> 18033 bytes docs/Matrix/matrix.md | 153 ++++ docs/Matrix/problems-matrix.md | 130 ++++ docs/Queue/_category_.json | 8 + docs/Queue/image.png | Bin 0 -> 27089 bytes docs/Queue/queue.md | 247 +++++++ docs/Trees/Trees.md | 412 +++++++++++ docs/Trees/_category_.json | 8 + docs/Trees/image-1.png | Bin 0 -> 132100 bytes docs/Trees/image.png | Bin 0 -> 92390 bytes docs/arrays/2d-arrays.md | 201 +++++ docs/arrays/_category_.json | 8 + docs/arrays/arrays-bubblesort-dsa.md | 194 +++++ docs/arrays/arrays-dsa.md | 543 ++++++++++++++ docs/arrays/arrays-insertionsort.md | 168 +++++ docs/arrays/arrays-selectionsort.md | 152 ++++ docs/arrays/bucket-sort.md | 204 +++++ docs/arrays/radix-sort.md | 261 +++++++ docs/basic-concepts/_category_.json | 8 + docs/basic-concepts/image-1.png | Bin 0 -> 12924 bytes docs/basic-concepts/image.png | Bin 0 -> 6623 bytes docs/basic-concepts/space-complexity.md | 212 ++++++ docs/basic-concepts/time-complexity.md | 306 ++++++++ docs/binary_search/Iterative_binary_search.md | 134 ++++ docs/binary_search/_category_.json | 8 + docs/binary_search/binary-search.md | 62 ++ docs/binary_search/recursive_binary_search.md | 126 ++++ docs/graphs/_category_.json | 8 + docs/graphs/graphs.md | 301 ++++++++ docs/graphs/image.png | Bin 0 -> 64486 bytes docs/{basics => languages}/_category_.json | 2 +- .../javascript/_category_.json | 0 docs/{basics => languages}/javascript/ex-1.md | 0 docs/{basics => languages}/javascript/ex-2.md | 0 docs/{basics => languages}/javascript/ex-3.md | 0 docs/linkedlist/LinkedList.md | 695 ++++++++++++++++++ docs/linkedlist/LinkedListProblems.md | 146 ++++ docs/linkedlist/_category_.json | 8 + docs/recursion/_category_.json | 8 + docs/recursion/recursion.md | 249 +++++++ docs/recursion/recursionVsIteration.md | 157 ++++ .../recursion/recursion_leetcode_questions.md | 75 ++ docs/stack/_category_.json | 8 + docs/stack/stack-using-array.md | 244 ++++++ docs/strings/_category_.json | 8 + .../leetcode_practice_problems_strings.md | 31 + docs/strings/strings-dsa.md | 360 +++++++++ docusaurus.config.js | 10 + 56 files changed, 6167 insertions(+), 1 deletion(-) create mode 100644 docs/Hash/_category_.json create mode 100644 docs/Hash/hash.md create mode 100644 docs/Hash/image-1.png create mode 100644 docs/Hash/image.png create mode 100644 docs/Heaps/_category_.json create mode 100644 docs/Heaps/heaps.md create mode 100644 docs/Heaps/image.png create mode 100644 docs/Matrix/_category_.json create mode 100644 docs/Matrix/image.png create mode 100644 docs/Matrix/matrix.md create mode 100644 docs/Matrix/problems-matrix.md create mode 100644 docs/Queue/_category_.json create mode 100644 docs/Queue/image.png create mode 100644 docs/Queue/queue.md create mode 100644 docs/Trees/Trees.md create mode 100644 docs/Trees/_category_.json create mode 100644 docs/Trees/image-1.png create mode 100644 docs/Trees/image.png create mode 100644 docs/arrays/2d-arrays.md create mode 100644 docs/arrays/_category_.json create mode 100644 docs/arrays/arrays-bubblesort-dsa.md create mode 100644 docs/arrays/arrays-dsa.md create mode 100644 docs/arrays/arrays-insertionsort.md create mode 100644 docs/arrays/arrays-selectionsort.md create mode 100644 docs/arrays/bucket-sort.md create mode 100644 docs/arrays/radix-sort.md create mode 100644 docs/basic-concepts/_category_.json create mode 100644 docs/basic-concepts/image-1.png create mode 100644 docs/basic-concepts/image.png create mode 100644 docs/basic-concepts/space-complexity.md create mode 100644 docs/basic-concepts/time-complexity.md create mode 100644 docs/binary_search/Iterative_binary_search.md create mode 100644 docs/binary_search/_category_.json create mode 100644 docs/binary_search/binary-search.md create mode 100644 docs/binary_search/recursive_binary_search.md create mode 100644 docs/graphs/_category_.json create mode 100644 docs/graphs/graphs.md create mode 100644 docs/graphs/image.png rename docs/{basics => languages}/_category_.json (84%) rename docs/{basics => languages}/javascript/_category_.json (100%) rename docs/{basics => languages}/javascript/ex-1.md (100%) rename docs/{basics => languages}/javascript/ex-2.md (100%) rename docs/{basics => languages}/javascript/ex-3.md (100%) create mode 100644 docs/linkedlist/LinkedList.md create mode 100644 docs/linkedlist/LinkedListProblems.md create mode 100644 docs/linkedlist/_category_.json create mode 100644 docs/recursion/_category_.json create mode 100644 docs/recursion/recursion.md create mode 100644 docs/recursion/recursionVsIteration.md create mode 100644 docs/recursion/recursion_leetcode_questions.md create mode 100644 docs/stack/_category_.json create mode 100644 docs/stack/stack-using-array.md create mode 100644 docs/strings/_category_.json create mode 100644 docs/strings/leetcode_practice_problems_strings.md create mode 100644 docs/strings/strings-dsa.md diff --git a/docs/Hash/_category_.json b/docs/Hash/_category_.json new file mode 100644 index 000000000..93424d3c3 --- /dev/null +++ b/docs/Hash/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Hash", + "position": 15, + "link": { + "type": "generated-index", + "description": "Hash is a data structure that maps keys to values. It uses a hash function to compute an index into an array of buckets or slots, from which the desired value can be found." + } +} diff --git a/docs/Hash/hash.md b/docs/Hash/hash.md new file mode 100644 index 000000000..398b6dd33 --- /dev/null +++ b/docs/Hash/hash.md @@ -0,0 +1,150 @@ +# Hash in DSA (Data Structures and Algorithms) + +Hash in DSA (Data Structures and Algorithms) is a function that takes an input (or "key") and produces a fixed-size string of characters, which is typically a unique representation of the input. Hash functions are commonly used in various applications, such as data indexing, password storage, and digital signatures. + +![alt text](image.png) + +- A hash function takes an input and applies a mathematical algorithm to generate a hash value. The hash value is a fixed-size string that is unique to the input data. It is important to note that even a small change in the input data will result in a completely different hash value. + +![alt text](image-1.png) + +- Hash functions are designed to minimize the occurrence of hash collisions, where two different inputs produce the same hash value. However, it is still possible for collisions to occur due to the limited size of the hash value compared to the potentially infinite input space. + +- One common use of hash functions is in data indexing. Hash tables, also known as hash maps, use hash functions to map keys to specific locations in memory, allowing for efficient retrieval and storage of data. + +Hash functions are also used in password storage. Instead of storing passwords in plain text, they are hashed and the hash value is stored. When a user enters their password, it is hashed and compared to the stored hash value for authentication. + + + +Hash functions are an integral part of digital signatures. They are used to generate a unique hash value for a document or message, which is then encrypted with the sender's private key. The recipient can verify the integrity of the message by decrypting the hash value with the sender's public key and comparing it to the computed hash value of the received message. + +Overall, hash functions play a crucial role in various applications by providing a unique representation of data, enabling efficient data retrieval, ensuring data integrity, and enhancing security. + +## Implementing Hash Functions in Different Programming Languages + +Here's a basic example of how to implement a hash function in different programming languages: + +Python: +```python +import hashlib + +def hash_string(input_string): + hash_object = hashlib.sha256(input_string.encode()) + return hash_object.hexdigest() + +input_string = "Hello, World!" +hashed_string = hash_string(input_string) +print(hashed_string) +``` +Output: `2ef7bde608ce5404e97d5f042f95f89f1c232871` + +Java: +```java +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class HashExample { + public static String hashString(String inputString) throws NoSuchAlgorithmException { + MessageDigest md = MessageDigest.getInstance("SHA-256"); + byte[] hashBytes = md.digest(inputString.getBytes()); + StringBuilder sb = new StringBuilder(); + for (byte b : hashBytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } + + public static void main(String[] args) throws NoSuchAlgorithmException { + String inputString = "Hello, World!"; + String hashedString = hashString(inputString); + System.out.println(hashedString); + } +} +``` +Output: `2ef7bde608ce5404e97d5f042f95f89f1c232871` + +C++: +```cpp +#include +#include + +std::string hashString(const std::string& inputString) { + unsigned char hash[SHA256_DIGEST_LENGTH]; + SHA256_CTX sha256; + SHA256_Init(&sha256); + SHA256_Update(&sha256, inputString.c_str(), inputString.length()); + SHA256_Final(hash, &sha256); + std::stringstream ss; + for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) { + ss << std::hex << std::setw(2) << std::setfill('0') << (int)hash[i]; + } + return ss.str(); +} + +int main() { + std::string inputString = "Hello, World!"; + std::string hashedString = hashString(inputString); + std::cout << hashedString << std::endl; + return 0; +} +``` +Output: `2ef7bde608ce5404e97d5f042f95f89f1c232871` + +Please note that these examples use the SHA-256 hash function as an illustration. Different hash functions may be used depending on the specific requirements of your application. + +## Example Questions with Code in Python + +Here are some example questions with code in Python to help you practice implementing hash functions: + +1. **Question:** Write a Python function to calculate the MD5 hash of a given string. + +```python +import hashlib + +def calculate_md5_hash(input_string): + hash_object = hashlib.md5(input_string.encode()) + return hash_object.hexdigest() + +input_string = "Hello, World!" +md5_hash = calculate_md5_hash(input_string) +print(md5_hash) +``` + +**Output:** `3e25960a79dbc69b674cd4ec67a72c62` + +2. **Question:** Implement a Python program to find the SHA-1 hash of a file. + +```python +import hashlib + +def calculate_sha1_hash(file_path): + sha1_hash = hashlib.sha1() + with open(file_path, 'rb') as file: + for chunk in iter(lambda: file.read(4096), b''): + sha1_hash.update(chunk) + return sha1_hash.hexdigest() + +file_path = "path/to/file.txt" +sha1_hash = calculate_sha1_hash(file_path) +print(sha1_hash) +``` + +**Output:** `2ef7bde608ce5404e97d5f042f95f89f1c232871` + +3. **Question:** Write a Python function to generate a random salt value for password hashing. + +```python +import os +import hashlib + +def generate_salt(): + salt = os.urandom(16) + return salt.hex() + +salt = generate_salt() +print(salt) +``` + +**Output:** `a5f7b9c8d7e6f5a4b3c2d1e0f9e8d7c6` + +Remember to customize these examples based on your specific requirements and use appropriate hash functions for your application. diff --git a/docs/Hash/image-1.png b/docs/Hash/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c0b6d612e0469a3954482eec888501ccd28deca7 GIT binary patch literal 22802 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 )Seir|J8XE@HJ8ErqpvtoSwV> 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qg^SOeI>P~LXN>COPrZX6s;l@JK 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 literal 0 HcmV?d00001 diff --git a/docs/Heaps/_category_.json b/docs/Heaps/_category_.json new file mode 100644 index 000000000..c9f03476e --- /dev/null +++ b/docs/Heaps/_category_.json @@ -0,0 +1,12 @@ +{ + "label": "Heaps", + "position": 10, + "link": { + "type": "generated-index", + "description": "Heaps are a type of binary tree-based data structure that satisfy the heap property. They are commonly used to implement priority queues and efficiently find the maximum or minimum element. Heaps can be either max heaps or min heaps, depending on whether the parent nodes are greater or smaller than their children. Operations like insertion, deletion, and retrieval of the maximum or minimum element can be performed efficiently on heaps." + } + + } + + + diff --git a/docs/Heaps/heaps.md b/docs/Heaps/heaps.md new file mode 100644 index 000000000..8035806d3 --- /dev/null +++ b/docs/Heaps/heaps.md @@ -0,0 +1,134 @@ +--- +id: heaps-in-dsa +title: Heaps Data Structure +sidebar_label: Heaps +sidebar_position: 1 +description: "Heaps are a type of binary tree-based data structure commonly used in computer science. They are often used to implement priority queues, where elements with higher priority are dequeued first. Heaps have two main variations: max heaps, where the parent node is always greater than or equal to its children, and min heaps, where the parent node is always less than or equal to its children. Heaps have efficient insertion and deletion operations, making them suitable for applications that require efficient priority-based processing." +tags: [dsa, data-structures, heaps] +--- + + + +## Python - Heaps + +Heap is a special tree structure in which each parent node is less than or equal to its child node. Then it is called a Min Heap. If each parent node is greater than or equal to its child node then it is called a max heap. It is very useful is implementing priority queues where the queue item with higher weightage is given more priority in processing. + +A detailed discussion on heaps is available in our website here. Please study it first if you are new to heap data structure. In this chapter we will see the implementation of heap data structure using python. + +![alt text](image.png) +## Create a Heap + +A heap is created by using python’s inbuilt library named heapq. This library has the relevant functions to carry out various operations on heap data structure. Below is a list of these functions. + +- heapify − This function converts a regular list to a heap. In the resulting heap the smallest element gets pushed to the index position 0. But rest of the data elements are not necessarily sorted. + +- heappush − This function adds an element to the heap without altering the current heap. + +- heappop − This function returns the smallest data element from the heap. + +- heapreplace − This function replaces the smallest data element with a new value supplied in the function. + +## Creating a Heap +A heap is created by simply using a list of elements with the heapify function. In the below example we supply a list of elements and the heapify function rearranges the elements bringing the smallest element to the first position. + + +**Python - Heaps** + +Heap is a special tree structure in which each parent node is less than or equal to its child node. Then it is called a Min Heap. + +If each parent node is greater than or equal to its child node then it is called a max heap. + +It is very useful is implementing priority queues where the queue item with higher weightage is given more priority in processing. + +A detailed discussion on heaps is available in our website here. Please study it first if you are new to heap data structure. In this chapter we will see the implementation of heap data structure using python. + +**Example** +``` python +import heapq + +H = [21,1,45,78,3,5] +# Use heapify to rearrange the elements +heapq.heapify(H) +print(H) +``` + +## Output +When the above code is executed, it produces the following result − +``` python +[1, 3, 5, 78, 21, 45] +``` +## Inserting into heap + +Inserting a data element to a heap always adds the element at the last index. But you can apply heapify function again to bring the newly added element to the first index only if it smallest in value. In the below example we insert the number 8. + +**Example** + +``` python +import heapq + +H = [21,1,45,78,3,5] +# Covert to a heap +heapq.heapify(H) +print(H) + +# Add element +heapq.heappush(H,8) +print(H) +``` + +## Output + +When the above code is executed, it produces the following result − +```python +[1, 3, 5, 78, 21, 45] +[1, 3, 5, 78, 21, 45, 8] +``` +## Removing from heap + +You can remove the element at first index by using this function. In the below example the function will always remove the element at the index position 1. + +**Example** +```python +import heapq + +H = [21,1,45,78,3,5] +# Create the heap + +heapq.heapify(H) +print(H) + +# Remove element from the heap +heapq.heappop(H) + +print(H) +Output +When the above code is executed, it produces the following result − +```python +[1, 3, 5, 78, 21, 45] +[3, 21, 5, 78, 45] +``` +## Replacing in a Heap + +The heap replace function always removes the smallest element of the heap and inserts the new incoming element at some place not fixed by any order. + +**Example** +``` python +import heapq + +H = [21,1,45,78,3,5] +# Create the heap + +heapq.heapify(H) +print(H) + +# Replace an element +heapq.heapreplace(H,6) +print(H) +``` + +## Output +When the above code is executed, it produces the following result − +```python +[1, 3, 5, 78, 21, 45] +[3, 6, 5, 78, 21, 45] +``` \ No newline at end of file diff --git a/docs/Heaps/image.png b/docs/Heaps/image.png new file mode 100644 index 0000000000000000000000000000000000000000..1e9381c813e4d075886b21e1103a819a4812fd6c GIT binary patch literal 149934 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 a3 zG22c7+ zmyA^p(AfUBQgpJJjS&80KoekrkC%q4>T9;(-LmHg%m0`1Ah}Y8p57vhge|k@QC00Y zU3LID|AUTY%S@+JBkRn)>D!V8hVz-N@#Vl!hz^#y5(u^2At*oY30OCj> zdV)G@&H(Cp2mmQ7selY#$Py%W%t@U@U{bh-Z%R4 zQZuc|`2dh3#e|qoOKCL&iK2+Nq_31z(ld1j`nG?`gs`Zw)1o|7L1T}GK+7`c~P}FL1_+(TfAS&Xm%Le&q;BEKK{x{lZ+r*kmWu&PqAs1 zGO4a_2hY&k1r7QWDr0LonC%VIG^c|+y1n;tQNZc$hpeOhIjUNU<+6|*VJW%shKS<8 z)q-wX-%-m6>w%CpWMjjLRlC>tj6_f;&QOZO$ADEtkrei*qgtDoEHU_Y-TiCAFr{dqZP z2|yLRG>!UwT^45$?#GXU4UR{P+6!;bd-(4+%DniGU_TLFH}(MQ01##)%^+vNUU+QX z8a^+6Y;2lmg^p5_zxE-45j@xP#E%Xtwbn!Yx3>WDooY=3T`mpZ-zRy=jU@qu+vCRL z!_8nwnJC%JK0vZ%^WObN=t@f4_6CnjrWuyosXjX_?ov!|=gw1&(0Z`~$c${rws69gg$S&(hP#q9Uu6nvN z!hI{fs9XePD?0;V+>cUW+OSWbkMhgY7C;wGRtTD3$`N*=2p9~H#cKfHj5+dTIBgH1 zS53%dp&-o$0af3GWsW9{WEd!G+FX;RaE-}i{Qz`eCuwn;6(Yf@^U;kUKD++DRv?i# zHss`sK{4DM_*ecyocMqDyn^zccXp?3=qx<#0xP{#i_ZA(3!YME9q*ig5J z;9-hCA=e&6HUmr9lC>at*Q|IY?vCItdVG#TZgS3$MOxE^OzQ4JmWB|zmb-NTFRM1_ zxSSYiLdUrcaHYh#$YIb;LGugMmIj-T~D8bSImu zlA4m?1^o_(qd>4JYF|1_O15(yrg*BC9XVvhs zDvHX|<6i^S`?CfV`ue+hfJ6c~8f}1wn7Z5Z*MT%u@lZgp24BMGIf;wS}l3XGo0bEayURO^1WnN}^DZiIspH2BUk#aCp3&hR{tWLC7C*%=j4b$+j-WXP9sQV1! z=}&&Be3{rrN}Qtm1tP^2erl^Cx8`c6w5X{FJ#G^|Q_zDgr;r3C?tL?_aJnw1p7g>q zsn`&zWKtdNqOF2-jL;_2ONsEhcCyh$HSY+DI>T-vKx$-o9LObe(-tcX@LCkOKtJXE zf!?N!;nfv8zr|@VLPY)+*^4Dn=%1!>Jh@Pw=KFiv47w82s;h~tgyYMnzAL}bLFSU_ zEBA(`)k`S5#R6`TE}QEP`lZxub;bsuKRO-X&Jit}4N~D@dj#5cC50QUq`=MG?@!9jkUlgioid9<1o^KG!_yJvua9@D9iL%GZbY?to+j zFPi3=yp{4Tvva)*Knyvgnx0E+{xC(67~5v;`j=n{5kHN z;j`NAaNUp%pFceB7LkZIf`>^Cza)@R2NzS0_{z!Yk^kce!_w4N#Ncy!dnvVI>r z`0<~#HG`h?jbl)m=_)Z{#l=KWV@j$7NPO}v^Fhszrf1_fRIXWU^dyu2iI=~$Jv=YQ zn{+RR>j!Y-4?5m!AbV$m`BU9IwI2Q?<%pm@vx#Qq^fRc*xN+gFN;N!{*Ze|fjueHh zBBQNo;3R@65+#rS)P&QGtK?{^5SdHqrL}h&M<^CB<|U`NC4fZw#hf>7zhkr^O}h26L_NWUYZjfOeC|tdqxcKNUVwX9^{Aa*CE=ho4)LA=S}&0O(E)4O@_+_6vH*jr_k36qt2&v z3H&4jYODXc^9x8eI#_!V*?gMvu8vEN7ME%O8@3-4q5fjlAiX>gz@rF;pvaaJqmhsd zEKHRdfVS%b3=xi&8M|AJhirI8?Q!X6iix!;a^8dx4!4P8_GRJP$Ku8G)Vkd8rY7*! z59;)Hw*M_{VqB$cCsfJi^wD{_J7RNxDG${ZVP4l{JqGrJ{=EsO~FrX zsmo-LlotYq`crEcA58A~SG5c3Syw%r4u;P!h}op!l3_U>PcQ^#oIw=xxUwHDMR) z@yE#k7|E1m0Nk$jDN4PzM?77N&rCa}k9t~Y$W@p^N)6cG;BxYWt3}mYKx^k}l2cMI z`Vv+~e4k!RWz4Na)Xk_nEA-rhjw5>G8ZURrI5mo{y_;tg>B+<1RPTi!tBF^;TfyXN z01AaaXqe)FM98eTZRM=L_rN{`za#u@r9fA~c-`!(V} zk0d2N!i_4WXIkWRvCohY8OEtZOlq5Rjqd_#tS)+c^qQ7&$HhGh-841RGhwpN%>K_| zJJrJPr5D`J^t^-}QM~N^3zOLRJ)iWKWA$Cb72~Q$zcp%2FBMgl=-7pO?Th%Y8nRWk z;@-nQ`zN_M9ie0HPF=k6Ev?ge` z^As_|)ws_qd12VDMflPLXHo(R8naS=o<=)KCl4Rqww}apvR&>62_azjTnm^7-^{+F zmzlOdnAnE7FOi@TGpJ}bTy09aH_GYezV`=-fyoDT~C@&RK6>G}g5^?sO zm{UBf+36#+$Fi9MbR$mrJM>TCj;-L68Vgk{t6lb1yMS)OQ3166Vflq1Z#0g9b zC41VrGo@Lj3I({~^7)mp+B*+mE8#pFg!Mz?CL50)O$RziYqq9bnkBlnf4hY{{cV&3 z=!1HAi!Y3~T@xacnu{~XcX`)zHd^tvkFTDT>mI|I!ZGc+3Mlmk4~=6|{ndJ2(X91M z8alh*<9yTeG!nj{$eAQsQ`$$*ZN5pBcmKO>P$vbeyjp2=&63V7saP|vZ)Sm}%T&YY zaHQp_LYU_MuU8>$q<#uCjlDOJXPl3ORU6D?tbBpylBd{eKj1oA6}s?jeBZ1jI!n&KiN3u?VA8Qw&y7_{Ba<(;yX{} z?_R(?W*+wt!U9fhjZX&f5~f$eF_^B+gbf>6`{w))T3nCg+dnr7kL+VTNtK79AUKtE zq|El8b#DzXZe!Rq+6M`ZjEN^4BExUE(#^Fpsf+9ME$?+KG8ip%@oOuphTjM0;Lg^= zoTV%slL}ny;?oD@{@P|9*Q=@P+bTZU=p+w2MX`c#4vC(iO9sat(;&9X`M+Jn!}C$P zJFkTmILdLK#x7x8Iz`_DKygc=(@Yp|-}Pfk!cl2Ox79QAlK~Cq#>4!wbTS}9k`^a= ztX?L|9ifNx={|TI#WXu2#Ly^K%d}g-LTqa!4SU{OoidY)SxdXiR=VaaD22Uqd{Xq~ zFH6*3E}3y#g+_kFFI9eqS-LdE&=!6JG?Ii%w~e$r?XF$jxBnU`9G_Wzxir#bwnlTL ztXpor9n?y&1&dE(nd3%n&+Zl!dt;bkjam>Z{I?xf&?1R7qS2n z1mrO#GLu3hkPfUyzzw; zJZt*1F{$3OB0g<-^~v4x#>ve zURi58%*=6$CJJ>1$H(cjnSx)G;3&dYjzeSPAhbzfSXf8p~^HYn%f zFk&-)kd>lQyhM|b5C;ot;nN1I( ztEFP~iQW}7K9Uv^3sW7+Kn>rk3%6S9`AIC5drsQoHE_PAOJsMaXaV5mxl_fVu#pO3mu!LxQT z>0o^U-m)H3#p?jD5=uXC`~cJ`G%+Ag8nuM z8dgWmh2k<- zyJR+DFUT=;#lh@m7^Z1yhr(6+on`XUTuU%U>Tex2Y*L z2z2k@_ol9zN~{XJ!XEG1#>NJ8-acYBgDg!Z3ytmx7`%VcNJcjUP@y68E#gS9odP&B zJY+x0oY>KfCQ1Mt3u`#I=xa*SLc;neY9U_6mTlfzLM5y_(%^6Y^&bb~6q3J^TbP^EHSRMB_JWR@x6ZCTX;gtq^9P+^Gj0bCbIK4J{~ZI#dd-}5 z3cnX0>x`cRWY-}Cx`obRm!%E$X4 z!Y{iExk{g_O(5x88D8mcM=MQatI) zj{MnDR7?$X=eJP)dp|0ETX{vFZ0QuX1&1+d-^gb#5L}vd_VIy-xZQ70q#n71tLB@0G4OhxO-wd_1ROwcoBMD_!F zqH=Nq^i637x>63o;Cf}p@$(lsQPT}yZk*uB@S4VVfz$F`Nn{^XaSbeji;3wA8!qmL zoZZWf#xud*_iQD!I8w;{zpbSCuWzY?Glf4!d3$@S>UzYzJv|+uS5;AAI&XuAHKSS$ z#c%H)T+cSOK?l`d*8{qXE^A@l-p_O5bdQhZiHCTNI!+w=1g7qWE?%^L-n|~##O9m3 zxDNIia7uI2uN`}8XO+|KgJ9bNoIGcTtFZJ z!l%C(a&xARdWgL&S@7TmzQ7K-{hcTzt!6`d`CMIHeHSlYRmat6s#Lq}+p)=7(2}z-!0gYg={fb%KE_!5JeIcu8Ak+_Rc;b3jAh;0M!}|>ZSUj=^fr+PY9cLB6f`3> z?#Jh~2>W(B9P+uqHHG1@)ffXOL2XU?FMiYBYTMWD2GHia8yYTlbku~YYo%9e>YAK} zC_T)i$S%=Gwyzwg^MZ)H?ra5n@ok#qRaCnFB4R&vV>?~2Ubb1+(rZ)&zCDGuK6-Qp zqKAcr?Gj&A6KCvB{*M1jn)EJ(=H~>rBS3rJAKjy>wj`bPV>gl)7w9(j=(sS*nT4}8 ztclw6zk5sbtPeQO>^ZZmO7qNV`?uPCFxeMcp!^Ln))nm`+aox6C+#xe>G`12A%^n# z5EpzMQC8}CQ0ZL;wm_jiXfsXjXHvv5KsM+vn`N6FH zsCTb@cpzmu%^KRPH$aTEC!h#krEh&a_hCgapdnR=p^mPU;&;=V0k$jkdUkiKXTz)J zboo?!@=ilHhh%nJ5{HK>M7I2ftVkD(Fup5Z@iLM1&;GMq6)_e5Y6RgJ{;ai8$M9)B zZ5PcP6WgEHYkqMNZ5M ziM9qHAt6WzB2og<-Q6JFEz;c}t#AP8?(PQZZt3ps?(VvCzI&hRAALZW^Ugc7W9_}y za^bVx_bjP`RoO6GN@(0Cu+j$;H<4tqI?qR4JUUqJWoIi9_&LR!nsV-c`{InP;ax)Y zPvpJ*Oc&N(Y7{J>&C2Z$f2|%~$os%jx|Y5Q#*!?M>x_7u-FCeNYl5^jtG9oR6G&G* zAy1$_cHC@gnELGP?JYkZIYGkYGDU1Y`tj5PpQFX!Z^Hkv+x>Pk*3^N?en(b3VkVr~ z49a^Uv41BNl@}bUe>~R0=x`l;yaC3F!~9}37d<=rQ!zty*Ef~aX&@8O=DC3$8E(K0svdD8XHe!q&Vq1lPQne9{h$kxAw=pv*Ige0Im z7~tc5V{czpi!oqNmfpX-^L)NvhJ@8Dxkxr~5E_Bxap#{p&kiLerH<#LgFsKq^W$-6 zAa>1anRoHAFvv?Jm{QOm!n68Q^G5Hdus^hDDlB@Ql{_QQ{k$s#AJJeVKYC+UX`^$} z(}VgR9E0afrz-+iqwrYea3huQT;(t$m55jso}1CBHpW2163)NH3v`mmRb3lAb2L||sBsN|nWHM?RT^w4iU4630RGeYKOq_bZ7rV(!y)eb* zX}0cF94uMQTGBIJG;c9eKMWe&%SxBDiZ7YeUa|1t2IYW3-=N;TmfI1lMXbrtF?4~$ zg*p(!9FssAZ?_V;h6`ia7s{X;R>b(RYv%59|G4GZL!bx5{VB=GgXeDZR|F;$Dp6LZ zI6350@iAO&S-qGgjJIDCY9qXdlB25!Npq?iF8a@y0;`#6X69(bx|3QYrSz+*+a*iM_{r7mbiCy8c=t{q#r;an;nN>5 za7c*6ry`>YX4(=h085gJmcu0IbX@=q=UNSpWtnv~SBYWSq;_%%&!u;7V8Xj11U@HR z!9-emE^LN2JlgPto%krM{`?aEE?aOqc8d2txinNHyUJ$0tKq0V5bbPKlwkMr&YmOq zup3;pWGfe9ae0npZNQBL&X7*k;34q89;@_$e$UGmGT7+HL0s>j0km{89lTA@YWY(k)dd3Yk{;=)6>L8(9V((VGJx`x%O4- zR33MD!tE5-qq!7Y%`sSS0B0 ztoe>Nw5H8oKzzx#XjmbY%A;jrcfT2{Q!qJd6Z96vq4zO=ZwKuQW6sC%Muu0Ry z$--C=+J=jzq0+R5YX*WoF#E<=0{E5c#aCc?Ldb%{v{q+lXPN4^h%7z3z#MP+epr6A zZ(qi#YZfxDjLK%s-@03a)5>uZCGzO9-0W@|8Q$`EXqCung#zbo>HskU$BJ7bpFH65 z^3tm55{qzSE76JtH~8RYvF7y-j0y<=Zt=em%ND|ftb@}9y_aYLF4sp|ii+<;yUPmB zv9-@83g>}$cDXvpKN_!AFZTMp5&|uCcP9_ibph_J;_5nRHdJFii|#KJqKy$Vbp0`B ze7CQ!kKY>(9OR#C{_giz^cz$!M6E#>_i99U>}9evt6tYz2V}_>kH@RypRBY^Yr6)cojsfnV`E~L39{avFui)1+ea6``sG;c(9Ym^Fw;-d@XcZ)$I^kn z{mhKkjXKdA5eezI=~`Q$rzf0ve{V0W0^9-nqWB;ZaTGtj-Uw2_p4O#il+66|WTmf9 z!m$YD<&N8ME_r}-?m4(Pq!6yhi}9+es<-S&t)&DKz?98Z#TXiwsUG-XYk!7l+H_)` zZw)GlQlQ6lcqmV*rSY*BR_iF?~U|^yFx>p=R^y*jYCn4xFU9RW{!M^&fRH*z201{%z+fQ7zwY6+G zZ+}z?YjF4Ob(U0CUX*ozB8G6C4=_qeN$uL>I+=s5oJ)*>%?%gRAJ368O`HcYC>JmY z$aLkVtP>F}pPoZ+CxKQ-?GG!trHaty*8jeT;V+#I1&J-lX~8q% zb1)@K*Fav~n45KwH5%BBKqFM=jdu>6vckf`MB%N-^dQx9RQjw&71J9@_IzmNsc@f< z&-F7beeh5&4J#>vy7Z-v z+i7QGW1}_Oz)0}rjtcr-uMdjf`hVB%VsBEC8xDOIpdGC?NhOsZCyQ7LT0qPQe)3&l z=LlqTMlrXXN~2i0inqTLTgUBWgcXr0D+8WXNui84?B}q?W8K zl8-1gZrCytqaFwoW;)K!x8pLrQt-|fqoN>6QpkUA3zqw(SG3tNeSB>-TfX_9-D^B) zNAmIU2^WJQ80@y~A{Uo;cYpk=+W}ALwCJFst)0T5Cp7fx#9I*bA+(;R&KF9lYSK(! z?2bc8^w0$WFgP_a5han0R{HVYj7ZNMq&LId*GVoVb|xk!BUSV zF&c%`_gq{~>nt}om2#-GIY#T{7*v%?=eq6}*T55^a$k(ZP;0>O^Of@bB1n`4^IL2~ z-gKWrS(%u=C9(vg3BZ3~HdQ1+*PY3;P5O#($qxNJbGyZWHt;{={k9Y|iMG-wPBM1c zb1Z_5vjKF4`Q6X6=G9ZnK6(!UvJ!&nBaFjbg79_EPxpa=fu!Q{H7MyKuWp7OP@qrv z;kRibrrdk5WB1p`GVpa^d!~!j#uit*FC_D%~nZwNOgRdlE+DB6~+pu5VL z8f(Cg8{7;+Qb-sy=mT%xhl7{D-S(qSY|K>$NCmzUZU8>Ra#bp?&%g=s?NfXL=VhJ! zVWM=pRHxLE(PQQJo2#QmywGlqV~yYIs;mAPJGOPes3Tl%v}a@xO_};(r;vihGU?gn z-gkbd%R^Fix!kJ)r$Cnc-{1Bc{6;?0lr?KMo`(~`%cJkWiGPXY_r&^jtl16j!AC!Y zMs>k&$sCs%fixVK6AEwM;>ap1`$DoGH3>Al{sJ!&tL@^CW(&+T7B)5+Izl5KxaXpJ zhV3{=aNf`amS5l)+}IMW2CufyN7j{vvHtRN6B8Gw-2@l{mMxE0!Fa4+BE^CGc?)*Z z=Ht%{^0~t+e+;q$)|bAh1lmeU*(h8SXorXBy*QL#zq$bDGI?(T4xee2UoJGIlj5<~ z2p~utWO2PRcPKpqMiN{}bblE17)RC5;t~3EI7=S)76Lu)*Nd^q$;ByMfAHjfz4Qu$ zU16I*^B2m<&li_cEdgdMUm=&{BZ}|OY%SA#%&Wus>vkksGy!b@s^W7x=4~Ud-hxwU zT!`S`_C1cnp@1XtCwS-yMl5<0tJKNxuULWH&kyI2u!iI2hO{)k!(p#!Bx@$ff zU3hxm&>(wzrk5`o$E7)o)6zZzxXjmhI~sB~hV#}Jm@agI6z8q@_I80PMtW^#@V+{7 zu5Q9edi5EaPP_2HYzj^7cMt#+w*(sHyDN*DrVzmk{1*qs>UcQo>FIGKcNN0LU4Y>v zHmp=ZYH!mHUu0mnfMp)nXIRb5d)?#}L1Odq`k-RC;86_`5fSHZ1vu}IM~YbnlO5m# z08pJrphpmuyAs5nVkGS&Th;50UR=YWIP_j2Jg@NUh@OG}IGK01g>fQAelrO1JHy@wJ>FmPG!n`6sTQ00{)PO|8mQi3-b% z{Ts$Gx_ukPYjE2#*}7o(^GZtzc-+_sH-Kx7=W(x}H8(6i!`@MihNx2>EVn#^dkw-3 zfQ8OiTOj!ekQ0NYJ*t^Z*&1bMIAq%R+Hii4vd z+{H)n3$Nf)!Gnc*JX<09u7ZLBksutKS%cVjP{*UJqSD>$9>!>&6WahBE${)Rxiy1{ ztoM%|?*qY0D~Q=l1;ORoKmY$O-HJCV4>>KZih3KyWG^B~;$Y4Zd;>^GV`+6h`3nIQ ztbPIwnwzjNL+ZuKtE;byYnF&0nl8K93c1po&MAbtyN$Fil0{QBRyqPbVAQD2Wc*7K zE9g5KVOSQ+2DzN&Se7^_&6U&{wnGqrC47wfhqx@QhF|rK;r?P5xSYqUc~6nN;eBmzew{QtKZEp)G|l&{O(g+_VP8V&E;y~(+4ebQ;iCkPXI6-&qntIH5k_5RRxeI4Y1nVwCEhlQNl{n1~lFqT$33x8ru~ z20i;6kcm>MFXI#W3Rch{s|QSgg4ka^Kk80v0!?c*dF0H{*xcL=7+)|Hn+4rCFpLDP zcn+`lzXHvzX{5TR_m7N5LjW)XuF(~wUDV^KZd8u>^0VO7rEtZgot1h%n$4CQ?3I`n z8U2=is1^lgT4>#mURg_v+jgS|{8C>u2HOp>$XOAM1j3D?ilGDsgMeQBAIsXW-fCG7Q3R}wqzfVt zKHm;|0*8SC0>d}h9H)4Iou;)klSc6!%qnn^(C>m^ZP}gG#rlO=bQa)zu37fbaJK?v z&bjgwzEC11j>|?s3oVh~`2%<+BX~k64h_Y9ykAegTl%y&P2l-JPq;Dc`D6zSI1{cg zf#y!su_JhcEg^INBx5#{l9Iqh0ZBaA7mx~(q5H=iuc_^=O)Cq_k%%M0yxPN0q%3W; z?F_(#x;4-vz%l+N^-h=}zNn<68JPdciYq2uDUM`iNn*FFRjG_2I>Gd?xl|vta^Rw@ z*@Ad#M{bw)z&-a^+=!>&vaRE}Kd1nX@)sI|$yk=JudgbVZv)fGqf?+Z)Og>3Owr+L z)~Hmy>g#(%_uNn58Fxn1tNZ56tK%7swB0W!Az{B?zfo3FLh$;PD0A}Io7=G($8PuK zzZgut(l~s2Ul;*7`Pe-KL=V_fag(ECGc#=9m@xlJWwRmbwgI_!#mnaB6uFkX!a_W- zBp3#AIjov40dR8@*V-cRxXGCu^0~+Wnpp1&RzQ7;!(nf%rG+mT$Z?YrBQ|vCC=*A= ze>lwGbfgJtdO1BKCNx3NC+w8<7b3d9I=lx434kA|o=?D^srMndk+h;V+fC3WBqU6H zKPqWBQm?Zm9Rd}aU($dxsms*Vl;>u}oA+TAH8<7c4tU{3OIE=|jhoY&VD(r28F`MP z&8xn6AbiF`@e`I4a)3!T-1-Ba&S+@~5Mqz-g1U;|Cl|5guiM+(h0C2BsyDmWp?5yx zyNaAmi?;pL{jsz%Um`(*4eq;YIhBHhu-t`96G$z12{)!RtOk2~<&55`cD&-%!mo99l8^fBM3`N&_^>2tJK`z9!~Wf6~=xiaCdd6p`sEiojaO?$ z0k(=5l4Li;4sOwdM>22*BfoRdKvzR;?TwY^Js#l(NDe^i3OPq6wx1>#D$D$QmF*|AoCrpz6VFHdXmVlS0bYewIkj0xg{L_Wy_N zrICpLG~*X_;{|T$Cg+#2^S(?XixhzE_6keu7cCtWKkNQxsXO}$I(OumaFtZL&;_7) z#BmD(I3shf9g0C`-~M!I3&_V12p{jSmusw2=eDrMzZ*yHiCH)T#{)fgL+smV0$9}Q z6Jx2c$MidVR)!ENYt1ER>d<3QOzPewnq#QjboSU8Nr!|%4Hn=e0Ej5HYmkk*Uv(1< zXYvq*LXIXVFhatB9l3jaTCXKIBzu#S;Q?+%NFQe0;{|4I9Ulh`fzqC+Jo)RzF~UT2I=MO3ra0e-Eu ztbyk%V&sQNKC;;-0RBb$T2cM^PZ5-=?i&vWvv7Y4BW`d^OiVKX^&w#z zR!t7ThijMCTNk)HW{6blDNp9v&yTz$j zaao#9F0ucv*y9Z;Ea<8{QV_bvnq~Vi#Lj+akpW0QqD}1U z$6+D#cvX3^tn5lYVSfolg*5*LHs@h!XUje9J77=p25zS(G(U>(|rL%a%yNMUj;EJ2xHz8or2X* zMHQB0BTz|h_}VeVZaR8pnehFggzzco5g+J@CD5Y{)O3UL-$=-QRVe6T0FchF)cTbg zO$erNdO49iJN1aZdO$8@Cw;GnK-%S%_)_Y|YjG<&%s*KIWm|#PMASJjUzt=y5%mVK zuc{BXC&vs)qa`r0v0HA|0!5)J-sB5fn?6{R`5vM|1$pk^~@NX zqs^`BxMRziNn0dw%_6&T2l8uM8c)XkGuDa{H^%#z-}|3%n?WyDos|@rzq8yea(Gi6 z6^DxR0GJdx2}2UfG7^CO4en!jT=Jo(7SsGJmws6?pP5=+ZFrN^PO3E4UCq^$AAf9I1#CUdcfxJ0A6$8~l*_0}O=OBYb`ZNGmP; z{6h3S8h)Oxfml|A8)gOA;f1X7iI-$(o9KU3bZLHgB=P4}RjdkyD z*mpr$d|0S`Xx70(NmXDVZg3O~PcQH7hmHIY?%}yb)Q`A@2@jZ+T1y+m+>K~us3?q! z+71n3X7^D;)N79?hmoE*jmJITSpKwC)ILUV<%z5CTsV6jIn6Sly3A&lxwStyr-oO> z$YT7Z*y6^1^Ec}D5tNEFR|I?Ee08gEN&9;3#%uLl0x;*-I+x}zZG@7-I^0X2XEa;U zmU9O|vdhYBdcp`HVIX~R{jWNev)K?w-d;AKHX&_QVK`V1FqX+A;l;m>GjIHA-12G~ zSl94y;4*?ljkci~Ejrc}`e zcr+yJbiI53(!~*`&^@txtL8ozhA7{(*l6)n$3zvgpwY3rqy19wadE?O#~@$tLwtiO=L$NpuwO*@631LYeGxDrAGc{S{wGCtd?=#J(b6~ zJq@?xr6y3CAcZV|PAG+(Z}d2CMHzBo+1f|{;Z)3;Ga3%m9@X!|6M~{?xq7jmoOtEI z7;mLsXx+o)g8(4EdA~4oai7OZAQCHL#1?Qg?M*SYMrt7MNA^5 z#iuT=8ExU__9S=*`LC;gM$^~J;LSOVR8)=CRrfGB6&?jfI|v%a@&XdCOkz8o=O5cf z{a=+g%^as^21~@gQoFZg(}2Oh`m72o^lg2Si8(J$%0p0b4^dZqI+*d&&a~CJt32tb zyKfmN(1&7pI9xa}$?LMAhI-RC=#cMQEw2-~O)LpRp6V{&NCmA}m>`QZU7OCNq z4;M3;O

M?j4MM)$45Owz@;AB?cze%lBCy(IHliuTOnfPBIEvDIQ@2flbO~-`6vHzQ3LM` zgQ@PV?~ikS@8Lt4EQSd6e}8qR(v`J5XN_XCPq?r$#lU&)N#XjzthL^=sjB38qDf(jxrovx z%A_4m+g3E5Z0LbvOOipx>y*B$vzeK05&RX$+UACUCB`Td0rU*kq6?+`7bGl)ln>uj z^dAv4KOS4@Ujo&QB4h_w(_|M>avUkfuBa^s%O21G5~$f1KR2PQ8}M0Phi%gM^th;8 zMpNtYAKCnnC-MHN+%4$PQI9g~DZTpm_lpI;Pbj_4Sz@1GAY+Mx$$JCMpwm5JwqEdw z{22k!_`=#!&d40mK6WAMMSSIUfd@NlW0NJIRB>>9tE3*tUDT{aQ#xk9aq(@J@$UAPS_~Ud2L``9^c*ddv%ah6^DE` zEw(}R3(oISTPm(t=B#gZWKVbg9CB+9yWB-K=BqKoMmq*G?}TOv`9BrJBSDYO*ya}q zdh|NQZzPhK4U?m1W6CK?25eSHLtoOTCXs?#Rwl zyq_-ya-;q!MG5(NwyN0o=JyqF8xN+#wU|}UA1dP)xS!{q_OZ=PCT0cwE6F7o^mr=* zs&1WPvQ()6IN<=gyg|9Z?W{K;0e9-FMpqzG_hZIKc$gR}wTzPSCjjwhjPB45sHyW* zGZF=pK)x1REsPGGn$!otBecte#x*#*tDpWBDeD8aUiGgZCt@7Z z=B5tuk7c5f8lcsfTV~K>7Spg91_@~()ex(tv4Mt;v|%-bP@|{m{F(dvV^q?gOl$+%+_a6Q&r8YuHyy;CQyi)fUB7yf;mj*kZ(z0wORsr8XtT-n@z_2 zq4IJD@8gr=dm!h-{Z$Ojge_*2Qy`VLl&jPV%h|a1bw{baXMzt5xZk32 zfTlJjb54iF4lu3ZlO=FPQ1{g0AZ3B}-W0a+ddLBK_dO6c(K)6XvpdZsuv#u3UOV}x z@WH>2m)8y`x52B`uNj2&mCxeG1O9|D*79CK$-8e9+8PHV)~`}!Z{mI+F=UEP*@3?1 zodqxt3-l~bMszMm>cC>)3q#a6KS!~Cq|~-|>Ql!q$*+QWO?Mzq;OVJ12#Hn-p876H zLPg0tq81=upxw#!X*d9r^64zL1q}*ucbz{tEuFsTt`kvtFJZzEuUTzA3mP8sj{HVL z>DUX_h49IY7remOG0z@6WeQ|1q<3=bUsCa1H*YT~D%H=6^~3$ZAUC?v2Ngm3moJhZ z_Xcqy^9}+@wk`5o&L4v}o;rtvmdXlxw2#F&i4h4@KnLndIvA3(^@_o;Ps(#p;C?nM zY2})%6Ta-Ovg99D(2(8A2ny|=`W2yZh|kfoR$5w08cO|v!)Td5lQ+fmDD>W2N?qNv zh)S(oXt8LnP=z*RT}Un~Dud60PavReJE8$uN_ zj*xiT^jc!uV&>+Ik-LjppeNq@s8IPkpf1Iu@G{Ng$>~i@Q>@^IJ(z0sfpy zGx<$7UZLM`sk+Kq0fVpv!!i~bx zW`_80dlUk-mHeC^ZL~|Bo*r%ioZFC4al$q1p)Z=;BWI& zX9}Z^7Q6n`Qlo7lZIS>fc-3_v>7(De>aK9w*Lim9R&uX^8~mzKH?OW6l+ffwofhXl zu@M=hy*ocSTG|4CzO4BhjPI@Ih39?=HNKKd)B#+k9IkE}u&jWY2Kn{WBD?;$3i}%r zT(`ZH^kb?y3vpGp5Ih!h9KsDykNrsh<6oQi8;#~bN|wr+vaL&(ii!%*cBC%QbF$h2 z$^;%%MkemEBE?Ib)P+|qf-Fx?Ctdz#`{#vC4p)#)+SykDvt%C{BT^#gGB`Mx=q3ra zg)?OU{RuPQrCZJzj&@!D)l_AK=hd*sdVl++>)YRA5;@CE0d0kVfSXVfyQxx6&HoF7 zt7(!R*6}gB{kh$`)8KLe!SG^HH?qevEyR{)I&K3kOjH zFs(i97kfwt(f~K{mZH(Xex$GFmO71_td?3t@3FA1cE`6vJs;MEv9*}&w!VdScg*el z(fpOkw38&g4FCbq%l7>A4?i*H*~s2^`u*OW)SSbn20PGbDy6jn0!>N$TLC@Fyp!j9 zP2<%BaU9xX4T;@3vywn*lcqmglO&{ditGQn6Ko9~m zAbRnS!3&i|bDT>$&nqVnvx!U%`wwuTD;Fj}4CX|H&+F`;u+)oExrL3fv+_&Foyczte(=_kW zisb|o$C#n|8VtD>YmA*)@Y;>Kn{5dIdV73bxYEkPAyz&2@o_+=$M$) z#tmSJ(aP=HSOe}_@`Lo(Gw1t@Ymk>*juO=}W0VhzEPN^hh}GbzlYp(LrTHohOZ5DlvyNl7KA7J~_3AQPf+aw@9-EyOy3`Z$;o z`#Xrk(Klk(uo#F<%d=lp0Z#~U`Z`dXp?*|*-vyYilD-87$FyD?yk>2xcxn->rdlX5 z`UlkGaYRf$$gsYN-Qo;W|y1fVRZ>Rvwu7-9CBan?`tfdh;hm6O*-(cxsV$agMQmUWYxfs9>f z75~LlRZFBnWkF(>AtOOauQxoAEb(hi1V30Ii#;(h-eU$!j?{N{Xec{vI9V|zfr)S{ zFCW0=e@5$G!HSfx{#f7^?gEkQ!_k?z*=Lt{KwBVdWZyhjfI)3YFFcmnh+xW3eFqZV0! zNFZ24G4X((0Ttpq;T4Aum#&6;2mKtZ9-?JYK z)8AGwExVy#rs%o911fdYP-USu!AJ3~?%AWe5efg0@d44(r zMVCKlwjIc~x%?6w}FjIIA zBu?N`65J==8Aj*qfZPI50vvJcsuV9JVv*!j=XaUCeSyE_RfHw>Ez901c)f}ivG<%3 zYa_wbg5Hde;XXeFJ5)rYzGG00q)C*?IggsJxb54O_I!iRG|$uO9+{5EbwnWT-F)gW z4y&U%=t1g_dI5`WpEf48d44-ps^i&DT?69Lw;wb$G}e(xx2-HlLTO#i)O)vVV|ydZ z-n@^53aw3%0EU{3by99xbwJk>^;Iey418?VVbZ#n>FG3ahGR{1$e(^ChNfHMrJ6yv z0=*X5F}xSr=l^=VFnzuhbM|(|<=6G&TA;!T?R(tg))=43i^{UN?p7zX&SS7f+C521 zKkpl1$brZdfjJRIwrx**u&K)ooYmN&0 z&nd)hst`Xaqi75#K0(2=pA#?TnW;sfLlpgkFA(G4kZ#X#48|m>uNb?!sC@wN92?*i zZw&37Y8vA z3~2g1ZN0T`wscc&trE>0Gmxi(*Vy-;ud4=nYguS|*u!Ol70-tsm zoqts8>L`4UGu+x*YhDbID%ceA_B*4W+7TO?FCgZQMM+W8Tgbq(%bD81i~6_#)tLjF872#jO4Q&0lpZQhqWB?$7r0yAge~Q zz1+SWa#^jw7k=}Rg5Q*V1Mt6o*57@L5O}wj%P_Vje}4ITIAZg{jBoLSiNM2&`I@`}W z9Gh#ZteyRfV{FIO@~U3c`F;6mZUdd#V>a=}7Tx{Nx_GW~N9W&D1mgLwX(#A{qFE`V z1$0<4{>LbZ){|OII*&i&iHEps4A10{$sB*}{Q;VL#;9Kje-|$puopUAT^?H)|AmwH z5;8cz6X@{@%T^$vqJHhX&%?Oev~~6pF95IO={=(hDYBDW2pUIYv7ma*_Y3i(Joz!4 zgY!+xv(i$euNLX5_1XJue4==%K~R0A=A{WC?U~xNR)dp(rP_>5Vd`mqxE#N|pW?&* zEG_Q`$iZA>uL7m^jaxT=W+|!gD={5R80{vV4B4UOXh}4x~Be zkI$9}G=oZ4h0OR?^~~M<&$padBDPgb4%>o0>n?*@Ercpr7d@9QrcW&UvZP|E$Hnkl z+nqcab|f_q5bC)LVGK80;`k@7Oi*=~9g)-8(P1}y9GhIToY41YP;39hMbNKan-NMA z-AH{2J}@!%BvUP{t18PK;Bo>lDP6+NbS0mfT;s9*U@#%^jRh{9L(L$D(y&8U56rJC z$6E_=f-6?rrj`Za6pcCqUZXRK>R%bvb%$b;;eaqcV^r`KhjP^SUYe$PW3Z@506#j~ z>Z$w%zQpH@7$=BF%!@kjsxi zy025Fj(om+`SA{t5qM`1%WQp`^@ozq{x70`nJiUB!_@8cbh-A^kKqv0CEPG5OJX2C zrLKvZu_53w>8VVjvuX(EDl_k!Q%~m3lCGg=cn7_|VaIS)$%(e|%UKS& zwdCWq95Y%8$C||#Tva#GvI&EW1uZ76ccIu(>|FG)`E>SalvNqz-|~$&QgPy4uSGTN z3b_b>f8dt)YmhvDEbHx71LA9@HpshmLg0fH^0WZ#6KUYYfEn7@{jF#*8{C*cz zKFD+sm>uvyi{lG%A$~ADb^y3B9KN3GNOF@@1C!wcy0T{OIW+N#WEi@y~`gx)pB$UbgsN}7k3;9_b^=;!dupAXu9la1jK6+&P=mGXWJ&^Chab5=U)7BL5O z1}V{jbg;!2>5mbpRX=8z|3!9Vp(g4mrK2`XFz?~F_!>_F*!7+qJGw>H;Ux8Ons#Xl zM>3!1CWPILXT~OhIK=W;$SG;HMv*xkWg7qdhzNhh9}Z7 znz{Z%h^zM%etAzhQNM&w*ZEBMyv{@A-&(>ADTd3(1@J>Dd(iNo%EN@eWEE7Vd3EGI zgcw9w8GQp?4Rgm165Kf7l%te5E3ZBNI$x}r2Fg^v!GuzW9x@p~fY_6?y)R}kXA|49 zz>#K{g8qs(g0QY?|Et3*++w<%D%ciPZQ&Hv`t@JaYmr4z7Sv=w#<|a8^&Yng=pL^5ZmpPc7VN-&6GjOnpr5m zn_ph$vN4FJO_H}BL93h}6O$uX`az*Pka3nG$V%JCTH7(OmJ84g*DPs9762w~3h{J- zyf!m-GD2IjFR|8Go)5S~SdMQ!L=xp4c<#6353#(9RheBF-x%?y#beq%awF)R^SS@w ze$03EwRF{W;}=hsjId5XsO&H6ecz=DE+sj`(^1u=UhI^*R|NM2^k<$OgGVJF#jDw- ze=d&{>tV%;Vt4_L*8iT2XEK}$Xa(X@{~nG}0wcH4#sWj1tKjmgF{t%SCVe$GFaXmW zE?eQj6+fPn^6cagRbEJ%yDt!7QB6Mu!?|wt4}4YZUER@Naz}a#h{1$5`zUT$F@Ig! zlxT`Jk4rDef*_fkXytrwoH58HNMhofnnSo+Oxqkmc2x8-XB|c`7bpmQDzFKhda;>l z-@(J`>~^~_c-br)Krb@7fjp-MqE&m&?3dliOXReT0<3|2=xu0DZ445!HT%-jRzeCkz6^EV1%6jGSXRaZw|Lf| z;ojQyD(BE~7n#5onm`HZ=3U`d{BYeHO^w%{lA z%9dUXnE*r-4A@_K&alb^hzcVfiVE;WVd?yAShNx+g*`?}ju4^W3xSlXe2iT|`}arVT>f%iTSR zb9-i7-yY^P^G*c1IBSn<9a|;DjIX@yH*Bf5Xl4wRq9%jF+i9F;?i-t!3gsxO3-2yx zTk&4M2+^`B0x!NPT^~ICQk^e{|&8g7&J$e38Q#X4lCa#%Z@ROS6R1fJG5l#Du zbWcG0dto#a%eu|w*Hgi2%6iCurhWkkugTAGFHD%>rw~nB0It9@exuDqyDcTQf#1~S zO7L%B?`E?lfXX9j#M+fR*4fV3rVmSn%-=UA+uB_jpSFwE^MA)SAyktOkJ#;O?ao$3 z6-cU`H2-o8_mBsuFN8m9gdm0x2kM@0s4 zl*gA-GYqP8D=W1{2~$zQX7$z5HNBFv*k1fM{Z&7F0HDiqJZhSkJKgiuF$pMAn{+Ji z%J~{x4kwjM5rJ+fuZEoaY$Cf9&{ZptBH(ZaGM*(Swun%{>K%dyhud?#b94%RsbuRi zuk{p_vwIr#V|0o6Fbhy3G9Y2)W za}TxRwnFj%b@i7oK6*oZ`pSbt!vL46riPALh%J3~@2uqyOWMhX7KdHS`HIg~mc0kL zA%81#dZbfS%bR;{o)5Gfe#T7R^Wy0eWz0bE^KiZs5t4rP`tvL8SA-W4=_2?;hs)9h zr`JS}RkVEMl2XH&%C>#oJ*#cxaa$Mcvu)QDJ557UZ8zkeI{e7)1oHuf@E=BYVwwnM z%-@K=y!Ey7K|8Nc<;lFWy1s^JKJ^4X@lF&ncwP<3y9-9W!OU~ByWVuC-wx>7F;q?ja+AhTjG3tvQ4d(Gkb3}o3h~+ueExZdZZfX`c!mi(q~$qem_5G$wfd6h3~%m zfBDSv*A}U?T+qiSRqU$x+o5-XX!oWbl+Le&{#a8XLm^B+XC| z$i!t7rR2{m_?3PeKx6;*i6p(yFsmN21yj$L&qAJ~TKA#gP*&F)Jpp6K>y-uHL(3Ba z!XRQL|8M9wqmjWkEw_B&l+%#mpO-S8g-6522FwnvJ(Dh?%Z!FdB$_;Y|4>1c=KM25K4=Av0 z6ZE(`wX^$Ab;ZKk{?m9j@xH|mjY#KLo!XBV+}HRrvi^B#Qz(Umx{zpG_A2Dv1+i@b z4(u_uus+`ntS8z_Df-So6v~GB6hOd%I1_bu5qv)iRqdf?XMNI9TBuA(-kdx`H9x-W zW^^<04%M@+@=)`4H#QlE3{nn^ zY*1&4U=c9hT`GZrz}EY@CnF9fF(zs~|2-idliL(XhR}T=na3cZxI)&0;2t*XH(@xk41E}!u(H!PUR^U3h8h3M6Yw5 z?67z%VbC@O)v?DK!bd}kJoN2P88AZCMs)lml4e@}hoq~Hit=ruD@rS!Qqm354YG81 zm%x$&(j6k*th6*pNk|J)qI9=(w=~lAJ^ViZ;T$<<+4qT=d+*$tS2iZ2y*KTy2ah3N zE0GX9+G-FJ@_mig)c2uvDIJ&Rzf))x7eAS~Tv5^>N<8j_6iHm=uGfCDch9HND2xr_ zd0ErVf+P>EheSWLjpSwf61sb7GiO_GdHt>>zg64>hbV4&bb3CQ$gG~#_Mw6{AtkznOMNaYz(vn zYJc%=PZp{pu0fAIC~qx&_@-cXIb18E#=W5bScpkY4+RC~tBI*N)&|;+aSfZwl9vMP z=pC7_+d7WCwYH)Q8v2+(V|s{GuT2_igd8I=-+KkEm)#T;Egg9Dd``CXWBgZhodtxr zI2ai}8t#717=;aIHjrk1PNJSPsB`#I>1_5?hgL8u(K3^=_9F7j#U68*nSv7zx>Nfz zo|o0otgt3F0$|2DS8X0xm%xcEY5ql(OB@n0E(HIzJH*D+NaW%7P=ao7k-g}&y%&Mb z5s{`xRbYH5B~LQNe_vcF%b@LGdS*;Bm8M?pqHOe|dTn{e{$`kz-)lwP_t(Bz?o?-q zy@j?RB0P#x((7%-K;wz$ih)?x6wv}HGNmL+P12HEFyGl>l3*?WV@$_B=V-fTYxSYe>v&gCQ5Nw6YW)s;^ z2O}7?&z5j3+*$-~} zb6Ls%{{0S(G4?)-LDksordzB<{AermX+)9MjR1Toqq1peA~LIR;>FpohG0@2Dx-g> zV4vrno(gY5z`c3<6OP-fUy!6W_tnBZq6h0!nr91gl5OqNuvqWIe70}(UN=D)3s&sL zR$Jg|2KNWhaMR}s1f~4>fslgZ5*ADJ@Jrzv7|e4A`2adwg>QSPjecAhwcT0gj#-;} zmcYwzlPGibP&@Sz7;;B$JLfO)Wt@G*3E*B;&v*zMm(2;EJ89I@sLaQ^@AKN9<*Q4` zs$ZSJ(7$uP2HBmKM9X?FS7W6q{0Uya9V_$|9SrGpWqHL_ry2U6C)^Xroqi zXdBabkaGvD4ZiyYd>_8%3)n-wwK{A$Y$Y^tINis@Wv5+FZ4oUGN*K#Xt@srBsd=J@ zRAuVJqE8K?bX*+eXLsEIYayC&LCv;{# zQu*Z4B$eOIKX*(XIbPKylL~!M&RW?#1S*kpH%v%C@k1-G5(^%Z(*;-0`76L|dC+QD zC-SA*DUZollE;ZkM5FAVmp~%@Xmt9&cR@%mszzIGcS-)%?;Rbr5$ahh!%%t$MleQ0 z{>q7X2Y5aBU4YKZ*Hl!TcI7W#ayMTr`YbtIw4c0~^Ft}IlQrDoAO)F3gVF$HKPKt9 zE|JHpLL$ns_>d1Da=hD}go8)yE-0c1KZ?uL6gbr3Gkv8j(Y9Pw;1+M9K*irR+4|S?_%w zvi(K4Z+J&Uwb<%cfT7I>1H~uRz&If{pN5(I7cV6xrKOWeEG1#jtfzBU^5aBWz5j|M z+H>5%RZV6%j;Nke^PRpVk!Pv=7>FE4AI?~s^8dss(u5&E{+a9^&irjqBtGTak-7uT zS6(<`o1Fo4+t+YDiv4@LnjW}LFL`X|FSC3C9va(B^SeO9LJ=#&WJC1*F1}u6XnDO8 zlY#Yaee^d%qd|tT{H2T6^sgGy>m#sMJ&7_)o-JkZJ4uwgRidHmXzf3zKc1rGZ+v^-cTb<`51@=*z7u+k;CQQMMaOFH-S&NO%(D-09IqTT-{5ejkhrlI~ z6YJ9+q!(1w)Xe&pFc>Td3C^$KIhVDDR->}Diuj{1=4rkF$Dj?_Yng*xURLk+`*fW0 z%>Qq=R0UIqvy`*KmQ4z8CT4bj?*%f_(JqNLc^*u+=JGMep~ zfwGXF9gL@uc=fwOu=YVSO#L!QjZ#CL(@Tn-J8O362X`3 x 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 NYe97%6sbLZ^*;_J)2sjh literal 0 HcmV?d00001 diff --git a/docs/Matrix/_category_.json b/docs/Matrix/_category_.json new file mode 100644 index 000000000..d8a0abc0d --- /dev/null +++ b/docs/Matrix/_category_.json @@ -0,0 +1,9 @@ +{ + "label": "Matrix", + "position": 9, + "link": { + "type": "generated-index", + "description": "In data structures and algorithms (DSA), a matrix is a two-dimensional array consisting of rows and columns. It is often used to represent a grid-like structure or a table of values. Matrices are commonly used in various algorithms and mathematical operations, such as matrix multiplication, graph algorithms, image processing, and more. They provide a convenient way to organize and manipulate data in a structured manner." + } + } + \ No newline at end of file diff --git a/docs/Matrix/image.png b/docs/Matrix/image.png new file mode 100644 index 0000000000000000000000000000000000000000..71f730ab9b90a075e5c72bba81097a7357fe8a31 GIT binary patch literal 18033 zcmcJ12{hFG+xIVfC>2E#${K2HMYbt76_QA(Y#~&3DO*OeWXqPNEF+R6O;RDtP>d~G z5+Y-l?4y{;nBRL%|L2_d|2*fs?|Gl+oOkYX-)_dt{Fdu`U7zhM`s|sLTeyX}5d_&{ za7xb%K{lO-e>J#R;3o$@S**erHkaeZ#}TA7froyX9ljTLJY{B#Ac4{d5*m&mf8a-< zKM=%E5kY?1BZx)@f(UwLy*Jf@Cpa98PU;~j^Pk+B!W8()X0KBhd=X^pN9MnqnmnI5 zA&9=Of!=X*|8Mizx2y%4P?Q`L!N2Xk-2Pn+_R*wWhrhbc**F^OoXD4cms{#!9w&Th zE}GQvOi9>CU?+ckj6EmMP4*YhLigvY9uO6|RkgA{zR^ry4T_pDuRAwP!1{{>1yz-) ztYqDKIACKhxufU}_cQKOl4E$i{o7H=9nn;oq*D#pXubUm1IZoBCi|1_;dVsp(Nq3E z{YsIdL2`o-zy5N(Y)Q9k!)J#(%Vf2SC-Rqn+p;g)ecQQho1#;5V%4ohv-1yLS-h}X zZjr%TSNcpIzE9Nuh$SK|r{k3F)*p-Ch_U!nFx&OSbLMv-jhHHT-b_{i$?bMcPDv>l zGPxXQoS|6%{ku((IZGX5W1VN{-0+%$>MO!${mG{CL?=^$*{>x$=+7VB`JPA66ZuLy zI*hr2vcmQ!Ju}1Nd_CV9ZhyC&=H%SIb%%!l+oq~qvm)zi|I$>xFzvu!XXR44h~iwF ze4?rYGBPqJhu8K?NZ>h%X9_iar#=;(D?F2};Wzc^VOCaFx_q*13`Op3b*ZZGmTBBj zg|}xliuLq0gMI5s*0GJ6A1uesd`po$aQN`~;r;%y^kTCj zbGe-!2?+`1-|k%$XuQkG*GkYWFxyz^#7g&4CR+GuI%m$DVOKs7Ge%t=pA5>;4q7c} zdwN!u?RZ^|XJyR`tJ3|%#DAi;)-2O;EA48{MB28{OTve*>6sHn(D`p~gHpTsX_j)S zVdDM${mp!-Sy@_c{jcC0vXA;(97${@iGezTM!ILM=G)q~5+S=Nw#|*f3 zr%ylFjONLXjqG1boe)gU%q;GkU3Qps<|A;G$D*xI_%eUtj40dt^Qn(xyq+A|#c=7& z$$t3oVQOk>PL7TviC2`%{Dqb2@UsgSE@W%oy6NY4zPOh=;zLVI(Z#pdup7Tpg2fu@ zIyySKyGw5^4j(vh06zNNyLU*gMKL*GI@@=;;@-LW zdAwG@hs@RfQb+jq^R>7B+k%4DHT-_+>FYoIHTC7omyT@Bba~4T5{UzObFqX#@H~6= ztcS--1H0&$m}}qO6qS{gT`bwfRu6{*cUUN!@>E#!=8Lj2m9+UjJKV-J9(V1_v(X7%>q<~i(8-f0X^H~7c1_LB#$J9>Q**oh(P2ji z2j`BgqHb6CP>W*i0Ll~DnAN`z%HvA6f!ABNZtcgnrpjBsgKw_1U3+`+(-$wBn!vZF z`6v8M``LPnEy*=O<-z!S_qaGYIq3mq&h0r`0iWOdU56F6XU`r@O-(T|{KqIh!LiCy z$q(>&bfo_7*1Z}Pm6eYr;3JDIO8#uDkypNtjgRl$yI091+ULfN8(v;kHGzJkbVov! z_ju%HBWM%K%O;)Knlj|+&jm(@uYZMKImQZS5(L$~Si9aaW5>?PxrdkIML@`j0<#NG zPd|jiB{ek}B~L6Y+)rH`8A*Kb;0830pS{KD2hL5c&JQL_UY@P0s8H9`JgKj*L<;=% z;|^!vwYSEZM)Z}kU0j;VIXO5eFYyl^guflgKgp-H z{e44!o%%L~3$MfZRyJ?mEF2$M_-LXqQ^_%MNa0h4(my$ENt!y)U#5O5`b?Z+oQK8U zep^aSt-R0#@33#uCS_5Ai$(1?mO+(3j}mM}_S4c{y@LKca`Z#e8QVChZ0|ifH|MP8 zHl(FYWd-(X+!(n(_)x`#y7l~Xb8m0&QJ3i}gO$G1D-;^X-OC$)e)m7M>ZS6#CH?t5 zTlnOOB5C1!mF0*O9AJYMBi-^q$U<+iU|?)TXUV1VPvhr~qC}KY6)-8E+S;kJ9%uJG zN#dmcRui3}k(}u0=r|=lKE9BcEqjhEZPGq+Bu!~`p=y!hNwBW`Ak@~{`T;+3z@p@0 zgr#N4#ly8OR#q8r*HLLYHiVwx30J>j`=u{W@|&xC))u}eh1b;`vn{E(OSiO!RoQ$3 zO0ZosMx0B%@~u6x7Q+W@^Sv=-YK_~e^vF7QTn0FGQ(vq z3Gwk;7`qaR&dU0`!GCrsSlM?FH=9?l*_$*zNDdHWL#j#ZYl|zwiD)CA)?U9qzpnDo zntHs~iH=QMX$GaD6XV}x@WEjvzN>Q=QbsQondenCOpc6%3T5)(Z0$R^2zlP)B>$Qz zO{5M=)7bh5KOv{H?H1nL_O&^K011tvXik29X77?(c$Z@ zw5A=A;o(cH&wGEuK|q10FCKw~tR~J#U%|wTy}8;$U0oXv;*-dOf?Tm3EOY6ssHm8j zn1K6D+m@J?CT;Nf{$9xrB+yOG)7; zTS0qtY`PBseNlSVuE_j|TmKSV-lU|Ym8tgeLrQ19WC~rIcn57LOWwq! z6W-st>SjBcY-ejq+*r-DB|t$@o5XORI%{vtd|p~wisBR7<$z{qXIHL8&=xZ|KM2VEL;Xj8JU$?IOd8hU#+bqf#4u3 zD=RlQg+Gp?qoYF)w(M5c3mLvezMWpRv)to*vSdqBQ1nI&>e;a(xfsjE=msr>Cd#tt%hUnV!M`_V*PP%_)21_o$_D9*-+s zneJ>GR6BSuUht_2UMFiFy2+!$*@dA>32czAE=z*H%cqR`s^jU0Y`P@&C^@i^g?8*P zv%hHCK}<>MsSa3K^8Nj@x0K~>SlE)dsHiB6u(zAhqeqWY>MnQYXwwx83=D#~Mpnfz zh6|>x=bi)J@+tqZH2SfB=L&@)z{wm_7N_Xd(;HN=M`J#pV%@S0yU;A96wm@IXw^c$`in_6VRtczq%8k zbK>#Y@TjP^6e)h0GZUNyt5S!%99w>(^1pUd(<&HH4m@Y_gnFi#v@76AbEwHdz_Wl zQFU{E>;&)iI;ZR*%48cYniRL&F=YSn{R(fGo^~d}Wa$S)p zUW}dGjkJ~N%B1PhyDf3w;STy2b)B+LPjL}BO`W!Zds8Ld^{4@r7Bnk7v-c>PAgZlw zXW?1HKGHmJrUvIB3k~6>grS|X6Q*7AwdQTOT}K{16$5svZDT;kX{I2>391_t7Vlvs$A zv=xlWgI&!)ulhMBYRb1U`d(c4Se78Yif$PJ z*wl&d6q*GPA@*VY_pA(lby_f+MQm+ri;a%n%*)%5tatLH3h8xOS-B^<<5B@! z2xyNhpM(7*q}7*oZ^F^RDuH!nDnO);@eJ=#7$rMxU^*4NGE6VMa~qv*4A_))sF9BS z^X$jhJQ!p=)96s8FJ)`H3_CB!KLCyb*g4qPGUlw+QA+>LJ{|2~>RFvs-`TGRYq?_b z4{@=O&^RS57Hc~Q*8m?fW;dF>Rg2N|n+W)lp78OdI9G)Ld!~en%DIq478<630Wsb}#f~Vq0%-s^HZR;hO_%baZrT z4N|1FBA`Lp+^zST`7D)lDrh?U*5{s{?OHk3u6-}}9>L|Gi1#1h;1kVCPELOC;LF?V zmZHl3K|$k&%9XT>0Qajm^Gw)@x}_hybQ2carcImp#B}ro_a+c5iVq97zq+ zHnqpPyP@igzrXs;vpHWsv}GNEa=zN*)gFBm<+!`ag-HEV2?JzdxTflA&(mN53%S(N z($YNH)@hV^S9VJ|kCfK!lry(_<7#SeZx3}bSwzUq6@QV~oqv+}Y@NC!sKA0gMcgi3?Q(RM=h~f;%*gZ>zcq+rKy=2S{~gf z`Af+qHHLhSK8cN=ROT7Cp|;y$&k?s~Um<|5Q)*nzhePQ8)u(h&Po1L*WXg|jiMd%| zc@awq1L3+iMnAA?Ee0*tG<8n?{CTm=+1SO!#rB(i?5@#GA3uIH=63d}b02*7uoFdP z&}2y|DXA9CU6>pL?m9{B%gSqal+w=>rf3>cM;oH~=g2{ppQce-k+HMcG8yjBXpZ0^ z>sJkE6O|ksU95F#!d=dD0GN_^F{TNd6H&fBq_;Z2cTSGd(b9+N09y&T&3Z0+YSpfG zf;S={C4B_%Qsp&&S2hN^-jt=P*T}Kic65DxeP#7hh1X+x2(RrrAfr8mw@^1LJ57UI zxL1X$&kVteJ1Z-E#LZP16UO0AuDxA-!t1Knon`D+ZMe--De{H|W(8)WT4JI<>+f=A z5K~P?bB(M)DgiD+ai&hD+xh1nlG#;Q6i^?zWec)jUMjEOh_*r(H(Cc;Q9^ zUCi-xVb8$e;EIG8HbjIqo>2QIX7STJvD;NEnEI-Ed#Ygp5M8-c%62;R-|CauSe$Jw z^<;^~c=Ab0OUvP6rc&ZxWLu-*xxL!tsHWy%PfyR2J0MPZAK<x2ZmB<7fLKveiNSoSmG1a z%HX`f9gzp`qh8p|Bt$y(&L2=1kF-;&*T24){!YK!woCeSMqPT0Y-;O?c;R_Cd^I&o zo$uF^QH+B2>hs@jpaeC!IBU84E%m$PO}6QV$6`KvB|SfIL!+3$gEMDEcc z1dwbWpZzsAkRlwXCwGv(vW|A4D0MucsQ%QG&mXYsYVmPDyYo2@3q_m9Q2SO}-c4G8Bz5S`&|5F|LfBL%rhKg+)C26pqL2h;q%HbYL(a?yV!-C?yAtogwGkfEG zc~Mj%YO?>r^Xh6Xgn2^C=(n+#x+m;R1z-&L`uH?QroB_*pXOFV1nn2T?? z5GdK0f80Dg4!yU9LB+3cD$v-JAcnE7fL750fc;ZP2g$C)s#Legd}?Y+nRIhuXt$V{ zr=rkOaa~;<2yCQ&0Lta=gR9WG0LYp=RGu7bjEyS=y{G-5ij27U2=Ik~fPntIgGm3h-mNZJlTgJa^}zKgg_74i8x)kqC|3YbGtd$Uq4Tbjg2J|p=E;tj(9B$ z9nJ4{RTTy<@%*eT0F`i7I!Ke7M&Q2Z$p(V=Qc+>Anv|N#j(`&99JfVG$GXH~_J#&2 z1CPfO2$+<1<(C)AI8J#MO{Ce?CV3LhKGq#Im0L#1?|rB58y1ZHcqA($!-H+md~bbqlW#vmCmEjt3rE{?w3lpSp&V7=bN}?!-4GULL8t~0N~QLp%+U;K?P7_^*qaEA5WK<2QJ>^CPrun z*M+4HbdYWaZsT`fFb;HTkc>(Fpx&CxrP>k%^}9(V=P%DpD>^~@LhOMrPOCSP?5X9-Ybci7045I}9em+Dv-g%-q>4#|E?L4|&H`hMSP@r6} z^r{R~<&Z9*5%eSC;s_GCb?OwcMvaqrS{H%9MyO*|umbM; z#^(K(`ua`Cb4x-90D{xh#{iVUUqW(W3W6@s7!QmQw0#vkia+B12zcb(yB`7U7Mm9- zU;nB=>W69>`u@G=^JgzSAj_+7znx4FU8a(Idw;`?PL>2E-0jzoZmrV3=jV$twN#cp z>rljqy^BjzmB5#V9I7kUWrB$v<`>4MVzT^L9Pug1L$qrWs^t81Z<#&&4xEL0^hT8!& zz=EP+2o^;Y4z!(Tc^9wIkk@wjOBf%Q*xFsMFw!mhvfjHdaSH4r z27?hME-S!Y9gnBVTu6#LF&@n?v+XxIWIdkjP7=CQ>cAej>DIzfKs?d#@5z0O#I7Bn@jiAq>H<}f3L0{qLqtQ zN7F&T2YewZFW=^rE28cN4k$=gQVfHyQjCshDDATzqszWtoW~@h=%rc`nwYrl#VD-Zlnu8mHzlB!oa;xrYi)VkIO#e*eBV z9tHinx$IyAw&gwj0Vr#vbp)vg%TTHfn+bTLrVz6kNT=sHVYz0j5PuA>4yk z0cov2D=TpA?R(t_?xLcih+mOvzm!41yGzJ+CD&?;vE0zGNs%^QI;dJ%S!wavy9AHI zv>0=^hNy#<+fv?u?vV!l{n4XG+1c>{%E&hTZhOUhc`$d>Jcp}8HvVL)dFBNLgZ2ap z*^-X;@>nAP+HoS7G|Z{q-hNn!7x=-zo2%!%yk4d9?oO7x4PF1o3yYW5l>lb;YTnfQ zj38t~y;T%TOP2(_DC9%=8dq2sG*IwM;~19kpWSL6)?QwU%V^{>#=tBjq_*DPsy4W? zq+}j?s-CHq&%`~8;z@#wJ1k5OkA(;xK}7t>k+1fOxhtTmyK8j-pE(Pf7|9BzC6zFI zd(9>|v;Vr~nKN5!+1e-C%b2F-?C-DR->fP(nkLQE2Qg?JdhomvGR(nXKYmP4-}Hrb zr7~il0#_HbCwVZ*1sZ{evetn*6Mq5>({VhG(IS)yzQj9?+K+?Zzi$wTjMmOh&QK5x zlu3u|YIza3GUdsqqihLe&?ov{+I;{1{q03}Xy|M6gD%>OS$drVP$qU&uGuwL7<3wF z%Dt{gu<+vB?QJ%IlpT)3M>F zV^Fdd16sc7?LRke%y~;le=2+ZI%97B`ww9@cJ@ujZr(hC3^DCe8YOnuL8x5|0HsOA z6BACs?Gnfvw}H=w3&o|1mHPWrH5lHX-j$XvQz#$OgU7B{OGro@MGqZ11U!<2o1dTe z7U-I}0ZLr)g)(PIErie}1xZ#HFMfl00RT?Uz)Vk%4PoQpxG3WcArY!en0T&Z@UI`H zNPkU`T5VbxxD?0|s7H%~<%HvRIS?<@|%p^jv(LPym^x<83&KY|3o>Mm4hJ$mc(e)#?nVV z#A~i!>4pekG6bRPFMw)5vfqS&Y2fj;GhC8k(14;*kL%{a-vgcW(;SJ9VHu)XLr;1O zEmuDo&D8L_mOf?*{R&pfFt`lNj0SWOkV|dsj>FXmX_R;n`W`$U;CZ6jfj1V1v-|$( z7A3-*%#Jw)P*2|Ju<)|oFVa$g^z!8Ec72Lo30R@8#|*k1Gd{-1UU63yE~zdXlTsl? z@`-gg@o&+eWZU^z<%+6s{E2aJKE}t#qj9spw;CRUkVt^U(+7H{dM8`{TzShUc(@y= zcr^O?&=?E@Ml|l%WTNJPY~ zCI9%}7vaiiO;PtiBRd5=-}3G=^XGEspNEHs3vi-RXkD1#7z)q`d?XQNr&F-TVO6R@ zZUB(XGG|C;g%KeMrvQN%!2d9)Vev>E-Nlc3CTuMB6!PJWP6Ox!YjDZ;q4Jge`}fBr z;_lXO<7Yn3eJ~j>4F`ZGYw)?kdweN-AWVE@-FImb0vp`C>9!K+zJ2>3nIn7dDX(W0 zfN%)f+=c677m5Pkc|!x+0p!m+k_M17S|j7i-@auJ1uh{#S#WQoVR4LLSp2l&1Lx&> z0reQo&6Cmw(L*-xgQ=rYpeQ%2Nk`{Z0Io&6ZrlL6Un;sTCMd{>fS%`1=mYBHy$$>g zxN)f92obtJGs+>R9Vi(!0Eo$$41B~c8yEa=5&XYf^WXfIM(RNUV?Bn~x&7iOW11BY z?kWNSjteGquxf$sLHRW}d7g&sMFL_EmJr-q&jaXR-U*%lVM94wKe<$H1kUrNmoPX77Mz7Lqft#kMDymSKq}@H9RR$kTq=mOa(DEQWi)Mx(CsR~ z-N>ASpOk&?-v^rE^ZAJZp@S$QV-DA1(+HMOa4OiX4MxEMX=!I@5P&COwYp{=afi6c z#K_25hegAHeT?`Mj^^g(R#yE$cR)DT@f_AdgtP-yp&D^lTXLXSKZFJYd6>%PAS-`? zW?(sOSJ(p()E$fq5Z^);Yt{gcfLunw)7!`wLKCtNSwJ%Y(Wuew6rA%ORo5t1n z>grH$a2)jMP98d4w~=AO&^J{T;ssj)WODh@48N{57sccRA4IU&1>ox;M`Jm6 zPaX;e19uFD`IM)vG=uDeqF~N8qhQ^)YhHl6h~&ahCp0tH+NNAEDk#TB;GL&e$@YrC zRNuOGhnZZdtf3#~J zd5BGXh~S|Ho>C|&F1{WZ_&(yY;4*q-No>!aSa)Xl!Pi;N;sqB1&S{_@Bh_&7-gXJ< zb$4K=r6(!3L%_;Iz^zY}GyoBUGZb``F-xcp*3g~u7WU<=q0nChqBgKzBcaS7T&hO) zeNXGxPMiPqKYsi;c-#cL!G^$XRfl^96cCKls5j%6QsFHAg*NecJEcbSW8@ZowoQ1- zy*B`Akx&E1B4nNP%jLn7hxHCOPX64}(+&>%9Th<62S+5MPf<7?v=6{*VE0B;UyY&S zcvf((mX-ut_Ye`#C=nsh_2emdfUVbKAk(yipC44!ec_x)#p2KTc^mMDJzAYRa{#t4 zUjq9Zq&?f`pjpbLwh9`0U-*C(HWQ&-1Ungc!uP6Mzz;;SxAUV!n8Jny%F@!2RVtuE z^t!47Tc`ljkqwDSK%udsWdw;tc$TaJp|s_F8N-1+Ag#V6y1BN+5@a!9Pcp@|7x z6fl?Q+F>9$$)y?=_l|7`liTYd|JS3Dn;UR5V?;Y*NSHVX9pJv@Ebq`)5*I(l%yojE zVAsv?b)kUl11*9SfdF_0#M{5}`SWLF1i1VZ7KY662`^VFSfaGYUiREPJn}v$K4l3M zuCA^w&^vtHCQ?I9tlYo9e@l;o^Wh8ynItW4W4a(dCWf1jujw7X{&tmMp-6lEEh6e? zL#`qtBO~@X!$FjZ%?S0+pB-pHEDG%>f6EM+i1YDL)`(eOoiAf@KUga}DT9KOWDz5e zBDUirwX%*18X6ZLpA|>L#Bcok5*;)n^aBRq6#JB@4*4D(w>scL!7JFjH!m`GxS#7Z zN6h-kf(3yJRFg`VDEi>wV5V3@PtUo>XYCmYRE$1dP=_DWdt0ll&>=o>_A4oghoW~97E?v!JTB{AucVvGjrC^o*YwJ#>6;) zL>QpgF0>8?+B8UdcXZvG(R^%uX_I;#IUw`cW7gqMu5ap35S;w z9-jlDET1%5y+j5a#p{ta-nGg6yh#gvkcg zkz~o<7Z-XUq6Dzahe7=Fv)JJgTJH5}W8^L$sC*8Nj-~zJ%FCr*16QWP#K9piA%PD$ zouf4%N!qt=_nullv@E}s(S6wF{fz@J)gj|K-$%epGHG6WcPAEwoaRBUu*}R$F#a;; zrmB;tfx%~?i~XhJ1xD!*?A)N!6>%-JQF?myM!FL;895F*v>+N(>2liTA>+cH(K6O+ zz0VKh81zu)1Hs{NJWOPK2nQP$Dh;V?a?9(TetiepLFO>P4O2|-hw8a2%g+LM& z^riho=!YxO0H=8&%HcEFdgnA?Z0X|AzfcZi1!l1@fF^KV8PsvUl&Gh+K+-^p1IhJv z4c#$m+syRa2c}O2WBTsl#)xmQXjwC!MXwY6H*i@zO>EZx7w-HI`1wEj()bca;Hq&^ z+NV#S)bg_E22mC-fyj;wo&;3fhJyDCVbElS9{yr;U0q!_w>kb|OG87$wzPwwXi?K( za>!hID9Vg#Esw+U1-*P5TJQ*c=ROF==P%!fkyZtOTEZ9AMIFBXnJepD^4lA11RiD3 z#R6mmrf381z@*q>P$qol9#a{J7(-#`2j$x;T?Md4dBCl+sh!(z=5qn0Jjd`9+yhkJ z@S&DP76tdeVfTMNZ*&(0JTm)#2lD?8y8kQ4|35#6Q#xgs49)gnaBr{yrIS2;VWj=T ziTu(E&;9SRP?qZ^gue9CB|A{hohY0*2U5VCl7M3&tPqohf=CZ4=wN?85(*^!(?gY# zG?Y%K!&L^FTnUaI%pQQDf1vN_n<`MsH)^>d`+NqkV*~Hgdku285xSQh9m}q?rA=?K zg_A|CnN1LyZ>a8LBoqdc;64;OE}+qbxrGG=V||e)3_;+--yLE2`uh55WY^SaXIzCY zBNdt!L3g=wWmBkO0Sj}gGr=`<@TQB|N8B%N=6%tCUTQ=^ke_bP>?<%5oSTJVdr+78 zF4*>uc{zq)4Sy{<$B94{yg0}pdXIA;r@<2}?74ggT&$R0n8S|Rt5|VyaaC1S z7`j-jSb3J_tuy)E74P3CqX0^2c|?b}gSOQ|HKBQvc%?KvJ|W@tn9eFV5P*oG(q6=) zEdR^`wnplp8O3OlX>v3oEFqCXL-7MfbfP<$|K`E;Oqt%TBI=OX1q=H{BF>k#zRp?) zfwUM+wpZaOOV7572qpmuVR*t!6)F%6U@Ss12~tn>pYY5C_VE%6)??5)jl?hf-m!{8 zrd?FkH4zlN;^JaRbDYQrzz*TKlbEN}Ryv;UO9jav0LA>zpFe;6_%S!fivY1Y4){A? zYWlU8+89w_nGXpQ2h6u?9|{YiDWuY=CHY@wBy<4q2nx&w;JRKfL*Y}$j}n330TT`e zWge6fj!-C-@owlId9oxD$zij*yE}N(Z~SJzf@cJ&NUkt(t`9uyx0yA7qjHAsp8yjJ z(3b%6m0;IdzU2ED^;8x9M_1PZ?t?>P%*Og!TNwwerx##nFolKn`SKkjcF9iw$+Fe~ zng&OW)(aO6!oTc1yK--JK_UxS6bNn#^B`P9X)Quzabdxhg+Y{!0m{6c?J=YqDD!}b z)Pq+Jf`PnS(Y~(k4(nu;v4O$z@85o2UP$P!gBO4N4uo}wIRrfR=hu=w2zVF9Ti-EB z79ioB<#CWeG69dkZXCMJ>7lSP>oD#Vn==03cq&4k^Bn0ee4)4D~LGAhyuGx#n|PP zSq9S`BM2ADP86Ag#i@&l~-a(jqEo`lN^8XfrhaF^*^pn4%^A+nf$%7eHK z1s%M>?<^3h-ACMnUY>Iud{+WNi3+cMWcSs%0VI^3zpZ4)66%e7&^LrlD{w((f$Jb& zU>b+xNLGP?8i>EYzak0f7Y72gls*Wz==e5kYis6l3DLk01PKl1lg(=<13kTPTSB_z zRY+3+WgU-Y0n~`pb#_8tEh~!``LX0kxoG_aLCaVXI zK)ejrv6qppZ4TW5M&2c)zxK8!2Df=70i3T3hK4a`3RQ&TE1FxKEIPw+DR>}(m-4$o z9RL9c7frFt?cK??iPmKPwK+)wHHl?WS63G(M?D|gYNGV&&PzPM@N_&DC%S^em=-jk zgDu!I;>1G?V>$|@Y`1{PRkIzU5!E7aJmb$A}%Yx8006xWe;6nS;M?~n&1;I$!mDQ|JAlmeaRWSr2Qa(@N8+F&4e zMA*y&#F6@0q0L5)x%M3xAO*7@7gBNNWq|9mNG1X{XL^Dd3;}4$(}IH1^!L{b)TvFW zD$M+D;WOAIH5{}eH~TX-6&LrMdd~K&dULJoL*`xnfk!W#!szAy@+p*Gn8xiIHNK|P=M z{lEWr1i;jl`s#6;wQBIx@^@Pys1Ijw5B=PMLXP_+JzWpD zg%3Z6NSc*aaVj1!rZet3mnj|`ylvU;ISqwQkvz->5ymC(Pk>`t*mgkZ#ku`a&Gz$u zfLy~fiPSepxo z;Nb&=v-Bb-B`;B*+O*LyUgbOXXevzG-S1%chP72@O_O4N+`W7EU~Mpg5mgW|m+J)`u!X^o zV(MV9LGwB%E6^Y1?_wsG3V2q22LqB~HPzKf9n9gjwqjqta z?m;Azm4mmA8!mk*$9h6J*<;{!0T2d=ch-QPYD?(s>?FT)--A5s{RylYE_wL_6yU^P zD43q!2dm}2$kEqeSHr*+;Q>M6&rjywnF;T+t?n1VPMfnlr*rq$T(dKZXg(OF#6BYP3V_eQE*dP5#Vqt z158?iFeA(R!ePdM11H2IDJ>0wRwMzl^GV-zv=o8s09ypOw{B&|T;XDG%7swc*N^bt z02d%0Z3_w$9#4kto>c&8US0kNVfKar+!)!6nJ_McgbQ4{hlxXgLLzhlvBm0!z6r+# zyUqb3g$@Ca1PC7%pOxkIcE!8k?e=e8%VQ9kw9x)cLt9&0cQco1D8-tP z)&yX&ybPk??N6&EHdRMpYenHHBp38kiZ-}NVR!H1(2X^yaAAPc8Og~zAd;|qcL3Nn zH#%bP;acDo|>z()u{y_JFv%Vjn(y0GteP zWD1~UZC9Nko%j~eu__4aSzP_VyXC(@kz9P|wiy8|=OgaDD-?@|{XRSDKQgy0fDuYv zX>M)?i;+^fxx^y#(W5`QPe1uET-qN=afONOBlSaw?=%(bJ*EeifPWHm&s}nInDcHz z9%w7{&%ki{`>hbzm6K>0CL5E{nzW9B0R+o0#bh>auja1n=Lvn~S9>^aE75N@C+>sX z^M@EI2Kgdm@q1O&{XoEPJd5?aD9lVGq7JgGnkF1)|K4t|$;nCDpFb>hp!5nkf)s#s z6`F{>u?J0(EfgB15N{;7SeuT)CAZ@`*hWJEPAbjb8Q?Yt6Bo$^Q7zaAF5#vTC|amj z7!;e37fXQK0qQ~;u=km1K6MO*x^!q|?%@L6U}RxpT0O3j`Go z1X5Ejaks%sY!24d{Q&F=1Xaj}h3M1MZ5cooKq1)*^4`;>7Hr!FQ=Mix2A>Y%1M>_a zI*Wu>RaHTL{3EnN#2y&F(D3y1G%JX9YUO^eZ_mO#JOF~T5)B2&<9qWaM<~RqZ6L*_ zpzs0&${$2820X!oKpl?Ps!s7xl_AVa`+P2Q7YSwM+^Q$YbSc0eV7i@1E{OYv1<9Hi z=#~h8fA(70ZBgGL-SG2wpqoRE_%ZZ)!@cdG>rG<81_FIG;~{VZGDF4DDS(0d`K1Wl zN!MI!8yhI;LD<%@0J`U%J@F@MY$0Gg9JHuS>IYGg{kXdK7#sEr_<0WuuP7};yzP)} zwNLYmUNBw>ZFxFv*1iXz;_!8#Pxwt$*jIEohFra5X1nkHPSYizk9`L&d zwlV?&7RW@RC%KkN^}k^N#HdMvML`l>1BDDxbn90P*(X(pwFt7c9frM0uzHnbt|jXap_4ilurX&-9oR~smozggz$^L?GVy;F{k>Yue-r zi2KNqBOnP*rntj7!%p^KkpmYQc5j{sOpQT0#L6^JHVr{Bk3s1`z*2HVZ<(DHXoO?q z<)rFyfCEV-`Y(fmC4uyR`vyZN;!-4Pop^3y4IKs^Q;INa;$m1*Sy0{_Z>%$S z&+Y4h{eH$z$6}+QlXyMKUSIv;oPU)`DW-8S5;7`Y2ge&H!5&8kLqqP4>&&gDk~ixv zaXcJQ-e<&ZEkbwPx)TA}ui3Ny7=(AnEP*$c4pG5%<2l#4rrKQNg}yWuV7-<*rKrUzS=mE>?YBaIf(Xkz)RCH zcBIws72f$;?)5@dAsZS;mVw{2pW|r26^#%-UJZ5L(Rx4*hlpweEiE(983;+t4kx0@+=wk@lokxF8^&#pnx`$C?yi(#l3(L|dMbWV15@RwZQUbH?C z`cHCfEab0M(+WXh{5pb8PfQ#;4qMaJ(N3{Hb=YUU*Wk}J(9;hwcw`DCS8!8(X6BZr z6Eti{;j0#rJzK5R1D1D`9|6%KuqFiH0?_Cz#mj(i_@!a=UH$w7e)4C1U4;a}EM@q1 zdA!La?JE3r1p$;8K_~ul9F4iQ(K&m*o8oCJL$?TCZSCZe*JVr^$(?>T{`~Ulq5{EG zdJJu69p15y`rLZ51C>$;WT-8pEUg_K3tx(Q015hO>?OlK%vica4U7-Yts>8$89O^W zcjsgS!2$UF0($<)+;>nH39#W&QK-7Q8WL42@C7W55tY#;+tU5m!+#xkLZypQa`>&g zqo)%7ni4w2%dO Y;Q#yr206S7UVs?rpV51%YajN%0E!-Uk^lez literal 0 HcmV?d00001 diff --git a/docs/Matrix/matrix.md b/docs/Matrix/matrix.md new file mode 100644 index 000000000..27040b09c --- /dev/null +++ b/docs/Matrix/matrix.md @@ -0,0 +1,153 @@ +--- +id: matrix-in-dsa +title: Matrix Data Structure +sidebar_label: Matrix +sidebar_position: 1 +description: "A matrix is a two-dimensional data structure consisting of rows and columns, where each element is identified by its row and column index. It is commonly used in various fields, including mathematics, computer science, and data analysis, to represent and manipulate structured data. " +tags: [dsa, data-structures, Matrix] +--- + +**Matrix Data Structure** is a two-dimensional array arranged in rows and columns. It is commonly used to represent mathematical matrices and is fundamental in various fields like mathematics, computer graphics, and data processing. Matrices allow for efficient storage and manipulation of data in a structured format + +## Components of Matrix Data Structure +- Size: A matrix has a specific size, defined by its number of rows and columns. +- Element: A matrix’s row and column indices serve to identify each entry, which is referred to as an element. +- Operations: Scalar multiplication and the operations of addition, subtraction, and multiplication on matrices are also supported. +- Determinant: A square matrix’s determinant is a scalar number that may be used to solve systems of linear equations and carry out other linear algebraic operations. +- Inverse: If a square matrix has an inverse, it may be used to solve linear equation systems and carry out other linear algebraic operations. +- Transpose: By flipping a matrix along its main diagonal and switching the rows and columns, you may create the transpose of the matrix. +- Rank: In many applications, including the solution of linear equations and linear regression analysis, the rank of a matrix—a measure of its linearly independent rows or columns—is utilized + +## Applications of Matrix Data Structure +- Linear Algebra: Matrices are widely used in linear algebra, a branch of mathematics that deals with linear equations, vector spaces, and linear transformations. Matrices are used to represent linear equations and to solve systems of linear equations. +- Optimization: Matrices are used in optimization problems, such as linear programming, to represent the constraints and objective functions of the problem. +- Statistics: Matrices are used in statistics to represent data and to perform operations such as correlation and regression. +- Signal Processing: Matrices are used in signal processing to represent signals and to perform operations such as filtering and transformation. +- Network Analysis: Matrices are used in network analysis to represent graphs and to perform operations such as finding the shortest path between two nodes. +- Quantum Mechanics: Matrices are used in quantum mechanics to represent states and operations in quantum systems. + + + +## Representation of Matrix Data Structure: + +![alt text](image.png) + +As you can see from the above image, the elements are organized in rows and columns. As shown in the above image the cell x[0][0] is the first element of the first row and first column. The value in the first square bracket represents the row number and the value inside the second square bracket represents the column number. (i.e, x[row][column]). + +## Declaration of Matrix Data Structure : + +Declaration of a Matrix or two-dimensional array is very much similar to that of a one-dimensional array, given as follows. +``` python +# Defining number of rows and columns in matrix +number_of_rows = 3 +number_of_columns = 3 +# Declaring a matrix of size 3 X 3, and initializing it with value zero +rows, cols = (3, 3) +arr = [[0]*cols]*rows +print(arr) +``` + +## Initializing Matrix Data Structure: +In initialization, we assign some initial value to all the cells of the matrix. Below is the implementation to initialize a matrix in different languages: + +``` python +# Initializing a 2-D array with values +arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; +``` + +## Operations on Matrix Data Structure: + +We can perform a variety of operations on the Matrix Data Structure. Some of the most common operations are: + +- Access elements of Matrix +- Traversal of a Matrix +- Searching in a Matrix +- Sorting a Matrix + +## 1. Access elements of Matrix Data Structure: + +Like one-dimensional arrays, matrices can be accessed randomly by using their indices to access the individual elements. A cell has two indices, one for its row number, and the other for its column number. We can use arr[i][j] to access the element which is at the ith row and jth column of the matrix. + +```python +# Initializing a 2-D array with values +arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] + +# Accessing elements of 2-D array +print("First element of first row:", arr[0][0]) +print("Third element of second row:", arr[1][2]) +print("Second element of third row:", arr[2][1]) +``` + +## 2. Traversal of a Matrix Data Structure: +We can traverse all the elements of a matrix or two-dimensional array by using two for-loops. + +``` python +arr = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] +``` +```python +# Traversing over all the rows +for i in range(0, 3): + # Traversing over all the columns of each row + for j in range(0, 4): + print(arr[i][j], end=" ") + print("") +``` + +Output +``` python +1 2 3 4 +5 6 7 8 +9 10 11 12 +``` +## 3. Searching in a Matrix Data Structure: + +We can search an element in a matrix by traversing all the elements of the matrix. + +Below is the implementation to search an element in a matrix: + +```python +# Python code for above approach +def searchInMatrix(arr, x): + # m=4,n=5 + for i in range(0, 4): + for j in range(0, 5): + if(arr[i][j] == x): + return 1 + return + +x = 8 +arr = [[0, 6, 8, 9, 11], + [20, 22, 28, 29, 31], + [36, 38, 50, 61, 63], + [64, 66, 100, 122, 128]] +if(searchInMatrix(arr, x)): + print("YES") +else: + print("NO") + + # This code is contributed by dhairyagothi. +``` + +Output +```python +YES +``` + +## 4. Sorting Matrix Data Structure: +We can sort a matrix in two-ways: + +- Sort the matrix row-wise +- Sort the matrix column-wise + +## Advantages of Matrix Data Structure: +- It helps in 2D Visualization. +- It stores multiple elements of the same type using the same name. +- It enables access to items at random. +- Any form of data with a fixed size can be stored. +- It is easy to implement. + +## Disadvantages of Matrix Data Structure: +- Space inefficient when we need to store very few elements in the matrix. +- The matrix size should be needed beforehand. +- Insertion and deletion operations are costly if shifting occurs. +- Resizing a matrix is time-consuming. diff --git a/docs/Matrix/problems-matrix.md b/docs/Matrix/problems-matrix.md new file mode 100644 index 000000000..1801abef2 --- /dev/null +++ b/docs/Matrix/problems-matrix.md @@ -0,0 +1,130 @@ +--- +id: matrix-problems +title: Matrix Practice Problems +sidebar_label: Matrix Practice Problems +sidebar_position: 2 +description: "A matrix is a two-dimensional data structure consisting of rows and columns, where each element is identified by its row and column index. It is commonly used in various fields, including mathematics, computer science, and data analysis, to represent and manipulate structured data. " +tags: [dsa, data-structures, Matrix ] +--- + +## Sort the given matrix + +Given a n x n matrix. The problem is to sort the given matrix in strict order. Here strict order means that the matrix is sorted in a way such that all elements in a row are sorted in increasing order and for row ‘i’, where ```1 <= i <= n-1```, the first element of row ‘i’ is greater than or equal to the last element of row ‘i-1’. + +**Examples:** +``` +Input : mat[][] = { {5, 4, 7}, + {1, 3, 8}, + {2, 9, 6} } +Output : 1 2 3 + 4 5 6 + 7 8 9 +``` +## Solution +```python +# Python program for the above approach +# driver code +v = [[5,4,7], [1,3,8], [2,9,6]] +n = len(v) + +x = [] +for i in range(n): + for j in range(n): + x.append(v[i][j]) + +x.sort() +k = 0 +for i in range(n): + for j in range(n): + v[i][j] = x[k] + k += 1 + +print("Sorted Matrix will be: ") +for i in range(n): + for j in range(n): + print(v[i][j], end=" ") + print("") + +# THIS CODE IS CONTRIBUTED BY Dhairya Gothi(dhairyagothi) +``` + +## Output +Sorted Matrix Will be: +``` +1 2 3 +4 5 6 +7 8 9 +``` +**Time Complexity:** O(n2log2n), O(n*n) for traversing, and O(n2log2n) for sorting the vector x, which has a size of n2. So overall time complexity is O(n2log2n). +**Auxiliary Space:** O(n*n), For vector. + +## Program for scalar multiplication of a matrix + +Given a matrix and a scalar element k, our task is to find out the scalar product of that matrix. + +**Examples:** +``` +Input : mat[][] = {{2, 3} + {5, 4}} + k = 5 +Output : 10 15 + 25 20 +We multiply 5 with every element. + +Input : 1 2 3 + 4 5 6 + 7 8 9 + k = 4 +Output : 4 8 12 + 16 20 24 + 28 32 36 +The scalar multiplication of a number k(scalar), multiply it on every entry in the matrix. and a matrix A is the matrix kA. + ``` + +```python +# Python 3 program to find the scalar +# product of a matrix + +# Size of given matrix +N = 3 + +def scalarProductMat( mat, k): + + # scalar element is multiplied + # by the matrix + for i in range( N): + for j in range( N): + mat[i][j] = mat[i][j] * k + +# Driver code +if __name__ == "__main__": + + mat = [[ 1, 2, 3 ], + [ 4, 5, 6 ], + [ 7, 8, 9 ]] + k = 4 + + scalarProductMat(mat, k) + + # to display the resultant matrix + print("Scalar Product Matrix is : ") + for i in range(N): + for j in range(N): + print(mat[i][j], end = " ") + print() + +# This code is contributed by dhairya +``` +## Output: +``` +Scalar Product Matrix is : +4 8 12 +16 20 24 +28 32 36 +``` + + +**ime Complexity:** O(n2), + +**Auxiliary Space:** O(1), since no extra space has been taken. + diff --git a/docs/Queue/_category_.json b/docs/Queue/_category_.json new file mode 100644 index 000000000..667dc3fce --- /dev/null +++ b/docs/Queue/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Queue", + "position": 11, + "link": { + "type": "generated-index", + "description": "A queue is a data structure that follows the First-In-First-Out (FIFO) principle. It is similar to a real-life queue, where the first person to join the queue is the first one to be served. In programming, a queue allows you to add elements to the end and remove elements from the front. This makes it useful for implementing algorithms that require a FIFO ordering, such as breadth-first search. Queues are commonly used in operating systems, networking, and other areas of computer science." + } +} diff --git a/docs/Queue/image.png b/docs/Queue/image.png new file mode 100644 index 0000000000000000000000000000000000000000..c6b3b46398c11eff81677de25ec2a314233cbe49 GIT binary patch literal 27089 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 hv;X4+FK +#include + +class Queue { +private: + std::vector elements; + +public: + void enqueue(int element) { + elements.push_back(element); + } + + int dequeue() { + if (is_empty()) { + std::cerr << "Queue Underflow" << std::endl; + return -1; + } + int front = elements.front(); + elements.erase(elements.begin()); + return front; + } + + int peek() { + if (is_empty()) { + std::cerr << "Queue is empty" << std::endl; + return -1; + } + return elements.front(); + } + + bool is_empty() { + return elements.empty(); + } + + int size() { + return elements.size(); + } +}; + +// Example usage +int main() { + Queue queue; + queue.enqueue(10); + queue.enqueue(20); + std::cout << queue.dequeue() << std::endl; // Output: 10 + std::cout << queue.peek() << std::endl; // Output: 20 + std::cout << std::boolalpha << queue.is_empty() << std::endl; // Output: false + std::cout << queue.size() << std::endl; // Output: 1 + return 0; +} +``` + +#### Java Implementation + +```java +import java.util.ArrayList; + +public class Queue { + private ArrayList elements; + + public Queue() { + elements = new ArrayList<>(); + } + + public void enqueue(int element) { + elements.add(element); + } + + public int dequeue() { + if (is_empty()) { + System.out.println("Queue Underflow"); + return -1; + } + return elements.remove(0); + } + + public int peek() { + if (is_empty()) { + System.out.println("Queue is empty"); + return -1; + } + return elements.get(0); + } + + public boolean is_empty() { + return elements.isEmpty(); + } + + public int size() { + return elements.size(); + } + + // Example usage + public static void main(String[] args) { + Queue queue = new Queue(); + queue.enqueue(10); + queue.enqueue(20); + System.out.println(queue.dequeue()); // Output: 10 + System.out.println(queue.peek()); // Output: 20 + System.out.println(queue.is_empty()); // Output: false + System.out.println(queue.size()); // Output: 1 + } +} +``` + +### Complexity + +- **Time Complexity**: + + - Enqueue: $O(1)$ + - Dequeue: $O(1)$ + - Peek: $O(1)$ + - isEmpty: $O(1)$ + - Size: $O(1)$ + +- **Space Complexity**: $O(n)$, where $n$ is the number of elements in the queue. + +### Example + +Consider a queue with the following operations: + +1. Enqueue 10 +2. Enqueue 20 +3. Dequeue +4. Peek +5. Check if empty +6. Get size + +**Operations**: + +- Enqueue 10: Queue becomes [10] +- Enqueue 20: Queue becomes [10, 20] +- Dequeue: Removes 10, Queue becomes [20] +- Peek: Returns 20, Queue remains [20] +- isEmpty: Returns false +- Size: Returns 1 + +### Conclusion + +A queue is a fundamental data structure used in computer science for various applications where the FIFO (First In First Out) principle is required. It is simple to implement and provides efficient operations for adding and removing elements. Understanding and using queues effectively can help solve many algorithmic problems. + diff --git a/docs/Trees/Trees.md b/docs/Trees/Trees.md new file mode 100644 index 000000000..fc4183c89 --- /dev/null +++ b/docs/Trees/Trees.md @@ -0,0 +1,412 @@ +# Trees in Data Structures and Algorithms + +A tree is a widely used data structure in computer science that represents a hierarchical structure. It consists of nodes connected by edges, where each node can have zero or more child nodes. Trees are used to represent various real-world scenarios and are essential in many algorithms and data manipulation operations. + +![alt text](image-1.png) + +**Here are some key concepts related to DSA trees:** + +1. **Node**: A node is a fundamental building block of a tree. It contains data and references to its child nodes, if any. In a binary tree, each node can have at most two child nodes, referred to as the left child and the right child. + +2. **Root**: The root is the topmost node of a tree. It serves as the starting point for traversing the tree and accessing its elements. + +3. **Parent and Child**: Nodes in a tree are connected in a parent-child relationship. A parent node is the immediate predecessor of its child node, and a child node is a direct descendant of its parent node. + +4. **Leaf**: A leaf node is a node that does not have any child nodes. It is located at the bottom of the tree. + +5. **Binary Tree**: A binary tree is a tree in which each node can have at most two child nodes, the left child and the right child. Binary trees are commonly used in search algorithms and binary tree traversals. + +6. **Binary Search Tree (BST)**: A binary search tree is a binary tree in which the left child of a node contains a value less than the node's value, and the right child contains a value greater than the node's value. BSTs are efficient for searching, insertion, and deletion operations. + +7. **Traversal**: Traversal refers to the process of visiting all the nodes in a tree in a specific order. Common traversal algorithms include in-order, pre-order, and post-order traversals. In-order traversal visits the left subtree, then the root, and finally the right subtree. Pre-order traversal visits the root, then the left subtree, and finally the right subtree. Post-order traversal visits the left subtree, then the right subtree, and finally the root. + +8. **Balanced Trees**: Balanced trees are trees that maintain a balance between the left and right subtrees of each node. Examples of balanced trees include AVL trees and red-black trees. Balanced trees provide faster search, insertion, and deletion operations compared to regular binary search trees. + +9. **B-Tree**: A B-tree is a self-balancing search tree that can have more than two children per node. It is commonly used in file systems and databases, as it provides efficient disk access and supports large amounts of data. + +These are just some of the key concepts related to DSA trees. Trees are a rich topic with many variations and algorithms associated with them. It's important to understand these concepts and their implementations in different programming languages to effectively use trees in your programs. + + +## Types of Trees + +![alt text](image.png) + +1. **Binary Tree**: A binary tree is a tree in which each node can have at most two child nodes, referred to as the left child and the right child. Binary trees are commonly used in search algorithms and binary tree traversals. + +2. **Binary Search Tree (BST)**: A binary search tree is a binary tree in which the left child of a node contains a value less than the node's value, and the right child contains a value greater than the node's value. BSTs are efficient for searching, insertion, and deletion operations. + +3. **AVL Tree**: An AVL tree is a self-balancing binary search tree. It ensures that the heights of the left and right subtrees of any node differ by at most one. AVL trees provide faster search, insertion, and deletion operations compared to regular binary search trees. + +4. **Red-Black Tree**: A red-black tree is another self-balancing binary search tree. It maintains balance by coloring the nodes red or black and applying specific rules during insertion and deletion operations. Red-black trees guarantee logarithmic time complexity for search, insertion, and deletion. + +5. **B-Tree**: A B-tree is a self-balancing search tree that can have more than two children per node. It is commonly used in file systems and databases, as it provides efficient disk access and supports large amounts of data. + +## Basic Operations on Trees + +1. **Insertion**: Adding a new node to the tree at the appropriate position based on its value. + +2. **Deletion**: Removing a node from the tree while maintaining the tree's structure and properties. + +3. **Search**: Finding a specific value or node in the tree. + +4. **Traversal**: Visiting all the nodes in the tree in a specific order. Common traversal algorithms include in-order, pre-order, and post-order traversals. + +## Implementation in Different Languages + +Trees can be implemented in various programming languages. Here are some examples: + +- **Java**: Java provides built-in classes like `TreeNode` and `BinarySearchTree` to implement trees. You can also create custom classes and use recursion for tree operations. + +- **Python**: Python offers flexibility in implementing trees using classes and objects. You can define a `TreeNode` class and implement tree operations using methods and recursion. + +- **C++**: C++ allows you to create tree structures using classes and pointers. You can define a `TreeNode` class and implement tree operations using pointers and recursive functions. + +- **JavaScript**: JavaScript provides the flexibility of implementing trees using objects and classes. You can define a `TreeNode` object and implement tree operations using object-oriented programming concepts. + +Remember to refer to the specific documentation and resources for each programming language to understand the syntax and details of implementing trees. + +## Implementation in Different Languages + +Trees can be implemented in various programming languages. Here are some examples: + +- **Java**: + +```java +class TreeNode { + int data; + TreeNode left; + TreeNode right; + + public TreeNode(int data) { + this.data = data; + this.left = null; + this.right = null; + } +} + +class BinaryTree { + TreeNode root; + + public BinaryTree(int data) { + this.root = new TreeNode(data); + } + + public void insert(int data) { + // Implementation of insertion + } + + public void delete(int data) { + // Implementation of deletion + } + + public TreeNode search(int data) { + // Implementation of search + return null; + } + + public void inOrderTraversal(TreeNode node) { + // Implementation of in-order traversal + } +} + +public class Main { + public static void main(String[] args) { + BinaryTree tree = new BinaryTree(5); + tree.insert(3); + tree.insert(7); + tree.insert(2); + tree.insert(4); + tree.insert(6); + tree.insert(8); + + tree.inOrderTraversal(tree.root); + } +} +``` + +Output: +``` +2 3 4 5 6 7 8 +``` + +- **Python**: + +```python +class TreeNode: + def __init__(self, data): + self.data = data + self.left = None + self.right = None + +class BinaryTree: + def __init__(self, data): + self.root = TreeNode(data) + + def insert(self, data): + # Implementation of insertion + + def delete(self, data): + # Implementation of deletion + + def search(self, data): + # Implementation of search + return None + + def in_order_traversal(self, node): + # Implementation of in-order traversal + +tree = BinaryTree(5) +tree.insert(3) +tree.insert(7) +tree.insert(2) +tree.insert(4) +tree.insert(6) +tree.insert(8) + +tree.in_order_traversal(tree.root) +``` + +Output: +``` +2 3 4 5 6 7 8 +``` + +- **C++**: + +```cpp +class TreeNode { +public: + int data; + TreeNode* left; + TreeNode* right; + + TreeNode(int data) { + this->data = data; + this->left = nullptr; + this->right = nullptr; + } +}; + +class BinaryTree { +public: + TreeNode* root; + + BinaryTree(int data) { + this->root = new TreeNode(data); + } + + void insert(int data) { + // Implementation of insertion + } + + void deleteNode(int data) { + // Implementation of deletion + } + + TreeNode* search(int data) { + // Implementation of search + return nullptr; + } + + void inOrderTraversal(TreeNode* node) { + // Implementation of in-order traversal + } +}; + +int main() { + BinaryTree tree(5); + tree.insert(3); + tree.insert(7); + tree.insert(2); + tree.insert(4); + tree.insert(6); + tree.insert(8); + + tree.inOrderTraversal(tree.root); + + return 0; +} +``` + +Output: +``` +2 3 4 5 6 7 8 +``` + +- **JavaScript**: + +```javascript +class TreeNode { + constructor(data) { + this.data = data; + this.left = null; + this.right = null; + } +} + +class BinaryTree { + constructor(data) { + this.root = new TreeNode(data); + } + + insert(data) { + // Implementation of insertion + } + + delete(data) { + // Implementation of deletion + } + + search(data) { + // Implementation of search + return null; + } + + inOrderTraversal(node) { + // Implementation of in-order traversal + } +} + +const tree = new BinaryTree(5); +tree.insert(3); +tree.insert(7); +tree.insert(2); +tree.insert(4); +tree.insert(6); +tree.insert(8); + +tree.inOrderTraversal(tree.root); +``` + +Output: +``` +2 3 4 5 6 7 8 +``` + +Remember to refer to the specific documentation and resources for each programming language to understand the syntax and details of implementing trees. + + +## Operations on Trees in Python + +Here are some examples of tree operations implemented in Python: + +1. **Insertion**: + +```python +class TreeNode: + def __init__(self, data): + self.data = data + self.left = None + self.right = None + +class BinaryTree: + def __init__(self, data): + self.root = TreeNode(data) + + def insert(self, data): + if self.root is None: + self.root = TreeNode(data) + else: + self._insert_recursive(self.root, data) + + def _insert_recursive(self, node, data): + if data < node.data: + if node.left is None: + node.left = TreeNode(data) + else: + self._insert_recursive(node.left, data) + else: + if node.right is None: + node.right = TreeNode(data) + else: + self._insert_recursive(node.right, data) +``` + +2. **Deletion**: + +```python +class BinaryTree: + # ... + + def delete(self, data): + self.root = self._delete_recursive(self.root, data) + + def _delete_recursive(self, node, data): + if node is None: + return node + + if data < node.data: + node.left = self._delete_recursive(node.left, data) + elif data > node.data: + node.right = self._delete_recursive(node.right, data) + else: + if node.left is None: + return node.right + elif node.right is None: + return node.left + else: + min_node = self._find_min(node.right) + node.data = min_node.data + node.right = self._delete_recursive(node.right, min_node.data) + + return node + + def _find_min(self, node): + current = node + while current.left is not None: + current = current.left + return current +``` + +3. **Search**: + +```python +class BinaryTree: + # ... + + def search(self, data): + return self._search_recursive(self.root, data) + + def _search_recursive(self, node, data): + if node is None or node.data == data: + return node + + if data < node.data: + return self._search_recursive(node.left, data) + else: + return self._search_recursive(node.right, data) +``` + +4. **Traversal**: + +```python +class BinaryTree: + # ... + + def in_order_traversal(self, node): + if node is not None: + self.in_order_traversal(node.left) + print(node.data, end=" ") + self.in_order_traversal(node.right) +``` + +Example usage: + +```python +tree = BinaryTree(5) +tree.insert(3) +tree.insert(7) +tree.insert(2) +tree.insert(4) +tree.insert(6) +tree.insert(8) + +tree.in_order_traversal(tree.root) +``` + +Output: +``` +2 3 4 5 6 7 8 +``` + +Remember to refer to the specific documentation and resources for Python to understand the syntax and details of implementing trees. \ No newline at end of file diff --git a/docs/Trees/_category_.json b/docs/Trees/_category_.json new file mode 100644 index 000000000..90071153a --- /dev/null +++ b/docs/Trees/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Trees", + "position": 13, + "link": { + "type": "generated-index", + "description": "In data structures and algorithms (DSA), a tree is a hierarchical data structure consisting of nodes connected by edges. It is a nonlinear data structure that represents a set of elements in a hierarchical manner, with one node being designated as the root and the remaining nodes forming subtrees." + } +} diff --git a/docs/Trees/image-1.png b/docs/Trees/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b7e53cda5e3ba4a0c1d7b295e959bbdee6ffdaf7 GIT binary patch literal 132100 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 (6pzPaVR@4=pPb7qJ0<+F3f2+7diLXPuA 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 + +So, next time you encounter a grid-based problem or need to perform operations on tabular data, you'll have the confidence and knowledge to use 2D arrays to their full potential. Happy coding! \ No newline at end of file diff --git a/docs/arrays/_category_.json b/docs/arrays/_category_.json new file mode 100644 index 000000000..e794c3655 --- /dev/null +++ b/docs/arrays/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Arrays", + "position": 6, + "link": { + "type": "generated-index", + "description": "In Data Structures, an array is a data structure consisting of a collection of elements, each identified by at least one array index or key. An array is stored such that the position of each element can be computed from its index tuple by a mathematical formula. The simplest type of data structure is a linear array, also called one-dimensional array." + } + } \ No newline at end of file diff --git a/docs/arrays/arrays-bubblesort-dsa.md b/docs/arrays/arrays-bubblesort-dsa.md new file mode 100644 index 000000000..2da836dbb --- /dev/null +++ b/docs/arrays/arrays-bubblesort-dsa.md @@ -0,0 +1,194 @@ +--- +id: arrays-bubblesort-in-dsa +title: Arrays - Bubble Sort in DSA +sidebar_label: Bubble Sort +sidebar_position: 2 +description: "Bubble Sort is a simple sorting algorithm that repeatedly steps through the list, compares adjacent elements and swaps them if they are in the wrong order. The pass through the list is repeated until the list is sorted. The algorithm, which is a comparison sort, is named for the way smaller elements 'bubble' to the top of the list. Although the algorithm is simple, it is too slow and impractical for most problems even when compared to insertion sort. It can be practical if the input is usually in sort order but may occasionally have some out-of-order elements nearly in position." +tags: [dsa, arrays, sorting, bubble-sort, algorithm of bubble-sort, pseudocode of bubble-sort, complexity of bubble-sort, example of bubble-sort, live example of bubble-sort, explanation of bubble-sort, quiz of bubble-sort, conclusion of bubble-sort] +--- + +**Bubble Sort** is a simple sorting algorithm that repeatedly steps through the list, compares adjacent elements and swaps them if they are in the wrong order. The pass through the list is repeated until the list is sorted. The algorithm, which is a comparison sort, is named for the way smaller elements bubble to the top of the list. Although the algorithm is simple, it is too slow and impractical for most problems even when compared to insertion sort. It can be practical if the input is usually in sorted order but may occasionally have some out-of-order elements nearly in position. + + + + +## Algorithm + +1. Start from the first element, compare the current element with the next element of the array. +2. If the current element is greater than the next element of the array, swap them. +3. If the current element is less than the next element, move to the next element. +4. Repeat steps 1-3 until the array is sorted. +5. The array is sorted. +6. Exit. +7. The time complexity of the bubble sort is O(n2). +8. The space complexity of the bubble sort is O(1). + +## Pseudocode + +```plaintext title="Bubble Sort" +procedure bubbleSort( A : list of sortable items ) + n = length(A) + repeat + swapped = false + for i = 1 to n-1 inclusive do + if A[i-1] > A[i] then + swap(A[i-1], A[i]) + swapped = true + end if + end for + until not swapped +end procedure +``` + +## Diagram + +```mermaid +graph TD + A([Start]) --> B("i = 0") + B --> C{"i < n-1"} + C -->|True| D("j = 0") + D --> E{"j < n - i - 1"} + E -->|True| F{arr j > arr j+1} + F -->|True| G{Swap arr j, arr j+1 } + G --> H{Increment j} + H --> |j++| D + F -->|False| I{Increment j} + I --> |j++| D + E --> |false i++| C + D --> |False| J{Increment i} + J --> |i++| C + C -->|False| K(Sorted Array) + K --> L([Stop]) + +``` + +## Example + +```js title="Bubble Sort" +function bubbleSort(arr) { + let n = arr.length; + let swapped; + do { + swapped = false; + for (let i = 0; i < n - 1; i++) { + if (arr[i] > arr[i + 1]) { + let temp = arr[i]; + arr[i] = arr[i + 1]; + arr[i + 1] = temp; + swapped = true; + } + } + } while (swapped); + return arr; +} + +let arr = [64, 34, 25, 12, 22, 11, 90]; +console.log(bubbleSort(arr)); // [ 11, 12, 22, 25, 34, 64, 90 ] +``` + +## Complexity + +- **Time Complexity**: O(n2) + - Best Case: O(n) + - Average Case: O(n2) + - Worst Case: O(n2) +- **Space Complexity**: O(1) +- **Stable**: Yes + +## Live Example + +```js live +function bubbleSort() { + let arr = [64, 34, 25, 12, 22, 11, 90]; + let n = arr.length; + + for (let i = 0; i < n; i++) { + for (let j = 0; j < n - i - 1; j++) { + if (arr[j] > arr[j + 1]) { + let temp = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = temp; + } + } + } + + return ( +

+

Bubble Sort

+

Array: [64, 34, 25, 12, 22, 11, 90]

+

+ Sorted Array: [{arr.join(", ")}] +

+
+ ) +} +``` + +## Explanation + +In the above example, we have an array of numbers `[64, 34, 25, 12, 22, 11, 90]`. We are using the bubble sort algorithm to sort the array in ascending order. The bubble sort algorithm compares each pair of adjacent items and swaps them if they are in the wrong order. The algorithm repeats this process until the array is sorted. The sorted array is `[11, 12, 22, 25, 34, 64, 90]`. The time complexity of the bubble sort is O(n2) and the space complexity is O(1). + +:::info Try it yourself +Change the array values and see how the bubble sort algorithm sorts the array. +::: + +:::tip 📝 Note +Bubble sort is not a practical sorting algorithm when the input is large. It is not suitable for large datasets due to its O(n2) time complexity. + +The main advantage of bubble sort is that it is easy to understand and implement. It is often used to teach the concept of sorting algorithms. + +Bubble sort is stable, meaning that it preserves the relative order of equal elements. + +Bubble sort is not an efficient algorithm for large datasets and is generally not used in practice. + +::: + +## References + +- [Wikipedia](https://en.wikipedia.org/wiki/Bubble_sort) +- [GeeksforGeeks](https://www.geeksforgeeks.org/bubble-sort/) +- [Programiz](https://www.programiz.com/dsa/bubble-sort) +- [TutorialsPoint](https://www.tutorialspoint.com/data_structures_algorithms/bubble_sort_algorithm.htm) +- [StudyTonight](https://www.studytonight.com/data-structures/bubble-sort) +- [w3schools](https://www.w3schools.com/dsa/dsa_algo_bubblesort.php) + +## Related + +Insertion Sort, Selection Sort, Merge Sort, Quick Sort, etc. + + +## Quiz + +1. What is the time complexity of the bubble sort algorithm? + - [ ] O(n) + - [x] O(n2) ✔ + - [ ] O(log n) + - [ ] O(n!) + +2. Is bubble sort a stable sorting algorithm? + - [x] Yes ✔ + - [ ] No + - [ ] Maybe + - [ ] Not sure + +3. What is the space complexity of the bubble sort algorithm? + - [ ] O(n) + - [x] O(1) ✔ + - [ ] O(log n) + - [ ] O(n!) + +4. What is the main advantage of bubble sort? + - [ ] It is the fastest sorting algorithm + - [x] It is easy to understand and implement ✔ + - [ ] It is suitable for large datasets + - [ ] It is used in practice + +5. What is the main disadvantage of bubble sort? + - [ ] It is the fastest sorting algorithm + - [ ] It is easy to understand and implement + - [x] It is not suitable for large datasets ✔ + - [ ] It is used in practice + +## Conclusion + +In this tutorial, we learned about the bubble sort algorithm. We discussed the algorithm, pseudocode, diagram, example, complexity, and related concepts. We also implemented the bubble sort algorithm in JavaScript and saw a live example. We also discussed the advantages and disadvantages of the bubble sort algorithm. We hope you enjoyed this tutorial and found it helpful. Feel free to share your thoughts in the comments below. \ No newline at end of file diff --git a/docs/arrays/arrays-dsa.md b/docs/arrays/arrays-dsa.md new file mode 100644 index 000000000..931a72bf8 --- /dev/null +++ b/docs/arrays/arrays-dsa.md @@ -0,0 +1,543 @@ +--- +id: arrays-in-dsa +title: Arrays in Data Structures and Algorithms +sidebar_label: Arrays +sidebar_position: 1 +description: "An array is a collection of items stored at contiguous memory locations. It is a data structure that stores a fixed-size sequential collection of elements of the same type. An array is used to store a collection of data, but it is often more useful to think of an array as a collection of variables of the same type." +tags: [dsa, data-structures, arrays, array, array-data-structure, array-in-dsa, array-in-data-structure, array-in-algorithm, array-in-dsa-example, array-in-dsa-explanation, array-in-dsa-conclusion, array-in-dsa-importance, array-in-dsa-syntax, array-in-dsa-declaration, array-in-dsa-access, array-in-dsa-update, array-in-dsa-length, array-in-dsa-iterate, array-in-dsa-max-min, array-in-dsa-program, array-in-dsa-code, array-in-dsa-js, array-in-dsa-java, array-in-dsa-python, array-in-dsa-c, array-in-dsa-cpp, array-in-dsa-ts] +--- + +An array is a collection of items stored at contiguous memory locations. It is a data structure that stores a fixed-size sequential collection of elements of the same type. An array is used to store a collection of data, but it is often more useful to think of an array as a collection of variables of the same type. + +## Visualizations of Arrays in Data Structures and Algorithms (DSA) + + + +## Why are Arrays important? + +Arrays are important because they allow us to store multiple items of the same type in a single variable. They are used to store data in a structured way, and they are used in many algorithms and data structures. + +## How to declare an Array? + +An array can be declared in various programming languages using the following syntax: + + + + + ```js + // Declare an array in JavaScript + let arr = [1, 2, 3, 4, 5]; + ``` + + + + ```java + // Declare an array in Java + int[] arr = {1, 2, 3, 4, 5}; + ``` + + + + ```python + # Declare an array in Python + arr = [1, 2, 3, 4, 5] + ``` + + + + ```c + // Declare an array in C + int arr[] = {1, 2, 3, 4, 5}; + ``` + + + + ```cpp + // Declare an array in C++ + int arr[] = {1, 2, 3, 4, 5}; + ``` + + + + ```ts + // Declare an array in TypeScript + let arr: number[] = [1, 2, 3, 4, 5]; + ``` + + + +## How to access an Array? + +An array can be accessed using the index of the element. The index of the first element is 0, the index of the second element is 1, and so on. + + + + + ```js + // Access an array in JavaScript + let arr = [1, 2, 3, 4, 5]; + console.log(arr[0]); // 1 + console.log(arr[1]); // 2 + console.log(arr[2]); // 3 + console.log(arr[3]); // 4 + console.log(arr[4]); // 5 + ``` + + + + ```java + // Access an array in Java + int[] arr = {1, 2, 3, 4, 5}; + System.out.println(arr[0]); // 1 + System.out.println(arr[1]); // 2 + System.out.println(arr[2]); // 3 + System.out.println(arr[3]); // 4 + System.out.println(arr[4]); // 5 + ``` + + + + ```python + # Access an array in Python + arr = [1, 2, 3, 4, 5] + print(arr[0]) # 1 + print(arr[1]) # 2 + print(arr[2]) # 3 + print(arr[3]) # 4 + print(arr[4]) # 5 + ``` + + + + ```c + // Access an array in C + int arr[] = {1, 2, 3, 4, 5}; + printf("%d\n", arr[0]); // 1 + printf("%d\n", arr[1]); // 2 + printf("%d\n", arr[2]); // 3 + printf("%d\n", arr[3]); // 4 + printf("%d\n", arr[4]); // 5 + ``` + + + + ```cpp + // Access an array in C++ + int arr[] = {1, 2, 3, 4, 5}; + cout << arr[0] << endl; // 1 + cout << arr[1] << endl; // 2 + cout << arr[2] << endl; // 3 + cout << arr[3] << endl; // 4 + cout << arr[4] << endl; // 5 + ``` + + + + ```ts + // Access an array in TypeScript + let arr: number[] = [1, 2, 3, 4, 5]; + console.log(arr[0]); // 1 + console.log(arr[1]); // 2 + console.log(arr[2]); // 3 + console.log(arr[3]); // 4 + console.log(arr[4]); // 5 + ``` + + + +## How to update an Array? + +An array can be updated by assigning a new value to the index of the element. + + + + + ```js + // Update an array in JavaScript + let arr = [1, 2, 3, 4, 5]; + arr[0] = 10; + console.log(arr); // [10, 2, 3, 4, 5] + ``` + + + + ```java + // Update an array in Java + int[] arr = {1, 2, 3, 4, 5}; + arr[0] = 10; + System.out.println(Arrays.toString(arr)); // [10, 2, 3, 4, 5] + ``` + + + + ```python + # Update an array in Python + arr = [1, 2, 3, 4, 5] + arr[0] = 10 + print(arr) # [10, 2, 3, 4, 5] + ``` + + + + ```c + // Update an array in C + int arr[] = {1, 2, 3, 4, 5}; + arr[0] = 10; + for (int i = 0; i < 5; i++) { + printf("%d ", arr[i]); + } + // 10 2 3 4 5 + ``` + + + + ```cpp + // Update an array in C++ + int arr[] = {1, 2, 3, 4, 5}; + arr[0] = 10; + for (int i = 0; i < 5; i++) { + cout << arr[i] << " "; + } + // 10 2 3 4 5 + ``` + + + + ```ts + // Update an array in TypeScript + let arr: number[] = [1, 2, 3, 4, 5]; + arr[0] = 10; + console.log(arr); // [10, 2, 3, 4, 5] + ``` + + + +## How to find the length of an Array? + +The length of an array can be found using the `length` property. + + + + + ```js + // Find the length of an array in JavaScript + let arr = [1, 2, 3, 4, 5]; + console.log(arr.length); // 5 + ``` + + + + ```java + // Find the length of an array in Java + int[] arr = {1, 2, 3, 4, 5}; + System.out.println(arr.length); // 5 + ``` + + + + ```python + # Find the length of an array in Python + arr = [1, 2, 3, 4, 5] + print(len(arr)) # 5 + ``` + + + + ```c + // Find the length of an array in C + int arr[] = {1, 2, 3, 4, 5}; + int length = sizeof(arr) // sizeof(arr[0]); + printf("%d\n", length); // 5 + ``` + + + + ```cpp + // Find the length of an array in C++ + int arr[] = {1, 2, 3, 4, 5}; + int length = sizeof(arr) // sizeof(arr[0]); + cout << length << endl; // 5 + ``` + + + + ```ts + // Find the length of an array in TypeScript + let arr: number[] = [1, 2, 3, 4, 5]; + console.log(arr.length); // 5 + ``` + + + +## How to iterate through an Array? + +An array can be iterated using a loop such as `for` loop, `while` loop, or `for...of` loop. + + + + + ```jsx + // Iterate through an array in JavaScript + let arr = [1, 2, 3, 4, 5]; + for (let i = 0; i < arr.length; i++) { + console.log(arr[i]); + } + // 1 + // 2 + // 3 + // 4 + // 5 + ``` + + + + + ```java + // Iterate through an array in Java + int[] arr = {1, 2, 3, 4, 5}; + for (int i = 0; i < arr.length; i++) { + System.out.println(arr[i]); + } + // 1 + // 2 + // 3 + // 4 + // 5 + ``` + + + + ```python + # Iterate through an array in Python + arr = [1, 2, 3, 4, 5] + for i in arr: + print(i) + # 1 + # 2 + # 3 + # 4 + # 5 + ``` + + + + ```c + // Iterate through an array in C + int arr[] = {1, 2, 3, 4, 5}; + for (int i = 0; i < 5; i++) { + printf("%d\n", arr[i]); + } + // 1 + // 2 + // 3 + // 4 + // 5 + ``` + + + + ```cpp + // Iterate through an array in C++ + int arr[] = {1, 2, 3, 4, 5}; + for (int i = 0; i < 5; i++) { + cout << arr[i] << endl; + } + // 1 + // 2 + // 3 + // 4 + // 5 + ``` + + + + ```ts + // Iterate through an array in TypeScript + let arr: number[] = [1, 2, 3, 4, 5]; + for (let i = 0; i < arr.length; i++) { + console.log(arr[i]); + } + // 1 + // 2 + // 3 + // 4 + // 5 + ``` + + + +## How to find the maximum and minimum elements in an Array? + +The maximum and minimum elements in an array can be found by iterating through the array and comparing each element with the current maximum and minimum elements. + + + + + ```js + // Find the maximum and minimum elements in an array in JavaScript + function findMaxMin(arr) { + let max = arr[0]; + let min = arr[0]; + for (let i = 1; i < arr.length; i++) { + if (arr[i] > max) { + max = arr[i]; + } + if (arr[i] < min) { + min = arr[i]; + } + } + return { max, min }; + } + + let arr = [2, 5, 1, 20, 10]; + console.log(findMaxMin(arr)); // { max: 20, min: 1 } + ``` + + + + ```java + public class Main { + // Find the maximum and minimum elements in an array in Java + static class MaxMin { + int max; + int min; + } + + static MaxMin findMaxMin(int arr[]) { + MaxMin result = new MaxMin(); + result.max = arr[0]; + result.min = arr[0]; + for (int i = 1; i < arr.length; i++) { + if (arr[i] > result.max) { + result.max = arr[i]; + } + if (arr[i] < result.min) { + result.min = arr[i]; + } + } + return result; + } + + public static void main(String[] args) { + int arr[] = {2, 5, 1, 20, 10}; + MaxMin result = findMaxMin(arr); + System.out.println("{ max: " + result.max + ", min: " + result.min + " }"); // { max: 20, min: 1 } + } + } + + ``` + + + + ```python + # Find the maximum and minimum elements in an array in Python + def find_max_min(arr): + max = arr[0] + min = arr[0] + for i in range(1, len(arr)): + if arr[i] > max: + max = arr[i] + if arr[i] < min: + min = arr[i] + return {"max": max, "min": min} + + arr = [2, 5, 1, 20, 10] + print(find_max_min(arr)) # { max: 20, min: 1 } + ``` + + + + ```c + // Find the maximum and minimum elements in an array in C + struct MaxMin { + int max; + int min; + }; + + struct MaxMin findMaxMin(int arr[], int n) { + struct MaxMin result; + result.max = arr[0]; + result.min = arr[0]; + for (int i = 1; i < n; i++) { + if (arr[i] > result.max) { + result.max = arr[i]; + } + if (arr[i] < result.min) { + result.min = arr[i]; + } + } + return result; + } + + int arr[] = {2, 5, 1, 20, 10}; + struct MaxMin result = findMaxMin(arr, 5); + printf("{ max: %d, min: %d }\n", result.max, result.min); // { max: 20, min: 1 } + ``` + + + + ```cpp + // Find the maximum and minimum elements in an array in C++ + struct MaxMin { + int max; + int min; + }; + + MaxMin findMaxMin(int arr[], int n) { + MaxMin result; + result.max = arr[0]; + result.min = arr[0]; + for (int i = 1; i < n; i++) { + if (arr[i] > result.max) { + result.max = arr[i]; + } + if (arr[i] < result.min) { + result.min = arr[i]; + } + } + return result; + } + + int arr[] = {2, 5, 1, 20, 10}; + MaxMin result = findMaxMin(arr, 5); + cout << "{ max: " << result.max << ", min: " << result.min << " }" << endl; // { max: 20, min: 1 } + ``` + + + + ```ts + // Find the maximum and minimum elements in an array in TypeScript + interface MaxMin { + max: number; + min: number; + } + + function findMaxMin(arr: number[]): MaxMin { + let max = arr[0]; + let min = arr[0]; + for (let i = 1; i < arr.length; i++) { + if (arr[i] > max) { + max = arr[i]; + } + if (arr[i] < min) { + min = arr[i]; + } + } + return { max, min }; + } + + let arr: number[] = [2, 5, 1, 20, 10]; + console.log(findMaxMin(arr)); // { max: 20, min: 1 } + ``` + + + +:::info 📝 Info +- The time complexity of finding the maximum and minimum elements in an array is O(n). +- The space complexity of finding the maximum and minimum elements in an array is O(1). +::: + + +## Conclusion + +In this tutorial, we learned about arrays in data structures and algorithms. We learned how to declare an array, access an array, update an array, find the length of an array, iterate through an array, and find the maximum and minimum elements in an array. Arrays are an important data structure that is used in many algorithms and data structures. \ No newline at end of file diff --git a/docs/arrays/arrays-insertionsort.md b/docs/arrays/arrays-insertionsort.md new file mode 100644 index 000000000..f5dc60742 --- /dev/null +++ b/docs/arrays/arrays-insertionsort.md @@ -0,0 +1,168 @@ +--- +id: arrays-insertionsort +title: Arrays - Insertion Sort +sidebar_label: Insertion Sort +sidebar_position: 4 +description: "Insertion Sort is a simple sorting algorithm that builds the final sorted array one item at a time. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort." +tags: [dsa, arrays, sorting, insertion-sort, sorting-algorithms] +--- + +**Insertion Sort** is a simple sorting algorithm that builds the final sorted array one item at a time. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort. + +However, insertion sort provides several advantages: + +- **Simple implementation:** The code implementation of insertion sort is simple and easy to understand. +- **Efficient for small data sets:** Insertion sort is efficient for small data sets. +- **Adaptive:** It is adaptive, meaning it is efficient for data sets that are already substantially sorted. +- **Stable:** It is a stable sorting algorithm, meaning it preserves the relative order of equal elements. +- **In-place:** It requires only a constant amount of additional memory space. +- **Online:** It can sort a list as it receives it. +- **More efficient in practice:** It is more efficient in practice than other quadratic-time sorting algorithms like bubble sort and selection sort. +- **Simple to code:** It is simple to code and implement. + + + +
+ +The insertion sort algorithm takes value at a time from the unsorted part and places it in its correct position in the sorted part. The sorted part is built from left to right, and the unsorted part is on the right side of the array. The algorithm works by shifting the elements in the sorted part that are greater than the current element to the right, creating space for the current element to be inserted. + +:::info Key Points +- **Type:** Sorting Algorithm +- **Time Complexity:** + - **Best Case:** $O(n)$ + - **Average Case:** $O(n^2)$ + - **Worst Case:** $O(n^2)$ +- **Space Complexity:** $O(1)$ +- **Stable:** Yes +- **In-Place:** Yes +- **Online:** Yes +- **Adaptive:** Yes +- **Comparison Sort:** Yes +- **Suitable for:** Small data sets, partially sorted data sets +- **Efficient for:** Small data sets +- **Not efficient for:** Large data sets +- **Simple to code:** Yes +- **Efficient in practice:** Yes + +::: + +:::tip Real-World Analogy +Insertion sort can be compared to sorting a deck of cards. You start with an empty hand and pick one card at a time from the deck. You then insert the card into its correct position in your hand, shifting the other cards if necessary. This process is repeated until all the cards are sorted in your hand. + +## How Insertion Sort Works? + +Let's understand how the Insertion Sort algorithm works with an example: + +Consider an array `arr = [12, 11, 13, 5, 6]` that we want to sort in ascending order using the Insertion Sort algorithm. + +1. **Initial Array:** `[12, 11, 13, 5, 6]` +2. **Step 1:** Start from the second element (index 1) and compare it with the previous element. + - Compare `11` with `12`. Since `11` is smaller, swap them. + - **Array after Step 1:** `[11, 12, 13, 5, 6]` + - The array is partially sorted from index 0 to 1. + - The current array looks like this: `[11, 12, 13, 5, 6]` + - The sorted part is `[11, 12]`, and the unsorted part is `[13, 5, 6]`. + - The key element is `13`. + - The key element is compared with the elements in the sorted part. + - Since `13` is greater than `12`, no swap is needed. + - The array remains the same: `[11, 12, 13, 5, 6]` + - The array is partially sorted from index 0 to 2. + - The current array looks like this: `[11, 12, 13, 5, 6]` + - The sorted part is `[11, 12, 13]`, and the unsorted part is `[5, 6]`. + - The key element is `5`. + - The key element is compared with the elements in the sorted part. + - Since `5` is smaller than `13`, `12`, and `11`, it is moved to the left. + - **Array after Step 1:** `[5, 11, 12, 13, 6]` + - The array is partially sorted from index 0 to 3. + - The current array looks like this: `[5, 11, 12, 13, 6]` + - The sorted part is `[5, 11, 12, 13]`, and the unsorted part is `[6]`. + - The key element is `6`. + - The key element is compared with the elements in the sorted part. + - Since `6` is smaller than `13`, it is moved to the left. + - Since `6` is smaller than `12`, it is moved to the left. + - Since `6` is smaller than `11`, it is moved to the left. + - **Array after Step 1:** `[5, 6, 11, 12, 13]` + - The array is now sorted. + - The sorted array is `[5, 6, 11, 12, 13]`. + +3. **Final Sorted Array:** `[5, 6, 11, 12, 13]` +4. The array is now sorted in ascending order using the Insertion Sort algorithm. +5. The time complexity of the Insertion Sort algorithm is ***O(n2)*** in the worst-case scenario. +6. The space complexity of the Insertion Sort algorithm is ***O(1)***. +7. The Insertion Sort algorithm is efficient for small data sets and partially sorted data sets. + +## Visualization + +You can visualize the Insertion Sort algorithm using the following animation: + +
+ +
+ +You can select the Insertion Sort algorithm from the drop-down menu and visualize how it works on different arrays. + +::: + +## Algorithm + +The insertion sort algorithm works as follows: + +1. Start from the second element (index 1) and compare it with the previous elements. +2. If the current element is smaller than the previous element, swap them. +3. Repeat this process until the current element is greater than the previous element or until the first element is reached. +4. Move to the next element and repeat the process. +5. Continue this process until the entire array is sorted. +6. The array is now sorted. +7. The time complexity of the insertion sort algorithm is ***O(n2)*** in the worst-case scenario. +8. The space complexity of the insertion sort algorithm is ***O(1)***. + +## Pseudocode + +```plaintext +1. for i = 1 to n-1 +2. key = arr[i] +3. j = i - 1 +4. while j >= 0 and arr[j] > key +5. arr[j + 1] = arr[j] +6. j = j - 1 +7. arr[j + 1] = key +``` + +## Implementation + +Here's the implementation of the Insertion Sort algorithm in JavaScript: + +```javascript title="Insertion Sort" +function insertionSort(arr) { + const n = arr.length; + for (let i = 1; i < n; i++) { + let key = arr[i]; + let j = i - 1; + while (j >= 0 && arr[j] > key) { + arr[j + 1] = arr[j]; + j = j - 1; + } + arr[j + 1] = key; + } + return arr; +} + +const arr = [12, 11, 13, 5, 6]; +console.log(insertionSort(arr)); // Output: [5, 6, 11, 12, 13] +``` + +## Complexity Analysis + +The time complexity of the Insertion Sort algorithm is ***O(n2)*** in the worst-case scenario when the array is sorted in reverse order. The best-case time complexity is ***O(n)*** when the array is already sorted. + +The space complexity of the Insertion Sort algorithm is ***O(1)*** since it requires only a constant amount of additional memory space. + +## References + +- [Wikipedia - Insertion Sort](https://en.wikipedia.org/wiki/Insertion_sort) +- [GeeksforGeeks - Insertion Sort](https://www.geeksforgeeks.org/insertion-sort/) +- [Programiz - Insertion Sort](https://www.programiz.com/dsa/insertion-sort) +- [Khan Academy - Insertion Sort](https://www.khanacademy.org/computing/computer-science/algorithms/insertion-sort/a/insertion-sort) +- [TutorialsPoint - Insertion Sort](https://www.tutorialspoint.com/data_structures_algorithms/insertion_sort_algorithm.htm) +- [StudyTonight - Insertion Sort](https://www.studytonight.com/data-structures/insertion-sorting) +- [Insertion Sort Visualization](https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html) \ No newline at end of file diff --git a/docs/arrays/arrays-selectionsort.md b/docs/arrays/arrays-selectionsort.md new file mode 100644 index 000000000..706040c34 --- /dev/null +++ b/docs/arrays/arrays-selectionsort.md @@ -0,0 +1,152 @@ +--- +id: arrays-selectionsort-in-dsa +title: Arrays - Selection Sort in DSA +sidebar_label: Selection Sort +sidebar_position: 3 +description: "Selection Sort is an in-place comparison sorting algorithm that divides the input list into two parts: the sublist of items already sorted and the sublist of items remaining to be sorted. It repeatedly finds the minimum element from the unsorted part and puts it at the beginning of the unsorted part. The algorithm maintains two subarrays in a given array. The subarray which is already sorted and the remaining subarray which is unsorted. In every iteration of selection sort, the minimum element from the unsorted subarray is picked and moved to the sorted subarray." +tags: [dsa, arrays, sorting, selection-sort, algorithm of selection-sort, pseudocode of selection-sort, complexity of selection-sort, example of selection-sort, live example of selection-sort, explanation of selection-sort, quiz of selection-sort, conclusion of selection-sort] +--- + +**Selection Sort** is an in-place comparison sorting algorithm that divides the input list into two parts: the sublist of items already sorted and the sublist of items remaining to be sorted. It repeatedly finds the minimum element from the unsorted part and puts it at the beginning of the unsorted part. The algorithm maintains two subarrays in a given array. The subarray which is already sorted and the remaining subarray which is unsorted. In every iteration of selection sort, the minimum element from the unsorted subarray is picked and moved to the sorted subarray. + + + +## Algorithm + +1. The selection sort algorithm divides the input list into two parts: the sublist of items already sorted and the sublist of items remaining to be sorted. +2. The algorithm repeatedly finds the minimum element from the unsorted part and puts it at the beginning of the unsorted part. +3. The algorithm maintains two subarrays in a given array. The subarray which is already sorted and the remaining subarray which is unsorted. +4. In every iteration of selection sort, the minimum element from the unsorted subarray is picked and moved to the sorted subarray. +5. The array is sorted. +6. Exit. +7. The time complexity of the selection sort is O(n^2). +8. The space complexity of the selection sort is O(1). + +## Pseudocode + +```plaintext title="Selection Sort" +procedure selectionSort( A : list of sortable items ) + n = length(A) + for i = 0 to n-1 inclusive do + min = i + for j = i+1 to n inclusive do + if A[j] < A[min] then + min = j + end if + end for + swap(A[i], A[min]) + end for +end procedure +``` + +## Diagram + + +## Complexity + +The time complexity of the selection sort is O(n^2). The space complexity of the selection sort is O(1). + +## Example + +```js title="Selection Sort" +function selectionSort(arr) { + let n = arr.length; + for (let i = 0; i < n - 1; i++) { + let min = i; + for (let j = i + 1; j < n; j++) { + if (arr[j] < arr[min]) { + min = j; + } + } + let temp = arr[i]; + arr[i] = arr[min]; + arr[min] = temp; + } + return arr; +} + +const arr = [64, 25, 12, 22, 11]; + +console.log(selectionSort(arr)); // [11, 12, 22, 25, 64] +``` + +## Practice Problems + +- [Leetcode - Sort an Array](https://leetcode.com/problems/sort-an-array/) +- [HackerRank - The Full Counting Sort](https://www.hackerrank.com/challenges/countingsort4/problem) +- [Codeforces - Sort the Array](https://codeforces.com/problemset/problem/451/B) +- [CodeChef - Turbo Sort](https://www.codechef.com/problems/TSORT) + +## Quiz + +1. What is the time complexity of the selection sort? + - A) O(n) + - B) O(n^2) + - C) O(n log n) + - D) O(1) + - Correct Answer: B + +2. What is the space complexity of the selection sort? + - A) O(n) + - B) O(n^2) + - C) O(n log n) + - D) O(1) + - Correct Answer: D +- Explanation: The space complexity of the selection sort is O(1). + +3. What is the best-case time complexity of the selection sort? + - A) O(n) + - B) O(n^2) + - C) O(n log n) + - D) O(1) + - Correct Answer: B + +4. What is the worst-case time complexity of the selection sort? + - A) O(n) + - B) O(n^2) + - C) O(n log n) + - D) O(1) + - Correct Answer: B + +5. Is the selection sort stable? + - A) Yes + - B) No + - Correct Answer: A + + +:::info Try it yourself + +```js live +function selectionSort() { + let arr = [64, 25, 12, 22, 11]; + let n = arr.length; + for (let i = 0; i < n - 1; i++) { + let min = i; + for (let j = i + 1; j < n; j++) { + if (arr[j] < arr[min]) { + min = j; + } + } + let temp = arr[i]; + arr[i] = arr[min]; + arr[min] = temp; + } + return ( +
+

Selection Sort

+

Array: [64, 25, 12, 22, 11]

+

+ Sorted Array: [{arr.join(", ")}] +

+
+ ) +} +``` + +In the above example, we have an array of numbers `[64, 25, 12, 22, 11]`. We are using the selection sort algorithm to sort the array in ascending order. The selection sort algorithm divides the input list into two parts: the sublist of items already sorted and the sublist of items remaining to be sorted. It repeatedly finds the minimum element from the unsorted part and puts it at the beginning of the unsorted part. The algorithm maintains two subarrays in a given array. The subarray which is already sorted and the remaining subarray which is unsorted. In every iteration of selection sort, the minimum element from the unsorted subarray is picked and moved to the sorted subarray. The sorted array is `[11, 12, 22, 25, 64]`. The time complexity of the selection sort is O(n^2) and the space complexity is O(1). + +::: + +## Conclusion + +In this article, we learned about the selection sort algorithm. Selection sort is an in-place comparison sorting algorithm that divides the input list into two parts: the sublist of items already sorted and the sublist of items remaining to be sorted. It repeatedly finds the minimum element from the unsorted part and puts it at the beginning of the unsorted part. The algorithm maintains two subarrays in a given array. The subarray which is already sorted and the remaining subarray which is unsorted. In every iteration of selection sort, the minimum element from the unsorted subarray is picked and moved to the sorted subarray. The time complexity of the selection sort is O(n^2) and the space complexity is O(1). Selection sort is a stable sorting algorithm. \ No newline at end of file diff --git a/docs/arrays/bucket-sort.md b/docs/arrays/bucket-sort.md new file mode 100644 index 000000000..8067ac6d2 --- /dev/null +++ b/docs/arrays/bucket-sort.md @@ -0,0 +1,204 @@ +--- +id: bucket-sort +title: Bucket sort +sidebar_label: Bucket sort +tags: + - DSA + - Python + - C++ + - Java + - Sorting + +description: "Thsi page containes Bucket Sort, with codes in python, java and c++ " +--- + +### Introduction to Bucket Sort + +Bucket sort is a comparison sorting algorithm that distributes elements into a number of "buckets." Each bucket is then sorted individually, either using another sorting algorithm or recursively applying the bucket sort. Finally, the sorted buckets are combined to form the final sorted array. Bucket sort is particularly useful for uniformly distributed data. + +### Steps of Bucket Sort + +1. **Create Buckets**: Initialize an empty array of buckets. +2. **Distribute Elements**: Distribute the elements of the input array into the appropriate buckets. +3. **Sort Buckets**: Sort each bucket individually. +4. **Concatenate Buckets**: Concatenate all sorted buckets to form the final sorted array. + +### Pseudocode + +```text +function bucketSort(array, bucketSize): + if length(array) == 0: + return array + + // Determine minimum and maximum values + minValue = min(array) + maxValue = max(array) + + // Initialize buckets + bucketCount = floor((maxValue - minValue) / bucketSize) + 1 + buckets = array of empty lists of size bucketCount + + // Distribute input array values into buckets + for i from 0 to length(array) - 1: + bucketIndex = floor((array[i] - minValue) / bucketSize) + append array[i] to buckets[bucketIndex] + + // Sort each bucket and concatenate them + sortedArray = [] + for i from 0 to bucketCount - 1: + sort(buckets[i]) // You can use any sorting algorithm + append buckets[i] to sortedArray + + return sortedArray +``` + +### Implementation in Python, C++, and Java + +#### Python Implementation + +```python +def bucket_sort(numbers, size=5): + if len(numbers) == 0: + return numbers + + # Determine minimum and maximum values + min_value = min(numbers) + max_value = max(numbers) + + # Initialize buckets + bucket_count = (max_value - min_value) // size + 1 + buckets = [[] for _ in range(bucket_count)] + + # Distribute input array values into buckets + for number in numbers: + bucket_index = (number - min_value) // size + buckets[bucket_index].append(number) + + # Sort each bucket and concatenate them + sorted_numbers = [] + for bucket in buckets: + sorted_numbers.extend(sorted(bucket)) + + return sorted_numbers + +# Example usage +data = [42, 32, 33, 52, 37, 47, 51] +sorted_data = bucket_sort(data) +print(sorted_data) # Output: [32, 33, 37, 42, 47, 51, 52] +``` + +#### C++ Implementation + +```cpp +#include +#include +#include +using namespace std; + +void bucketSort(vector& nums, int bucketSize) { + if (nums.empty()) + return; + + // Determine minimum and maximum values + int minValue = *min_element(nums.begin(), nums.end()); + int maxValue = *max_element(nums.begin(), nums.end()); + + // Initialize buckets + int numBuckets = (maxValue - minValue) / bucketSize + 1; + vector> buckets(numBuckets); + + // Distribute input array values into buckets + for (int num : nums) { + int bucketIndex = (num - minValue) / bucketSize; + buckets[bucketIndex].push_back(num); + } + + // Sort each bucket and concatenate them + nums.clear(); + for (auto& bucket : buckets) { + sort(bucket.begin(), bucket.end()); + nums.insert(nums.end(), bucket.begin(), bucket.end()); + } +} + +// Example usage +int main() { + vector data = {42, 32, 33, 52, 37, 47, 51}; + bucketSort(data, 5); + for (int num : data) { + cout << num << " "; + } + // Output: 32 33 37 42 47 51 52 + return 0; +} +``` + +#### Java Implementation + +```java +import java.util.ArrayList; +import java.util.Collections; + +public class BucketSort { + public static void bucketSort(int[] array, int bucketSize) { + if (array.length == 0) + return; + + // Determine minimum and maximum values + int minValue = array[0]; + int maxValue = array[0]; + for (int num : array) { + if (num < minValue) + minValue = num; + else if (num > maxValue) + maxValue = num; + } + + // Initialize buckets + int bucketCount = (maxValue - minValue) / bucketSize + 1; + ArrayList> buckets = new ArrayList<>(bucketCount); + for (int i = 0; i < bucketCount; i++) { + buckets.add(new ArrayList()); + } + + // Distribute input array values into buckets + for (int num : array) { + int bucketIndex = (num - minValue) / bucketSize; + buckets.get(bucketIndex).add(num); + } + + // Sort each bucket and concatenate them + int currentIndex = 0; + for (ArrayList bucket : buckets) { + Collections.sort(bucket); + for (int num : bucket) { + array[currentIndex++] = num; + } + } + } + + // Example usage + public static void main(String[] args) { + int[] data = {42, 32, 33, 52, 37, 47, 51}; + bucketSort(data, 5); + for (int num : data) { + System.out.print(num + " "); + } + // Output: 32 33 37 42 47 51 52 + } +} +``` + +### Complexity + +- **Time Complexity**: + + - Best Case: $O(n + k)$, where $n$ is the number of elements and $k$ is the number of buckets. + - Average Case: $O(n + k + n \log(\frac{n}{k}))$ + - Worst Case: $O(n^2)$, when all elements are placed in one bucket and a slow sorting algorithm (like bubble sort) is used within buckets. + +- **Space Complexity**: $O(n + k)$, for the input array and the buckets. + +### Conclusion + +Bucket sort is efficient for sorting uniformly distributed data and can achieve linear time complexity in the best case. However, it may degrade to quadratic time complexity in the worst case if elements are not uniformly distributed. It's essential to choose an appropriate bucket size and secondary sorting algorithm for optimal performance. By understanding its structure and implementation, you can effectively use bucket sort for various sorting tasks. diff --git a/docs/arrays/radix-sort.md b/docs/arrays/radix-sort.md new file mode 100644 index 000000000..50efd5fff --- /dev/null +++ b/docs/arrays/radix-sort.md @@ -0,0 +1,261 @@ +--- +id: radix-sort +title: Radix sort +sidebar_label: Radix Sort +tags: + - DSA + - Python + - C++ + - Java + - Sorting + +description: "This page explains Radix sort, with code implementations and resources for further learning." +--- + +### Introduction to Radix Sort + +Radix sort is a non-comparative integer sorting algorithm. It sorts integers by processing individual digits. Starting from the least significant digit (LSD) to the most significant digit (MSD), it uses a stable subroutine sort (like counting sort) to handle the individual digits. The algorithm is efficient for sorting numbers with a fixed number of digits and works well when the range of digits is not excessively large. + +### Steps of Radix Sort (Pseudocode Steps) + +1. **Find the maximum number** to determine the number of digits. +2. **Initialize**: Set up a loop to process each digit from the least significant to the most significant. +3. **Digit by digit sorting**: + - Use a stable sort (e.g., counting sort) to sort based on the current digit. +4. **Repeat** until all digits are processed. + +### Example + +To perform radix sort on the array [170, 45, 75, 90, 802, 24, 2, 66], we follow these steps: +![Example from GFG](https://media.geeksforgeeks.org/wp-content/uploads/20230609164537/Radix-Sort.png) + +Step 1: Find the largest element in the array, which is 802. It has three digits, so we will iterate three times, once for each significant place. + +Step 2: Sort the elements based on the unit place digits (X=0). We use a stable sorting technique, such as counting sort, to sort the digits at each significant place. + +Sorting based on the unit place: + +Perform counting sort on the array based on the unit place digits. +The sorted array based on the unit place is [170, 90, 802, 2, 24, 45, 75, 66]. + +![Example from GFG](https://media.geeksforgeeks.org/wp-content/uploads/20230609164536/Radix-Sort--1.png) + +Step 3: Sort the elements based on the tens place digits. + +Sorting based on the tens place: + +Perform counting sort on the array based on the tens place digits. +The sorted array based on the tens place is [802, 2, 24, 45, 66, 170, 75, 90]. + +![Example from GFG](https://media.geeksforgeeks.org/wp-content/uploads/20230609164535/Radix-Sort--2.png) + +Step 4: Sort the elements based on the hundreds place digits. + +Sorting based on the hundreds place: + +Perform counting sort on the array based on the hundreds place digits. +The sorted array based on the hundreds place is [2, 24, 45, 66, 75, 90, 170, 802]. + +![Example from GFG](https://media.geeksforgeeks.org/wp-content/uploads/20230609164535/Radix-Sort--3.png) + +Step 5: The array is now sorted in ascending order. + +The final sorted array using radix sort is [2, 24, 45, 66, 75, 90, 170, 802]. + +![Example from GFG](https://media.geeksforgeeks.org/wp-content/uploads/20230609164534/Radix-Sort--4.png) + +### Pseudocode for Radix Sort + +```text +function radixSort(array): + maxNumber = findMax(array) + numberOfDigits = countDigits(maxNumber) + + for digit in 1 to numberOfDigits: + countingSortByDigit(array, digit) + +function findMax(array): + maxNumber = array[0] + for number in array: + if number > maxNumber: + maxNumber = number + return maxNumber + +function countDigits(number): + count = 0 + while number != 0: + number = number // 10 + count += 1 + return count + +function countingSortByDigit(array, digit): + count = array of size 10 initialized to 0 + output = array of same size as input array + + # Count occurrences of each digit + for number in array: + digitValue = (number // 10^(digit - 1)) % 10 + count[digitValue] += 1 + + # Change count[i] so that count[i] contains the position of this digit in output + for i from 1 to 9: + count[i] += count[i - 1] + + # Build the output array + for i from length(array) - 1 to 0: + digitValue = (array[i] // 10^(digit - 1)) % 10 + output[count[digitValue] - 1] = array[i] + count[digitValue] -= 1 + + # Copy the output array to the input array + for i from 0 to length(array) - 1: + array[i] = output[i] +``` + +### Radix Sort Implementation in Python, C++, and Java + +#### Python + +```python +def radix_sort(array): + def counting_sort_by_digit(array, digit): + count = [0] * 10 + output = [0] * len(array) + + for number in array: + digit_value = (number // 10**(digit - 1)) % 10 + count[digit_value] += 1 + + for i in range(1, 10): + count[i] += count[i - 1] + + for i in range(len(array) - 1, -1, -1): + digit_value = (array[i] // 10**(digit - 1)) % 10 + output[count[digit_value] - 1] = array[i] + count[digit_value] -= 1 + + for i in range(len(array)): + array[i] = output[i] + + max_number = max(array) + number_of_digits = len(str(max_number)) + + for digit in range(1, number_of_digits + 1): + counting_sort_by_digit(array, digit) + +# Example usage +arr = [170, 45, 75, 90, 802, 24, 2, 66] +radix_sort(arr) +print(arr) +``` + +#### C++ + +```cpp +#include +#include +#include + +void countingSortByDigit(std::vector& array, int digit) { + int size = array.size(); + std::vector output(size); + int count[10] = {0}; + + for (int i = 0; i < size; i++) { + int digitValue = (array[i] / digit) % 10; + count[digitValue]++; + } + + for (int i = 1; i < 10; i++) { + count[i] += count[i - 1]; + } + + for (int i = size - 1; i >= 0; i--) { + int digitValue = (array[i] / digit) % 10; + output[count[digitValue] - 1] = array[i]; + count[digitValue]--; + } + + for (int i = 0; i < size; i++) { + array[i] = output[i]; + } +} + +void radixSort(std::vector& array) { + int maxNumber = *max_element(array.begin(), array.end()); + for (int digit = 1; maxNumber / digit > 0; digit *= 10) { + countingSortByDigit(array, digit); + } +} + +// Example usage +int main() { + std::vector arr = {170, 45, 75, 90, 802, 24, 2, 66}; + radixSort(arr); + for (int num : arr) { + std::cout << num << " "; + } + return 0; +} +``` + +#### Java + +```java +import java.util.Arrays; + +public class RadixSort { + + public static void radixSort(int[] array) { + int maxNumber = Arrays.stream(array).max().getAsInt(); + for (int digit = 1; maxNumber / digit > 0; digit *= 10) { + countingSortByDigit(array, digit); + } + } + + private static void countingSortByDigit(int[] array, int digit) { + int size = array.length; + int[] output = new int[size]; + int[] count = new int[10]; + + for (int i = 0; i < size; i++) { + int digitValue = (array[i] / digit) % 10; + count[digitValue]++; + } + + for (int i = 1; i < 10; i++) { + count[i] += count[i - 1]; + } + + for (int i = size - 1; i >= 0; i--) { + int digitValue = (array[i] / digit) % 10; + output[count[digitValue] - 1] = array[i]; + count[digitValue]--; + } + + for (int i = 0; i < size; i++) { + array[i] = output[i]; + } + } + + public static void main(String[] args) { + int[] arr = {170, 45, 75, 90, 802, 24, 2, 66}; + radixSort(arr); + System.out.println(Arrays.toString(arr)); + } +} +``` + +### Complexity of Radix Sort + +- **Time Complexity**: $O(d⋅(n+k))$ + - $d$ : Number of digits in the largest number. + - $n$ : Number of elements in the array. + - $k$ : Range of the digits for decimal system, $k = 10.$ +- **Space Complexity**: $O(n + k)$ + - $n$ : Number of elements in the array. + - $k$ : Range of the digits for decimal system, $k = 10.$ + +### Conclusion + +Radix sort is a powerful sorting algorithm for integers or fixed-length strings. Its efficiency and non-comparative nature make it a valuable tool for specific use cases, especially where the number of digits or characters is limited. Understanding and implementing radix sort can significantly enhance the performance of sorting operations in such scenarios. \ No newline at end of file diff --git a/docs/basic-concepts/_category_.json b/docs/basic-concepts/_category_.json new file mode 100644 index 000000000..b810bad9b --- /dev/null +++ b/docs/basic-concepts/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Basic Concepts", + "position": 5, + "link": { + "type": "generated-index", + "description": "Basic Concepts of Data Structures and Algorithms." + } + } \ No newline at end of file diff --git a/docs/basic-concepts/image-1.png b/docs/basic-concepts/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..cd127aab3647d3b8a854a7fb819e59273140fa37 GIT binary patch literal 12924 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 PPyteqRhFrgG79`3igf%< literal 0 HcmV?d00001 diff --git a/docs/basic-concepts/image.png b/docs/basic-concepts/image.png new file mode 100644 index 0000000000000000000000000000000000000000..8a263334fd992286c3d518de34ab71cf48d0de6e GIT binary patch literal 6623 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 literal 0 HcmV?d00001 diff --git a/docs/basic-concepts/space-complexity.md b/docs/basic-concepts/space-complexity.md new file mode 100644 index 000000000..d78bae320 --- /dev/null +++ b/docs/basic-concepts/space-complexity.md @@ -0,0 +1,212 @@ +--- +id: space-complexity +title: Space Complexity +sidebar_label: Space Complexity +sidebar_position: 2 +description: "Space complexity is a measure of the amount of working storage an algorithm needs. It is a measure of the amount of memory space an algorithm needs to solve a problem as a function of the size of the input to the problem. It is the amount of memory space required by the algorithm to execute in its life cycle." +tags: [Space Complexity, Big O Notation, Memory, Algorithm, Complexity Analysis, Data Structure, DSA, JavaScript, Java, Python, C, C++, Space Complexity Example, Space Complexity Calculation, Space Complexity Analysis, Space Complexity Explanation, Space Complexity Conclusion, Space Complexity Importance, Space Complexity Formula, Space Complexity Constant Space, Space Complexity Auxiliary Space, Space Complexity Example, Space Complexity Program, Space Complexity Code] +--- + +Space complexity is a measure of the amount of working storage an algorithm needs. It is a measure of the amount of memory space an algorithm needs to solve a problem as a function of the size of the input to the problem. It is the amount of memory space required by the algorithm to execute in its life cycle. + +## Why is Space Complexity important? + +Space complexity is important because the memory that is allocated to the program is limited. If the program uses more memory than the available memory, the program will crash. Therefore, it is important to know the space complexity of the algorithm. + +## How to calculate Space Complexity? + +Space complexity is calculated by counting the amount of memory space used by the algorithm. It is calculated by counting the amount of memory space used by the algorithm as a function of the size of the input to the problem. + +## Example + +```js title="Space Complexity" +function sumOfN(n) { + let sum = 0; + for (let i = 1; i <= n; i++) { + sum += i; + } + return sum; +} +``` + +In the above example, the space complexity of the algorithm is O(1) because the algorithm uses a constant amount of memory space. + +## Example of Space Complexity + +1. Write a program to fine maximum and minimum element in an array. + + + + + ```js {6,9,12} + function findMaxMin(arr) { + let max = arr[0]; + let min = arr[0]; + for (let i = 1; i < arr.length; i++) { + if (arr[i] > max) { + max = arr[i]; + } + if (arr[i] < min) { + min = arr[i]; + } + } + return { max, min }; + } + + const arr = [2, 5, 1, 20, 10]; + console.log(findMaxMin(arr)); // { max: 20, min: 1 } + ``` + + + + + ```java + public class Main { + public static void main(String[] args) { + int[] arr = {2, 5, 1, 20, 10}; + System.out.println(findMaxMin(arr)); // { max: 20, min: 1 } + } + + public static Map findMaxMin(int[] arr) { + int max = arr[0]; + int min = arr[0]; + for (int i = 1; i < arr.length; i++) { + if (arr[i] > max) { + max = arr[i]; + } + if (arr[i] < min) { + min = arr[i]; + } + } + Map result = new HashMap<>(); + result.put("max", max); + result.put("min", min); + return result; + } + } + ``` + + + + + ```python + def find_max_min(arr): + max = arr[0] + min = arr[0] + for i in range(1, len(arr)): + if arr[i] > max: + max = arr[i] + if arr[i] < min: + min = arr[i] + return {"max": max, "min": min} + + arr = [2, 5, 1, 20, 10] + print(find_max_min(arr)) # { max: 20, min: 1 } + ``` + + + + + ```c + #include + + struct MaxMin { + int max; + int min; + }; + + struct MaxMin findMaxMin(int arr[], int n) { + struct MaxMin result; + result.max = arr[0]; + result.min = arr[0]; + for (int i = 1; i < n; i++) { + if (arr[i] > result.max) { + result.max = arr[i]; + } + if (arr[i] < result.min) { + result.min = arr[i]; + } + } + return result; + } + + int main() { + int arr[] = {2, 5, 1, 20, 10}; + struct MaxMin result = findMaxMin(arr, 5); + printf("{ max: %d, min: %d }\n", result.max, result.min); // { max: 20, min: 1 } + return 0; + } + ``` + + + + + ```cpp + #include + #include + #include + + std::map findMaxMin(std::vector arr) { + int max = arr[0]; + int min = arr[0]; + for (int i = 1; i < arr.size(); i++) { + if (arr[i] > max) { + max = arr[i]; + } + if (arr[i] < min) { + min = arr[i]; + } + } + std::map result; + result["max"] = max; + result["min"] = min; + return result; + } + + int main() { + std::vector arr = {2, 5, 1, 20, 10}; + std::map result = findMaxMin(arr); + std::cout << "{ max: " << result["max"] << ", min: " << result["min"] << " }\n"; // { max: 20, min: 1 } + return 0; + } + ``` + + + + +In the above example, the space complexity of the algorithm is O(1) because the algorithm uses a constant amount of memory space. + +**Explanation:** In the above example, we are finding the maximum and minimum element in an array. We are using two variables `max` and `min` to store the maximum and minimum element in the array. We are using a constant amount of memory space to store the maximum and minimum element in the array. Therefore, the space complexity of the algorithm is O(1). + +:::info Complexity Analysis +**Farmula to calculate Space Complexity** + +Space Complexity = Constant Space + Auxiliary Space + +**Constant Space:** The amount of space used by the algorithm that is not dependent on the size of the input to the problem. It is a constant amount of memory space used by the algorithm. + +**Auxiliary Space:** The amount of space used by the algorithm that is dependent on the size of the input to the problem. It is a variable amount of memory space used by the algorithm. + +```plaintext title="Space Complexity" +Space Complexity = O(1) + O(n) = O(n) +``` + +**For Example:** + +```js title="Space Complexity" +function sumOfN(n) { + let sum = 0; // Constant Space (O(1)) + for (let i = 1; i <= n; i++) { + sum += i; // Auxiliary Space (O(n)) + } + return sum; +} +``` + +In the above example, the space complexity of the algorithm is `O(1) + O(n) = O(n)`. + +::: + +## Conclusion + +Space complexity is a measure of the amount of working storage an algorithm needs. It is a measure of the amount of memory space an algorithm needs to solve a problem as a function of the size of the input to the problem. It is the amount of memory space required by the algorithm to execute in its life cycle. \ No newline at end of file diff --git a/docs/basic-concepts/time-complexity.md b/docs/basic-concepts/time-complexity.md new file mode 100644 index 000000000..104eb97c4 --- /dev/null +++ b/docs/basic-concepts/time-complexity.md @@ -0,0 +1,306 @@ +--- +id: time-complexity +title: Time Complexity +sidebar_label: Time Complexity +sidebar_position: 1 +description: "Time Complexity is a measure of the amount of time an algorithm takes to solve a problem as a function of the size of the input to the problem. It is commonly estimated by counting the number of elementary operations performed by the algorithm, where an elementary operation takes a fixed amount of time to perform." +tags: [time complexity, big o notation, algorithm, complexity analysis, data structure, dsa, javascript, java, python, c, c++, time complexity example, time complexity calculation, time complexity analysis, time complexity explanation, time complexity conclusion, time complexity importance, time complexity formula, time complexity constant time, time complexity linear time, time complexity logarithmic time, time complexity quadratic time, time complexity exponential time, time complexity factorial time, time complexity polynomial time, time complexity sublinear time, time complexity linearithmic time, time complexity quasilinear time, time complexity superpolynomial time, time complexity subexponential time, time complexity log factorial time, time complexity exponential factorial time, time complexity exponential exponential time, time complexity exponential factorial exponential time, time complexity exponential exponential factorial time] +--- + +Time Complexity is a measure of the amount of time an algorithm takes to solve a problem as a function of the size of the input to the problem. It is commonly estimated by counting the number of elementary operations performed by the algorithm, where an elementary operation takes a fixed amount of time to perform. + +## Why is Time Complexity Important? + +Time Complexity is important because it helps us understand the efficiency of an algorithm. It allows us to compare different algorithms and choose the most efficient one for a given problem. It also helps us analyze the performance of an algorithm as the size of the input grows. + +## Common Notations for Time Complexity + +The most common notations used to represent the time complexity of an algorithm are: + +- **Big O Notation (O):** It represents the upper bound of the time complexity of an algorithm. It gives the worst-case time complexity of an algorithm. +- **Omega Notation (Ω):** It represents the lower bound of the time complexity of an algorithm. It gives the best-case time complexity of an algorithm. +- **Theta Notation (Θ):** It represents the average-case time complexity of an algorithm. It gives the tight bound of the time complexity of an algorithm. + +### Big O Notation (O) + +Big O Notation is used to represent the upper bound of the time complexity of an algorithm. It gives the worst-case time complexity of an algorithm. It is commonly used to analyze the performance of an algorithm as the size of the input grows. + +![Big O Notation](image.png) + +The Big O Notation is written as `O(f(n))`, where `f(n)` is a function that represents the time complexity of the algorithm. It is read as "O of f of n" or "order of f of n". + +### Omega Notation (Ω) + +Omega Notation is used to represent the lower bound of the time complexity of an algorithm. It gives the best-case time complexity of an algorithm. It is commonly used to analyze the performance of an algorithm as the size of the input grows. + +![Omega Notation](image-1.png) + +The Omega Notation is written as `Ω(f(n))`, where `f(n)` is a function that represents the time complexity of the algorithm. It is read as "Omega of f of n". + +### Theta Notation (Θ) + +Theta Notation is used to represent the average-case time complexity of an algorithm. It gives the tight bound of the time complexity of an algorithm. It is commonly used to analyze the performance of an algorithm as the size of the input grows. + +The Theta Notation is written as `Θ(f(n))`, where `f(n)` is a function that represents the time complexity of the algorithm. It is read as "Theta of f of n". + + +## Examples of Time Complexity + +Here are some examples of time complexity for different algorithms: + +- **Constant Time (O(1)):** An algorithm that takes the same amount of time to run, regardless of the size of the input. +- **Linear Time (O(n)):** An algorithm that takes time proportional to the size of the input. +- **Logarithmic Time (O(log n)):** An algorithm that takes time proportional to the logarithm of the size of the input. +- **Quadratic Time (O(n^2)):** An algorithm that takes time proportional to the square of the size of the input. +- **Exponential Time (O(2^n)):** An algorithm that takes time proportional to an exponential function of the size of the input. +- **Factorial Time (O(n!)):** An algorithm that takes time proportional to the factorial of the size of the input. +- **Polynomial Time (O(n^k)):** An algorithm that takes time proportional to a polynomial function of the size of the input. +- **Sublinear Time (O(log log n)):** An algorithm that takes time proportional to the logarithm of the logarithm of the size of the input. +- **Linearithmic Time (O(n log n)):** An algorithm that takes time proportional to the product of the size of the input and the logarithm of the size of the input. +- **Quasilinear Time (O(n log^k n)):** An algorithm that takes time proportional to the product of the size of the input and the logarithm of the size of the input raised to the power of k. +- **Superpolynomial Time (O(n^k)):** An algorithm that takes time proportional to a function that grows faster than any polynomial function of the size of the input. +- **Subexponential Time (O(2^poly(n))):** An algorithm that takes time proportional to a function that grows slower than any exponential function of the size of the input. +- **Log Factorial Time (O(log n!)):** An algorithm that takes time proportional to the logarithm of the factorial of the size of the input. +- **Exponential Factorial Time (O(2^n!)):** An algorithm that takes time proportional to an exponential function of the factorial of the size of the input. +- **Exponential Exponential Time (O(2^2^n)):** An algorithm that takes time proportional to an exponential function of an exponential function of the size of the input. +- **Exponential Factorial Exponential Time (O(2^n!^2^n)):** An algorithm that takes time proportional to an exponential function of the factorial of an exponential function of the size of the input. +- **Exponential Exponential Factorial Time (O(2^2^n!)):** An algorithm that takes time proportional to an exponential function of an exponential function of the factorial of the size of the input. + +## Analyzing Time Complexity + +To analyze the time complexity of an algorithm, we can follow these steps: + +1. **Count the Operations:** Count the number of elementary operations performed by the algorithm. +2. **Identify the Dominant Term:** Identify the term that grows the fastest as the size of the input grows. +3. **Express the Time Complexity:** Express the time complexity using the Big O notation. +4. **Compare with Other Algorithms:** Compare the time complexity with other algorithms to choose the most efficient one. +5. **Analyze the Best, Worst, and Average Cases:** Analyze the best-case, worst-case, and average-case time complexity of the algorithm. +6. **Optimize the Algorithm:** Optimize the algorithm to improve its time complexity if possible. +7. **Test the Algorithm:** Test the algorithm with different input sizes to verify its time complexity. +8. **Benchmark the Algorithm:** Benchmark the algorithm to measure its actual performance. +9. **Profile the Algorithm:** Profile the algorithm to identify performance bottlenecks and optimize them. +10. **Analyze the Real-World Performance:** Analyze the real-world performance of the algorithm in different environments and scenarios. +11. **Contribute:** If you have any tips to share, feel free to contribute to this section. + +## For Example + +1. Calculating sum of array elements using loop. + + + + + ```js + function sum(arr) { + let result = 0; + for (let i = 0; i < arr.length; i++) { + result += arr[i]; + } + return result; + } + const arr = [1, 2, 3, 4, 5]; + console.log(sum(arr)); // Output: 15 + ``` + + + ```py + def sum(arr): + result = 0 + for i in arr: + result += i + return result + arr = [1, 2, 3, 4, 5] + print(sum(arr)) # Output: 15 + ``` + + + ```java + class Sum { + public static void main(String args[]) { + int arr[] = {1, 2, 3, 4, 5}; + int result = 0; + for (int i = 0; i < arr.length; i++) { + result += arr[i]; + } + System.out.println(result); // Output: 15 + } + } + ``` + + + ```c + #include + int main() { + int arr[] = {1, 2, 3, 4, 5}; + int result = 0; + for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++) { + result += arr[i]; + } + printf("%d\n", result); // Output: 15 + return 0; + } + ``` + + + ```go + package main + import "fmt" + func main() { + arr := []int{1, 2, 3, 4, 5} + result := 0 + for i := 0; i < len(arr); i++ { + result += arr[i] + } + fmt.Println(result) // Output: 15 + } + ``` + + + ```cpp + #include + using namespace std; + int main() { + int arr[] = {1, 2, 3, 4, 5}; + int result = 0; + for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++) { + result += arr[i]; + } + cout << result << endl; // Output: 15 + return 0; + } + ``` + + + ```swift + import Foundation + let arr = [1, 2, 3, 4, 5] + var result = 0 + for i in arr { + result += i + } + print(result) // Output: 15 + ``` + + + ```kotlin + fun main() { + val arr = intArrayOf(1, 2, 3, 4, 5) + var result = 0 + for (i in arr) { + result += i + } + println(result) // Output: 15 + } + ``` + + + ```rs + fn main() { + let arr = [1, 2, 3, 4, 5]; + let mut result = 0; + for i in arr.iter() { + result += i; + } + println!("{}", result); // Output: 15 + } + ``` + + + ```php + + ``` + + + ```cs + using System; + class Sum { + static void Main() { + int[] arr = {1, 2, 3, 4, 5}; + int result = 0; + foreach (int i in arr) { + result += i; + } + Console.WriteLine(result); // Output: 15 + } + } + ``` + + + ```ts + let arr: number[] = [1, 2, 3, 4, 5]; + let result: number = 0; + for (let i of arr) { + result += i; + } + console.log(result); // Output: 15 + ``` + + + ```scala + object Sum { + def main(args: Array[String]): Unit = { + val arr = Array(1, 2, 3, 4, 5) + var result = 0 + for (i <- arr) { + result += i + } + println(result) // Output: 15 + } + } + ``` + + + ```haskell + main = do + let arr = [1, 2, 3, 4, 5] + let result = sum arr + print result -- Output: 15 + ``` + + + ```r + arr <- c(1, 2, 3, 4, 5) + result <- sum(arr) + print(result) # Output: 15 + ``` + + + ```perl + my @arr = (1, 2, 3, 4, 5); + my $result = 0; + foreach my $i (@arr) { + $result += $i; + } + print $result; # Output: 15 + ``` + + + ```lua + arr = {1, 2, 3, 4, 5} + result = 0 + for i = 1, #arr do + result = result + arr[i] + end + print(result) -- Output: 15 + ``` + + + +Each of the above code snippets has a time complexity of `O(n)` because the number of iterations in the loop is directly proportional to the size of the input array. + +**Exlpanation:** The time complexity of the given code is `O(n)` because the loop iterates through the array elements one by one, and the number of iterations is directly proportional to the size of the input array. Therefore, the time complexity is linear, i.e., `O(n)`. + + +:::info +**Note:** The time complexity of an algorithm can be different for different programming languages, but the underlying logic and analysis remain the same. +::: + +## Conclusion + +Time Complexity is an important concept in computer science and programming. It helps us understand the efficiency of algorithms and make informed decisions about choosing the most efficient algorithm for a given problem. By analyzing the time complexity of algorithms, we can optimize them for better performance and improve the overall efficiency of our programs. \ No newline at end of file diff --git a/docs/binary_search/Iterative_binary_search.md b/docs/binary_search/Iterative_binary_search.md new file mode 100644 index 000000000..7fab7b613 --- /dev/null +++ b/docs/binary_search/Iterative_binary_search.md @@ -0,0 +1,134 @@ +--- +id: iterative-binary-search-DSA +title: Iterative Binary Search +sidebar_label: Iterative Binary Search +sidebar_position: 7 +description: "In this blog post, we'll explore the iterative binary search algorithm, a fundamental technique in computer science for efficiently finding an element in a sorted array. You'll learn what iterative binary search is, how it works, and its time complexity. We'll also cover practical applications and common problems you can solve using this algorithm. By the end, you'll have a thorough understanding of iterative binary search and how to implement it in your programming projects." +tags: [dsa, algorithms, binary search, iterative] +--- + +Iterative Binary Search is powerful algorithm that is essential for efficiently finding elements in sorted arrays, making it a staple in the toolkit of any adept programmer. Whether you're optimizing search operations or solving complex algorithmic challenges, understanding iterative binary search is crucial. Let's delve into its mechanics, applications, and implementation. + +## What is Iterative Binary Search? + +Iterative binary search is a highly efficient algorithm used to find an element in a sorted array. It works by repeatedly dividing the search interval in half, using an iterative approach. If the value of the search key is less than the item in the middle of the interval, the algorithm narrows the interval to the lower half. Otherwise, it narrows it to the upper half. The process continues until the search key is found or the interval is empty. + +In pseudo-code, iterative binary search is defined as follows: + +```cpp +FUNCTION iterativeBinarySearch(array, key): +low = 0 +high = array.length - 1 +WHILE low <= high: +mid = (low + high) / 2 +IF array[mid] == key: +RETURN mid +ELSE IF array[mid] < key: +low = mid + 1 +ELSE: +high = mid - 1 +RETURN -1 +``` + +```cpp +int iterativeBinarySearch(int array[], int size, int key) { + int low = 0; + int high = size - 1; + while (low <= high) { + int mid = low + (high - low) / 2; + if (array[mid] == key) { + return mid; + } else if (array[mid] < key) { + low = mid + 1; + } else { + high = mid - 1; + } + } + return -1; +} +``` + +## How Iterative Binary Search Works + +### Step-by-Step Explanation + +1. Initialize: Set two pointers, low at the beginning and high at the end of the array. +2. Middle Element: Calculate the middle element's index. +Comparison: +3. If the middle element is the target, return its index. +4. If the middle element is less than the target, discard the left half by setting low to mid + 1. +5. If the middle element is greater than the target, discard the right half by setting high to mid - 1. +6. Repeat: Repeat steps 2 and 3 until the target is found or the low pointer exceeds the high pointer. + +### Time Complexity + +The time complexity of iterative binary search is $O(logn)$, +where $𝑛$ is the number of elements in the array. This logarithmic time complexity makes iterative binary search significantly faster than linear search for large datasets. + +## Practical Applications + +Iterative binary search is widely used in various real-world applications and algorithmic problems: + +1. Searching in a Sorted Array + The primary use of iterative binary search is to find elements in a sorted array efficiently. It is the foundation for more complex search algorithms. + +2. Dictionary Lookups + Iterative binary search is used in dictionaries (like the one you're reading now) to quickly find words and their definitions. + +3. Binary Search Trees + Iterative binary search is the basis for searching in binary search trees (BSTs), a fundamental data structure in computer science. + +4. Finding Boundaries + Iterative binary search can be adapted to find the first or last occurrence of a target element, making it useful in problems requiring boundary searches. + +Common Problems Solved Using Iterative Binary Search +Iterative binary search can be adapted in various ways to solve different types of problems. Here are a couple of common problems: + +1. Lower Bound and Upper Bound + These variations of iterative binary search are used to find the first and last occurrence of a target element in a sorted array. + +Lower Bound Pseudo-Code: + +```cpp +FUNCTION lowerBound(array, key): + low = 0 + high = array.length + WHILE low < high: + mid = (low + high) / 2 + IF array[mid] < key: + low = mid + 1 + ELSE: + high = mid + RETURN low + +``` + +Upper Bound Pseudo-Code: + +```cpp +FUNCTION upperBound(array, key): + low = 0 + high = array.length + WHILE low < high: + mid = (low + high) / 2 + IF array[mid] <= key: + low = mid + 1 + ELSE: + high = mid + RETURN low + + +``` + +2. Rotated Sorted Array + Iterative binary search can be modified to handle rotated sorted arrays, where the array is sorted but then rotated at some pivot point. + +:::tip +Handle Edge Cases: Ensure your implementation correctly handles cases where the target element is not present or when the array is empty. +Prevent Overflow: When calculating the middle index, use $\text{mid} = \text{low} + \frac{\text{high} - \text{low}}{2}$ instead of $\text{mid} = \frac{\text{low} + \text{high}}{2}$ to prevent potential overflow. +Efficiency: The iterative approach often uses less memory than the recursive approach because it doesn't involve the overhead of multiple recursive function calls. +::: + +## Conclusion + +Iterative binary search is a fundamental algorithm that every programmer should master. Its efficiency and versatility make it a powerful tool for solving a wide range of problems. By understanding how iterative binary search works and how to implement its variations, you'll be well-equipped to tackle numerous challenges in your programming journey. diff --git a/docs/binary_search/_category_.json b/docs/binary_search/_category_.json new file mode 100644 index 000000000..34c97b96a --- /dev/null +++ b/docs/binary_search/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Binary Search", + "position": 7, + "link": { + "type": "generated-index", + "description": "Binary Search Algorithm is a searching algorithm used in a sorted array by repeatedly dividing the search interval in half. The idea of binary search is to use the information that the array is sorted and reduce the time complexity to O(log N). " + } +} diff --git a/docs/binary_search/binary-search.md b/docs/binary_search/binary-search.md new file mode 100644 index 000000000..fbc27804e --- /dev/null +++ b/docs/binary_search/binary-search.md @@ -0,0 +1,62 @@ +--- +id: binary-search-dsa +title: Binary Search +sidebar_label: Binary Search +description: "In this blog post, we'll dive into the binary search algorithm, a fundamental technique in computer science for efficiently finding an element in a sorted array." +tags: [dsa, algorithms, binary search] +--- + + +## Introduction +Binary search is a searching algorithm, used to search for an element in an array. It follows a unique approach which reduces the time complexity as compared to linear search. However, to use binary search, the array must be sorted. + +## Implementation + +Let us see how to implement binary search in Java: + +```java + //let element to be found=target + int low=0; + int high=n-1; //where n is the length of the sorted array + int mid; //represents the mid index of the array + + int flag=0; //element not yet found + + while(low<=high) { + + mid=(low + high)/2; + if(arr[mid]==target) { + flag=1; //element found + System.out.println("Target found!"); + break; + } + else if(arr[mid] +Binary search : O(log n) + +## Points to Remember: + +- Binary search requires a sorted array. +- Works for 1 dimensional arrays. +- Faster and complex than sequential search. +- Uses the divide and conquer approach. +- Best if arrays are too long (large datasets). diff --git a/docs/binary_search/recursive_binary_search.md b/docs/binary_search/recursive_binary_search.md new file mode 100644 index 000000000..4d3c50f27 --- /dev/null +++ b/docs/binary_search/recursive_binary_search.md @@ -0,0 +1,126 @@ +--- +id: recursive-binary-search-DSA +title: Recursive Binary Search +sidebar_label: Recursive Binary Search +sidebar_position: 8 +description: "In this blog post, we'll explore the recursive binary search algorithm, a fundamental technique in computer science for efficiently finding an element in a sorted array. You'll learn what recursive binary search is, how it works, and its time complexity. We'll also cover practical applications and common problems you can solve using this algorithm. By the end, you'll have a thorough understanding of recursive binary search and how to implement it in your programming projects." +tags: [dsa, algorithms, binary search, recursive] +--- + +Recursive Binary Search algorithm is essential for efficiently finding elements in sorted arrays, making it a staple in the toolkit of any adept programmer. Whether you're optimizing search operations or solving complex algorithmic challenges, understanding recursive binary search is crucial. Let's delve into its mechanics, applications, and implementation. + +## What is Recursive Binary Search? + +Recursive binary search is a highly efficient algorithm used to find an element in a sorted array. It works by repeatedly dividing the search interval in half, using a recursive approach. If the value of the search key is less than the item in the middle of the interval, the algorithm narrows the interval to the lower half. Otherwise, it narrows it to the upper half. The process continues until the search key is found or the interval is empty. + +In pseudo-code, recursive binary search is defined as follows: + +```cpp +FUNCTION recursiveBinarySearch(array, low, high, key): +IF low > high: +RETURN -1 +mid = (low + high) / 2 +IF array[mid] == key: +RETURN mid +ELSE IF array[mid] < key: +RETURN recursiveBinarySearch(array, mid + 1, high, key) +ELSE: +RETURN recursiveBinarySearch(array, low, mid - 1, key) +``` + +```cpp +int recursiveBinarySearch(int array[], int low, int high, int key) { + if (low > high) { + return -1; + } + int mid = low + (high - low) / 2; + if (array[mid] == key) { + return mid; + } else if (array[mid] < key) { + return recursiveBinarySearch(array, mid + 1, high, key); + } else { + return recursiveBinarySearch(array, low, mid - 1, key); + } +} +``` + +## How Recursive Binary Search Works + +### Step-by-Step Explanation + +1. Initialize: Set two pointers, low at the beginning and high at the end of the array. +2. Middle Element: Calculate the middle element's index. +Comparison: +3. If the middle element is the target, return its index. +4. If the middle element is less than the target, discard the left half by setting low to mid + 1. +5. If the middle element is greater than the target, discard the right half by setting high to mid - 1. +6. Repeat: Repeat steps 2 and 3 until the target is found or the low pointer exceeds the high pointer. + +### Time Complexity + +The time complexity of iterative binary search is $𝑂(log𝑛)$. + +where $n$ is the number of elements in the array. This logarithmic time complexity makes iterative binary search significantly faster than linear search for large datasets. + +## Practical Applications + +Iterative binary search is widely used in various real-world applications and algorithmic problems: + +1. Searching in a Sorted Array + The primary use of iterative binary search is to find elements in a sorted array efficiently. It is the foundation for more complex search algorithms. + +2. Dictionary Lookups + Iterative binary search is used in dictionaries (like the one you're reading now) to quickly find words and their definitions. + +3. Binary Search Trees + Iterative binary search is the basis for searching in binary search trees (BSTs), a fundamental data structure in computer science. + +4. Finding Boundaries + Iterative binary search can be adapted to find the first or last occurrence of a target element, making it useful in problems requiring boundary searches. + +Common Problems Solved Using Iterative Binary Search +Iterative binary search can be adapted in various ways to solve different types of problems. Here are a couple of common problems: + +1. Lower Bound and Upper Bound + These variations of iterative binary search are used to find the first and last occurrence of a target element in a sorted array. + +Lower Bound Pseudo-Code: + +```cpp +FUNCTION lowerBound(array, low, high, key): + IF low == high: + RETURN low + mid = (low + high) / 2 + IF array[mid] < key: + RETURN lowerBound(array, mid + 1, high, key) + ELSE: + RETURN lowerBound(array, low, mid, key) + + +``` + +Upper Bound Pseudo-Code: + +```cpp +FUNCTION upperBound(array, low, high, key): + if low == high: + return low + mid = (low + high) / 2 + if array[mid] <= key: + return upperBound(array, mid + 1, high, key) + else: + return upperBound(array, low, mid, key) + +``` + +2. Rotated Sorted Array + Recursive binary search can be modified to handle rotated sorted arrays, where the array is sorted but then rotated at some pivot point. + +:::tip +Handle Edge Cases: Ensure your implementation correctly handles cases where the target element is not present or when the array is empty. +Prevent Stack Overflow: Be mindful of the recursion depth, especially for large arrays, as deep recursion can lead to stack overflow. +Efficiency: The recursive approach can be more intuitive and elegant, but consider the iterative approach for environments with limited stack size. +::: + +## Conclusion +Recursive binary search is a fundamental algorithm that every programmer should master. Its efficiency and versatility make it a powerful tool for solving a wide range of problems. By understanding how recursive binary search works and how to implement its variations, you'll be well-equipped to tackle numerous challenges in your programming journey. diff --git a/docs/graphs/_category_.json b/docs/graphs/_category_.json new file mode 100644 index 000000000..440450f74 --- /dev/null +++ b/docs/graphs/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Graphs", + "position": 14, + "link": { + "type": "generated-index", + "description": "Graphs are a data structure that represents a collection of interconnected nodes or vertices. They are commonly used in Data Structures and Algorithms (DSA) to model relationships between objects or entities." + } +} diff --git a/docs/graphs/graphs.md b/docs/graphs/graphs.md new file mode 100644 index 000000000..a914f12e6 --- /dev/null +++ b/docs/graphs/graphs.md @@ -0,0 +1,301 @@ + + +# Graphs in Data Structures and Algorithms (DSA) + +Graphs in Data Structures and Algorithms (DSA) are a non-linear data structure that consists of a set of vertices (nodes) connected by edges. They are widely used to represent relationships between objects or entities. + +![alt text](image.png) + +## Implementing a Graph using an Adjacency Matrix + +To implement a graph, you can use various data structures such as an adjacency matrix or an adjacency list. + +An adjacency matrix is a 2D array where each cell represents the presence or absence of an edge between two vertices. It requires O(V^2) space, where V is the number of vertices. + +Here's an example of implementing a graph using an adjacency matrix in Python: + +```python +class Graph: + def __init__(self, num_vertices): + self.num_vertices = num_vertices + self.adj_matrix = [[0] * num_vertices for _ in range(num_vertices)] + + def add_edge(self, src, dest): + self.adj_matrix[src][dest] = 1 + self.adj_matrix[dest][src] = 1 + + def remove_edge(self, src, dest): + self.adj_matrix[src][dest] = 0 + self.adj_matrix[dest][src] = 0 + + def print_graph(self): + for row in self.adj_matrix: + print(row) + +# Example usage: +g = Graph(4) +g.add_edge(0, 1) +g.add_edge(1, 2) +g.add_edge(2, 3) +g.print_graph() +``` + +Output: +```plaintext +[0, 1, 0, 0] +[1, 0, 1, 0] +[0, 1, 0, 1] +[0, 0, 1, 0] +``` + +## Implementing a Graph using an Adjacency List + +Another way to implement a graph is using an adjacency list. It is a collection of linked lists, where each vertex has a list of its adjacent vertices. It requires O(V + E) space, where V is the number of vertices and E is the number of edges. + +Here's an example of implementing a graph using an adjacency list in Python: + +```python +class Graph: + def __init__(self, num_vertices): + self.num_vertices = num_vertices + self.adj_list = [[] for _ in range(num_vertices)] + + def add_edge(self, src, dest): + self.adj_list[src].append(dest) + self.adj_list[dest].append(src) + + def remove_edge(self, src, dest): + self.adj_list[src].remove(dest) + self.adj_list[dest].remove(src) + + def print_graph(self): + for vertex, adj_vertices in enumerate(self.adj_list): + print(f"Vertex {vertex}: {adj_vertices}") + +# Example usage: +g = Graph(4) +g.add_edge(0, 1) +g.add_edge(1, 2) +g.add_edge(2, 3) +g.print_graph() +``` + +Output: +```plaintext +Vertex 0: [1] +Vertex 1: [0, 2] +Vertex 2: [1, 3] +Vertex 3: [2] +``` + +## Additional Operations on Graphs + +These are just basic operations on graphs. Depending on your requirements, you can perform various other operations like finding a path between two vertices, checking for cycles, or finding the shortest path using algorithms like Depth-First Search (DFS) or Breadth-First Search (BFS). + + +Graphs in Data Structures and Algorithms (DSA) are a non-linear data structure that consists of a set of vertices (nodes) connected by edges. They are widely used to represent relationships between objects or entities. + +To implement a graph, you can use various data structures such as an adjacency matrix or an adjacency list. + +An adjacency matrix is a 2D array where each cell represents the presence or absence of an edge between two vertices. It requires O(V^2) space, where V is the number of vertices. + +Here's an example of implementing a graph using an adjacency matrix in Python: + +```python +class Graph: + def __init__(self, num_vertices): + self.num_vertices = num_vertices + self.adj_matrix = [[0] * num_vertices for _ in range(num_vertices)] + + def add_edge(self, src, dest): + self.adj_matrix[src][dest] = 1 + self.adj_matrix[dest][src] = 1 + + def remove_edge(self, src, dest): + self.adj_matrix[src][dest] = 0 + self.adj_matrix[dest][src] = 0 + + def print_graph(self): + for row in self.adj_matrix: + print(row) + +# Example usage: +g = Graph(4) +g.add_edge(0, 1) +g.add_edge(1, 2) +g.add_edge(2, 3) +g.print_graph() +``` + +Output: +``` +[0, 1, 0, 0] +[1, 0, 1, 0] +[0, 1, 0, 1] +[0, 0, 1, 0] +``` + +Another way to implement a graph is using an adjacency list. It is a collection of linked lists, where each vertex has a list of its adjacent vertices. It requires O(V + E) space, where V is the number of vertices and E is the number of edges. + +Here's an example of implementing a graph using an adjacency list in Python: + +```python +class Graph: + def __init__(self, num_vertices): + self.num_vertices = num_vertices + self.adj_list = [[] for _ in range(num_vertices)] + + def add_edge(self, src, dest): + self.adj_list[src].append(dest) + self.adj_list[dest].append(src) + + def remove_edge(self, src, dest): + self.adj_list[src].remove(dest) + self.adj_list[dest].remove(src) + + def print_graph(self): + for vertex, adj_vertices in enumerate(self.adj_list): + print(f"Vertex {vertex}: {adj_vertices}") + +# Example usage: +g = Graph(4) +g.add_edge(0, 1) +g.add_edge(1, 2) +g.add_edge(2, 3) +g.print_graph() +``` + +Output: +``` +Vertex 0: [1] +Vertex 1: [0, 2] +Vertex 2: [1, 3] +Vertex 3: [2] +``` + +These are just basic operations on graphs. Depending on your requirements, you can perform various other operations like finding a path between two vertices, checking for cycles, or finding the shortest path using algorithms like Depth-First Search (DFS) or Breadth-First Search (BFS). + +## Implementing a Graph in Java + +To implement a graph in Java, you can use similar approaches as in Python. Here's an example of implementing a graph using an adjacency matrix in Java: + +```java +public class Graph { + private int numVertices; + private int[][] adjMatrix; + + public Graph(int numVertices) { + this.numVertices = numVertices; + this.adjMatrix = new int[numVertices][numVertices]; + } + + public void addEdge(int src, int dest) { + adjMatrix[src][dest] = 1; + adjMatrix[dest][src] = 1; + } + + public void removeEdge(int src, int dest) { + adjMatrix[src][dest] = 0; + adjMatrix[dest][src] = 0; + } + + public void printGraph() { + for (int i = 0; i < numVertices; i++) { + for (int j = 0; j < numVertices; j++) { + System.out.print(adjMatrix[i][j] + " "); + } + System.out.println(); + } + } + + public static void main(String[] args) { + Graph g = new Graph(4); + g.addEdge(0, 1); + g.addEdge(1, 2); + g.addEdge(2, 3); + g.printGraph(); + } +} +``` + +Output: +``` +0 1 0 0 +1 0 1 0 +0 1 0 1 +0 0 1 0 +``` + +## Implementing a Graph in C++ + +Similarly, you can implement a graph in C++ using an adjacency matrix. Here's an example: + +```cpp +#include +#include + +using namespace std; + +class Graph { +private: + int numVertices; + vector> adjMatrix; + +public: + Graph(int numVertices) { + this->numVertices = numVertices; + this->adjMatrix.resize(numVertices, vector(numVertices, 0)); + } + + void addEdge(int src, int dest) { + adjMatrix[src][dest] = 1; + adjMatrix[dest][src] = 1; + } + + void removeEdge(int src, int dest) { + adjMatrix[src][dest] = 0; + adjMatrix[dest][src] = 0; + } + + void printGraph() { + for (int i = 0; i < numVertices; i++) { + for (int j = 0; j < numVertices; j++) { + cout << adjMatrix[i][j] << " "; + } + cout << endl; + } + } +}; + +int main() { + Graph g(4); + g.addEdge(0, 1); + g.addEdge(1, 2); + g.addEdge(2, 3); + g.printGraph(); + + return 0; +} +``` + +Output: +``` +0 1 0 0 +1 0 1 0 +0 1 0 1 +0 0 1 0 +``` + +Remember to adjust the number of vertices and edges according to your requirements. + +In conclusion, graphs are a fundamental data structure in Data Structures and Algorithms (DSA) that are used to represent relationships between objects or entities. They can be implemented using various data structures such as an adjacency matrix or an adjacency list. + +An adjacency matrix is a 2D array that represents the presence or absence of edges between vertices. It requires O(V^2) space, where V is the number of vertices. On the other hand, an adjacency list is a collection of linked lists where each vertex has a list of its adjacent vertices. It requires O(V + E) space, where V is the number of vertices and E is the number of edges. + +Both implementations have their own advantages and disadvantages. The choice of implementation depends on the specific requirements of the problem at hand. + +Additionally, there are various other operations that can be performed on graphs, such as finding a path between two vertices, checking for cycles, or finding the shortest path using algorithms like Depth-First Search (DFS) or Breadth-First Search (BFS). + +Graphs can also be implemented in other programming languages like Java and C++. The implementation follows similar approaches using either an adjacency matrix or an adjacency list. + +Overall, understanding graphs and their implementations is crucial for solving problems that involve relationships and connectivity between entities. diff --git a/docs/graphs/image.png b/docs/graphs/image.png new file mode 100644 index 0000000000000000000000000000000000000000..6398c1d9867bf2cd8ad8ce16ec798d1d8d8b61d6 GIT binary patch literal 64486 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Μ39KGcVxF+1;wI z!j2qzKtHGc_HpP}5pRXw$HfC*Gs$D+`J+T?>mNoZwl>5h6t%bFlQ4 zSbB3y5gA{l5z8e$!)DN>`{!PuNyD9Qi5?P`m){$@32yiJhh4W6kDOnB*B*X%{ZN*$ zkvV|+slW|xoOXMS;^g0xQC%~0L+9|^jV%B7Y1t3uj#LU9=$wdNH(W}67garudQOOe zseiPmv+(WWhyNn)_!cU5q5rY)w96Wu$Q36)-3;onD`fA_W^L(0Jl{-yezSOhELG*H zZBMUa3Z8DLA1}!*jW!M$eR+?_tj59BNO*D0ra!%8CRXsi5+6@LDlOR)+hA-yjV`j8 zr@LB2NYKVHqxpd6a17IY*>iXB%w^Mq-ckZy!#NFA{Qp5f{r?+*`u~0<_J3ns|G!|S z7QTY5px@m1WgPPG6~E0}7}dbv#o;mh?}r0M1ocjZ&59BYP}snS4>g4}s8o=a|Enl3 zwymhhZk!(MS+R}?5uq46wV1e%|2&Y8I;1-FDqh%me(|h3BMy+VZMK@he@f;CL#X_a z;t?+pIBdl!UsU8%jQ7gnzmfU8=l4589`-DSjAtYsx|zOhW{OkUY{tk8M&~*PBLzqS zUn(EW87ejCo4z3D{H4-YUCz1xNOdzy@tA)t&SgHqu7$?)3W>+R>Lv~c^``lgI2Qly zw72xPO8RdwE7!9+6ssQ>CbPlT&e1M8H=7e?e?l5TZRV8|(t|wypG5p9loF$agY0-r z(u?>TwiuO&ZTXJ<;L6gEFOI ztXA$Bdt=gU6A|+6m5j?yN-M(GG{80)Lqi0jBru4=cn;KsuWrihU6bwlgkZ%{bTIdo z&flmr-1_|IR8$G~LsI7W)rs_rlfb2Nsh{l+I7$7lMQfhOKb605dF(Rxu zLajSa+Qx>Po={aE8Fe=iC7l@}8v!0HpN4A?GtrEjy2Yd9XSO4M9c@(R*yhAEM}%<5 z!9A$Mz;JygCL?o8HKw2-qn93i9Yup$7;tQ97a~DWDA6U+Cm|Su=@ATwB*oN2zhh!Li{NCAF$cJeDk(jY$xm;#xh(6NyE=uHMzJ~z_J~~saEl6hXB>Lqw>Q`%bkG` zjc`E=?+Vd|HM6>3aQ?~Kx_|b_UC%t${ggPH^ zr}o>xTMR|$6(%WqQbG#(`VtcV?JSwI{ZRvzFa*j!SWex)48&c*A?o3LO_n2=(S8qQ z7B&w84XP9jp(d^k*^$V)T5>6Mdcnj zZ@TU6vA%sP`efSJ&@@;%HnAzg-!|JL_FP18{jh!jx_VTcPWGWYn; z9g&2%7?LxxKHu89xHvjA^rN^XOJB?p$r^j-=%gjIq5{-}H8molB0}{hfh-sIbeni*IQ+sUL!rrmOBU>%~l<~h%3`ci` zRdDX$5^>I5*l+ErnMse>;)CDC7(U+Nt@I{{!smq`N9MW+AzC=R;rTJX4R1LAqxT%HJ|yGiOiEg#N+)fycilhQ~gB z`Spe`2rK3wtPVJVsI3-;GRVJQiQ4gqqM0m{bIs|Y-pp1n^ zO}~J*Si0=rs~K~T5Hy+~n?>EqYV7B?{q}2H%$2*ewcj6@n9h|;^0(46njf+XTtBr7 zntA(55ag-3j1ok8z7MG#PHq&7(Bn%Z_=!S4XUA$+%6J`B&o;fjE@>z!T2uX0C_bK$ zQL~}nhUSvvBhIPlUu&xd=_d8=N5kc!vqqsD)al>Zor>~F?@y7w{VXp?)9U%mW~Z;a z^2x`i-06K%FBX$ZG)$Iqto`nNS}P027a)u4E=Y2JKGM-2Q0qiSPTKT$*dgC)^49@C zF~riOnpWZ#-C{cdpUBM2Oiyq3d4l5d*?&e;pr20 z?D}ep!w7nz{jz$nV%&p8GTa&Nagt_x-cgBjtfC~m|5|seSEQz*Qe>Wk0{Vb#q1D(2xg#s~ap#U0n!gU;`X^ zrz6n_{K35n?#uXiAZP|PE{tNp4oXT0;HWfBy5%}aJ;cZlF@p7yKoxX`f z2PEi+D320+T4++_=nDW3-4gN zD=iN({A5(BsjA3jux5!r-TZlWa`ra>02C)@n^O(VQ{wuN-sEQ$g{jnp%98Wyz7{KigwL*N=$tv zWTMQ-fu`2TE&V-vcyz548hS>b`(YU;;5?FQl zLvY*4H15<_=5P5JI^hABqn{JCv@arBakB4OPt`e4Ad?D*#Rkx*!4CtIqA$OmmF8o# zv!TT9;$?~ix)@03Bf#tplqeXyIyvzs^eUpGpYpCBJO^74=;&e8>F78KqGSc108wO> z1S8r*)Fl*2g_`A>I$^?HVl$eOn3TL~IMdiKkLw7XoZP)%^q!H!jq!<@g0OI!pgP`C zb&<_G>_CSby_t-;6$IzBl>QrD+!lV=o9G&IIWf+ByLHb48@mo$7&^@T%W+g#U*Zi8aQ zWRb_`Z~qL6nsum&HZQ5hAm!`L^{x0z-+uX0PQ`H-x_`%+igWSwid&deB+(qW7hEuN z{CC|0oP#^{0Rdq?J7@Rku|!dRV94d5z=3pex5X~=ytZt6Vle(G9w#k@(`;5J=U$h2 zIX&krBrFWzob;9aHNx;$IHbuqnD!LE@P$KJsloQ3g@L%S&DFug+ zVv&A{kFld<*8draKAx?$wyon}WBBIJ&S9&FX`#=@_EYIDsgqHSv^r33s`b}QTq6j3 zPo?lhm%`2K-7Ezm1x1-1v6wRTC3B`7sZJ^+0rIQ*44)3UWi;JUgNyVBP9J3HV_mD% zLvaf9OxWgPhBrDEE$5LMP;ZaM<=NVpzFeY_qh^wH&MeOPyt1E&$S;sbP!dFQBnpPu zCpUgd30@5}r$iHH&sdh06f0CXavn9G$(-pwG|@IST;KC_OG-6IYyBW=!yb)~ceZk+soApgcj&Hb7`M5F#Yj7W3(_$>I+p?0md#@3udePH z;qhYT@wLf?kbO{5c`o-&)YN<>yRMPh5mhPT3b=!eLNF8QRHgnYT@McaxZtY=Br+0rysGJ2&YTYhCrt{H!WR7 zh}1lVQrDt5IVz?rr!~p$PA@7bihs`~JMN9JS(_8G4U5}W5!KM`#{j-m#1c8OMe^Q@ zJ?#!rDsuO-H~B63)QEj`-UdqYYq{p-`o`o5ZR=6uNy@lp?dW-hRGx4unVUR;o3nBM zKHa_iUBR)vGxxKkJx6dNR`frkfB?~;z~(cf?^EB#mR#yD;nZ>NIPtbPv2b^PSFSw! zt_2+D<9;Fa_yzXa4VRE?dZ)*Q#U;NsnkOcQzkV#g=GK_KUct64)hTB-;qzp^w=LYm zVpaX!H5?s5zbs5oR|eBI)*NS=o;qk~#P_2qMt(d+ClYKBFd$Ij1adt$5tdf5$PNT+ zKN|*<^~!c6chji$Z{&4J0J05zyXR0IjG)lfF6VS*#&Im%mFZj^g?3#?LyH=25ip;? z7<%W{*-|t39Y9}L_~ObZfbBsUn;``{m+n|Vp(Q6K$|9<3Yq!3YzlC8TOwM5i0zi>p z&-SElg`&$)x=yR452)F%{s*EV_!mGWXjDrG=Irr}duypX$KJzB<+ns9?TS^QVt2AQPb7Pv zxpWQ&ex4H&sSxSUo+pDG_w*B2ml&f5WMm+w1E^D-6ef{3tjxR9k zR=dk|>-0JI7`hQ=pJTgE%!`O&q83EAKc@@*jdo+wJli)qx}TqgHP?ia)E8xEvScR{ zP%W0}PZ>@&xo(#?pLP09e=9Gy-J?~NPYTD-2d}UQ$5X2W9;zL05~M3I%46oeq+_*t zjX#LVG#viiy9-w~5q>05j2IIYc0T{7#poMBWYgXV`qLreOcKyNImdTqoA(S z)5G)%khSF!huSBDt_4&N=Zhz>(aK0kg(D>Z;F_zE0+3^vq{9xzTbfzy{wrsaU!?9a z0p2{lu5hb?Ul^1fOkRu8Yxzlabw>+ZOwF!4>p%B@u68;5`25$oArO^+^|@hx*0FmB zXYZQ0qAt3;?7d}k=T?P;;3Fs3mw$6=eSiP1`@_NEB%U(0?oeQP=h^f6=K6OUo%Krl z@1mQ81-AbhJ!yQgv+pPn`eudPd#P|uef@8{v#r--AMM9`fi^q|5-vOK`FpkxPj|kv z!UJplFYu(2L@kn8Z1|q`6B_Pd7JD*QLYvgX34EMf+1)<}2O-(tAk{)w_p=LQ+M^6- zJU2v=%D9SVcVtAwxs4DcRw*!yZimM9QoFfI{9r*+{!ux}c*2wa@&xTYR5N{6zQ*)F z=KQh9uZN@{YQ@D7_!~Wcu9+six4A>r;PI=lw6Hz#qVU!@2XD}d7dALI1z|pdU7(_( zyJfQebJltF6JA0u5kpP8?BpHq{o(3vl8<7kHQV?~VtIuk&A0TmwI;tTJ}z3uXOdea zrRt8+*VX;_SZy$++4}|DN+l&7k80ly-)QLP+P&ghr^Rp&Ng#)W%~^Xp7NkZVO?zoz z;Q~#O?`tx8a=@#cFZ2(_9-J@O*M?yc`v>$2`}_MpC#wsAh`X}qS5HQCp!3Cagw`tA z2G*q)e>^-_fYuvM8j4nVgnwrOT|felz%5lT-7n(lRF?|dBFgyrT{j=MNC-+{*1xfe z*Eqt7^|i!u;qXX%Jn)GohEBwBc8%v2dkkMf@LS_lI?phZWh-gQFw-WN0}k8Se(ngV zia*^w1t3+Oz6;-8Km7S`va-TaLy3|uknoOL&!pjG z@10(Dx#g}Cn!pAw>4o;eJAW?_8tdyrNQ)?}2!~-m1JYB#3I;l#2kvl%hkkfC_igME zL<`L=ZO0dm_o%6fIQ@)a3rQqIGqwb?26G^mM)&)6rw>{t1brsF2aF8#Hc8?}_0SD8 zy;7au`&B-F+c5i`)sAtYcw@D3lz-$E?VefWZge#bb9InBfoFuDWYE?NfbImF(NZ+K$5u) zx<+z0n7}pO(>5~EHB3_Z46pyQ`O>A9A7YwFPXnxQik8Lx`e^&;D%R7bv3s0Ne`z=H zQHw>LgzMh!@nKC(y7Cp~_eBK;5z1W*f>JNqMoBMT6Bm}O6nn9x_XJa2w)Z73!~3+Z zVz*+CZXjj6L>sYLIUGx;^5|AD%XzS@daM`J zMYP)XsD@wDdwb|<+KN|DTg%=tNG+%pkIsd$=P?QZNjb;SYiRt(85%{n{bl^uOh1DQ z33jf=fl1932Pw7KZrB+{3s~YJbw!So{DP z6nVNp%{Ul_#VkfuMx$*tWcz~`7Sv%L53@w03E8i*~~ z`fi8z5YHKN3;Re-2!1r57!=`9lK{ZhidwLw15LP{K!ttsJ%itnt^^9*EAT7;00dGIT!0V>>X`U9 zZ=eQ}L)zgMlt(S?&@g)#b@8=b&?Dk-p3NM5nxKP%+R#aMCSdib~elR(w5UKm-G7(zpft3RH`)x1fioZg*qjI}B!DeJf z@Pa25Y6hF+zN~j<=B7OYx@Wd%Q4N3OGGbmFV#7k{Ld+$+XCq3;Xm}1t!g^yb*2Y>= zed(_IHrmLf8b+g1;e7Ar(30y@_opXIk!Qb$i<=7Suck+}-skuHxbjz}Hm%^XMXe|-$z*@vh)S9b~k#IMr&gx6?MA8W<{O|^Ebm0CF-_rBO?*V?Y{vJE<2Gc zqdC8gei@zfcs}DFdz0Vc&Q1Skg{q|FtbNgrytl6#U{j}!wY1IuOhxH(7uHd5Dlpzc znaX;bcJs8qv59GmzkgDkKR2nL-q3mQ{lokKWYoVmXN*Al>MmhzK-fH2Z^0^upa>5RA(9I%=+IV8 z>0dwayp%pdhTf(B&a+jt5g66$P%d=mhP39hsnjn^pZD(wF>6ec`Xhrv{P@uH47sZ6 z+A)eLpG5?3Q$=8Vdi-Glh2#&}!DEfNa?Ep>K6cXmp4eANS6& z{OB&B=z?niM05h8Q_km&gZ26r);>RN2Dh$u>=O3`4^%2d^N`lKGUoieY6Tt$kY5)-W`*vTEP@!z}GB zMosLOaK$pU+v@MXf8Tuo@;~dvk*0Z`f(C}-Ue-t{N(6zG!D(Fo@%yb8y1!e}hAWoS z?#t4n*eo=Kkn^{5(ue=kc>J%PIa*wmt#M|hmqNSS;bozq0ygh6Z(?e&SOT1lziQ?#35G8CKfoGbhhjn znNzSKNygIAy&d7+#0CW6pXK>256S?m*oRU*r$7ClY&XIHh~zl@68Ta{TKW`}3II!k z?t9|b@9f>3KPmY*$qpjvPop_nab!Nuhq=P5OIu zHpAWSnE2f_Yea*=VNLxqT?aACYz$jzA&5C z2wR;oP*Fqu^$oAid!-|(ELC2=8ok^$6hfqE#6}VCc~7lcCg#VJ*{)7H8uFX?HKC02 zQTFI|RC=drWZv}F-S*ggoypA|GcazI>z=+-a^$Q|rwl+6`%1)xrv|Yb{ zaB%MR>5OD91ySv8H%Iesd?^T!IQi95^u1{@lair?ytLiX=K9E$xFYf(!9`+3uplzy zF2|)lFP;*2u0p$dxu}R>o2&Is78mX7VcNBmtyrZunMQfbJYA6gOH{P*sFZ*p{s0S4 zvAxJel$Yty|h^uQ&JiGGz*4*9e$pOr(=FD@X9+qZb*LEHy+eqiNFWgA8^Sc+^ra!L1 zEh|qihmqHZoIV996sMYcskRb%++6tknAl^d!YTF-KfAan$dd?M5a!|2PPH=@SCm=1 ztqR(IeRR9x;h)bW>kSh}vwy%YYuLhIDSBL+rrW&zX{R9(M`5fKtb(^V;&s{^o|H8@jPpX3?__xdy zyKl~kt*6O8dii_O%tl{&y7(;&=jnDQm(q@Xyqzoc}P z6Vz)k00Yq+oZh02-!5?)Qc{>ly0uxQ`l*SaL?1g??HrCnRnXYyZ z^b165mnrWzM+$bygy2PufN^o0xMtK(r-Tj$6;uVxZCM@KoXD5^Z{Y(2ekzC! z*ViAFj;9Q+d^Ei^`YyneB)nWz-3mRz=T>(-KRn#=UmAIk_BdI@0us$Aml_f!cTXV0 znD}OQRbKl_@l9o2>#Wd}_5i@M|2)^&t{R%fy7N(i(#9&P9%({C>IO@p1(a<@ZSOr-!!NE^j)?RrkaQJU>Zhc4H($SQgHUvM^Oe`IJuFF~@YNu#d z#R@C39eVrK?5;bsmCyQJ(+tYVDxcer*QUE%lGRQycg-u^?Hgkbdya~`x~9f|`;i~Y zc-jo&uo$a9FM6)~bB3z42OAX%UJIKzrNL`8z9biAT?b%Yu+CIhKLs=;91&pjI)@Ig zu5u1pfPa@W)U?#&KYLFOldB}zT|4?C?qQ1U!HIz_ROCy-f^XE7sgyLU$MwY2E_Q7_ z`{xt9BCvy%PIKYn($e5|4QA0oiurLQ#$uBeUUzqgKm{IccSnTXh{wO3j+ose_dl<^ z-Qm3ZC13xEn;P*!1`7wXE1~N+DiSG&9Y452{$T-w4rcwvg3qx{+dF;7-P>Xs#^DQM z;YAg}6!L`i3k~)E4g=*X>VD>o&{Z52MUNMV2zjxkykciFw8H<~lBrG`!`{8{OuXos zB1nH}xCNH^bXjF`QV}kEbIu>2?{jo40>C%GzpuXOsgM#8c?M3zb4em(NWdUMYOt;S zpZ8zM@0PLz--YH0{1U85dP>wuHPqDyB(O#j35pDlpD0HLx5EV1giHgZ@;{lck_RQ6 zFeQA7oycbpx@}J)LahHoENk>(g^R+<;qLyeTTB^@%mw*{V^-3s>e<|_$piLX)^63K zLR$_K?z?@151;SkiSim(BIWuEQj8=rynfn0d<(;j-8l&v=)CEwBKQ-#r=Z<7G6GeB z7+4PY`O80i5Cbwf$jX6BsgO31ZN?vt3=)^WCz23rUC4=69(qcjfh0Tp|TL(*TOAaOY)LXI(LlXCvLLPH4`tyawS zlCGYfuGRM=OSD+6v0!csCau35!7Svc*u>E6MVilWlb0)0taeXNcj2nJe-L|$r^G9C zEpF|TlKE z`ZMH8v>{mpHRsO(msB=YdP|VYgC%Ne>Z!>?W8?EIJYaQ$d=tBPpX?G9R?N{Et6+mE zb(T7l+Y%TNdU}zHJU@`)u6=n`+(?>=ESJ(=`KvMe2P)`TxpM9dT@_PysV9iUL>ztK zr#+^~Jb>latYkR)4W~ZYr#~l)Z)cPLmB9532j7 zcZ*|v>b8yVhEIK}0!bHYy7eT(`b zP??*DM-fedq=Yg+A`LX(^(9Y0UW>j=VtXAqZ#(;?>aYbNR9In=)xPYLouy18lwuc) z)e`cW{gl&m&sO`z0}UfJjR2FVz)s~n5!m9r-&p^7Z@6x@aJ(|VYJBe59g!~f61U z9~B>T*h?MikIf&KfXoIn{h$jYly)KahK5(5J~8Nb+b>pnTUc0tf*my4&jBykD(*o^ z$S1;&VZ2ZAMg6|62~z~tqC9-WeoUP#DYt)9*2^E={d$i7DeC^R>q;kWrzylQEg5ZI z%ddP+8?&?jt*8k}bFGJBx#Ao3CCwin98EKl(o&MsOG-=KB+__;!Zl(SNZ6BJTpRE) z)NK4NU|1=D-!y2>%!PZo`g+qF>2*zjh@*!oLwS7Pj=QF@ao$}=F3eU#%QGO@AIF_N zK+!)`Q2(gm&nD+YGYt_VgGpD<>hRdcUaYqE!otB*)MEAb$3v>5?2)>^USDsJ1oA^~ zZ;5f!&$6ikuA2dVuf}XXCjtP^(!EsvL7)B*>8o5G?JeRCPcyUg@U>R@t%*vo_Y#tW zb7SK`KAVYJ6(d|`wrXpi>E#YiOT5F6*!|N0^hxf`77b8`!cA90#>dfQJtF=&XjW4 zH&zBQGVZ?xG>;vlyRE1dAw8jj+adXlCfwY4Z@)muR}7o3j?SUCH0K!P#e!cF#tGkM zXTcPgiO>0qhNyRjkBHVYVceRYGgjkf!TS790tQBuif;4(Yd=yKy@oXjzhxU=_qvXv zRX3RYcIx6Dm*&cWzF{9{7iJwTpW8x#;~%gY-odtRJhO}#d8)l=H~lzEV*i3r(?1d# zE8Vm1){Xh>Dg8D?RfqVF54QKkbOehU1&$#73PFHn>_`YU25Du1Rj1m!SCEug5TjQq zq0A@WXd+)+t+H6wlAss=BA3H6-fqHMI;C8!NacsDQJ=NIT%GvM&iDj45#!Jn7>h4! zNsz-1nBWdKe|a=9m%gjK@sjUH2-C@iJaU#qU|_sk=s=?J6ewbOF*_~dx`H_`XrMvDiZ{*n0k79us0=BFE zpZ$e#e3)QX{dp{T&s*;*Nn6+)wAxh4t?NE~$oxV3|M*U3oX&$){s#djBm!RPIt=ju zr=OFfh$P_L(b3N*LOCX4mdnOhNCN!@_ehc)b8&m?^&u4K+z=WQwRdsuUv-4}_&Wr> zc#;GeL)$4d9#rmFp&6?&0$mR5!Gc7nVEVxFsz%EHJ}YEVsv_0feh@H~E~WnKvubNS zYyb10ZQEzy)s{l=Yc?b2tQTW?;rv)_wd{L_hB1Bb+U97&qg6p}DHSA+#~QF&|0of| z;i})+E<`cN%FV*|O+32S-p2HctC#l3+#QS@E((hlmudd-?1g_z=J*DUqV#$h#$w0W z3RGhR-gu?oH_E2O-;;lQbF22f3+L!GuHZF5HGyjY-k)=RFadsOwrthKeHS=Of8Zd< zaz8wZ>T%_SSu+SmkjzU`&(5Mt_C z7E5!+%p*JKZ7U~WWUMU;DPn`>8efVkoX=Ezj}3~it8X&bdS=*dME;FM+gGWOUgWqy ziG@>%^T?Px9rC_0{OYj_{LA82R|zatY1s`#Xl|$UXRj%;h1!|(OEu$m>$yV(ZiS}4 z5_6=qvcU26*a$|ei0M#P8G)9%cIt7Zp%m|3F-qVxGh{ISVfSf~^~a`dmn~u0efec=gj`1#076OJ`?r!N) z4;L8mdofgt_GCN07ssk#qEizyk`T9coVuq*?oZ4paUDy^b0&8W@Z7SBQG2UBJn!wr zJvVeS?W%xSJBcx56sM%|+`3s@oR1>dNo?*#FFM`fGZf_6m%D;K{pssJ{ze)Mb1IaV zO2HuI1*W~U;5-OMb6REONMxKBC*MnLG5>G%hN3EWaZzgH`<2nvZ$E#o;zFVXsh#5q z2@zv7BWqwL!Se*ua9~2J2Ys;pSh+KnqC=I z3@+-vD@52DiN4G!&si$hh!oNj`Cwh^=$xD7hFjPSWb-cjZ00U%dfJwE3-oi{;Z^u1 z+_W1o#fPR6DAg~(atRj4#jrwF6ok2mbA?(6T?KIRIV~5a?6CeY=A}E% zFLNU~Nm%j1bMprf5$fS58A-|5f#oz2k`8)%B>~Db1H(jP<87TwW3Hm(x%lf$O}||^oVT;G z8(aPI(&Jeqh3D+Tv+;3V09C`=Bblbr$cbi3f$?V7hM{Ty3N^dP?UfqIWu@FIcTEi| z*Du}%53Ch^AfG7svA}$b@7mYOIPT|T zh3ff4OK%vm&?62{VgRmEwE537?@DBeLcmA(8b={JJ3AqR68I~??+1~KKoV>xho0Vs zJoOQKsI_-IflBNn{g4Iu>I%4_VZdIdHkrpwSRP7ELiqgPtayf;vb4I*9GAIpl~P>% z#}%ikMxMf(k?l2Z6`3q=^NZ^WDspogYg!E~6ls~LTHP31Qw>t>$zIC&4=La9>lE9O zQx9l(y_iXNbups}T+5{&eLa+|FLTl zvjG9pLrCMHfkAqDa>4r|$45?!d>GuTN2Iw56Bf~I-4^BFibd48C#S|AnCM#DC66ps z7#7WcbktQbf)Kma!L2_4FaT#RFZ|)*0m;|entdA|z_P$6-0^Me&p+=bFg41u{P^<^ z7!hzrPW_S^RG^aHuKLt1<8XKXwhd|H9qp#h|MdD|FfAB)dh^`2vD-%2^7T+Ud)N@vr z>0;J&yzJ|^Q6sX9SETWA+oio5?x23@n)GmaXyj7&{Ud9+TUGv0!+# zT^wIJrISx9ojzuKiSy=8mCg&v_2}=fJ>La*DU2s1wAB(4GR@T9q9#rX^iz+e^2G7W zMb$e|V!8DSxqF{ATxX>Y>kNAGy=KZWo+iFUHnR+SGtDf}9HK}8bivZ1!v*;iS!hRK zEWoyU>KCnId40WM3>%9ar_yD-Sp=$!_7WHOzN8GY*z3AHn}d-gUwx;9c9%IbW9MFD z2!*@~)_-vM_hf2va_yZ8C7rZHMh=zW&g2kxHZwmeuQcQcAHilxtM~YX60wt+kA1Yu z{KZVg_vW2@fQUK|If5*JW8hSr$G>#}b0L!Hv6EBaHUfB}GKkkqpqB-ky*s3((V2Q? zy?xuZvge~u^I0;6tkb-qUk|*lk)45oO4qKgvzG?ZvA-~Q|8$VG&U2b-8*LJZ1-js%HoS2m(1z8%9Xin%1 zYQL^?iO@|Mt;$S&xp4$qnDiYU5pfOZ+eA`_|U_dW<#0bkDPf8H@6BveO`#YlSsp ztr`3oP(GJXV0X{8|52&r;byj}df77*7fkZu3aeqV)32(WhB3Fz5dy^b8&l4IK?X{pp@6l zkUlxjQUFGtnCJG7^LQqhDJ8_m`wbGXgjzr!Fg^!RhzMqxmk@mpKzKbJoloopa{4@6 zFUxE#*bs~zDpB{eEf<#iZ$CNNO`A-fd~8(X`BSgOf`{xV${toGoU&{9RxDN&L>PGm zdtC(vN^!*zw_McK_2E1FJxdO?PUOb}e|+bMG#egXIOG8blCs?3h<8}w#YT=f3E z-ckOb`K6SvmHE!7=WU18nQbv-dqDvgSabJ$&wNjflve`5Fsq6rjYUYwKQkyPwoy_1vLmZMg@x_e>} z^<#af$%ATX(=w>T?rFh-p?${mb-KP8J-*anWVBcB`%uIhXH?WHBz!0E-OmmE;L3rZ$=Y}C-j(hC zlh~sv=`pvW@7g#3Rgr^uqxa9Wg?y`?PY5D}DkFvGb=Eear?IOTEiysc|JE2go{>~^ zd&MS71&N_z9}p@j4Va42kzV>KQfST+-N_gvoR+w3vO(fiRxuZF@W#6$V?p>Zd79|! z55AhI_L6~tPV(E&j}QN`wzbu3dg5KfaR%D6$a6RH&R4zZO)S8eEh3|}`G|(gR6YA# zR78i4TU-AZ*QukR5YV>vV%;@lB~G~PiAz2ryMPTDz$a@vb&4_yK8JIgVzwM6-6n_qx(M(9LB$kyVR8D z%SE;C?BweRSSPEDKW$@K91)>E%;r_Vdt3kaZ~yJv4`5p@<6`0JYCNJI(OHmdyDQ#? z^;dNLkXF&(5r%IU9GdHQ*FbRSj@YEf$zRDWrYDaaA(*Uika>uV3e`%2-|FzE+>hQd zxDzN*pwb3_Bdp5+o#5_XRa*Mw(Ic)j&9H2JPMX%{ANe=;-+1TGcIKr7WE8c5-}7ui z=G0QjE#pE|9%;3bjjiq3dgg%hvT&ly@KvV2oh_?2!us|pDuGItn5vw)&)I=)|I6$!k+@nIN|KuP#@-RZ1 z?N?Ti+jm%2^8Ze44Xi6DXmyPEY;le!X#VGMRsv}b=fMO`2gOeS!tIbuXqwPE7_jj9M`XOV(A``Mjyacp7z zb2Wx+QK!29Syj}ji`+Eit`8B@iozBpdD?ldE@hnjy!G;M{8w@D_rt&AwT@F)iC??V z1moJ&!qn<>>uyVH{eY1x`9^(~{nZYZbnn*B0Wt;g+k))vV}Uo#UZf*gOW)6*HGh>bg@ZcrtWd@ZCA*r+GTTi7ML)!1@TDcU2 z)Lr7gCyNnqYul0bN@8qkD(?1sy43V^EJv;F`&sOk@5vF6Ul9TDjOPwvrh(YP-W%F(-{DCz3H{q7-^-7-wx;X4$ZYUcU|6-oq8P7v=cUvRK>r; z8=PR&MZeh>Xbx#OOu$-MkvTg8)Qj)dpO;&Mr#}ZVG879V4vbfRdf+IBkzc@O}u&BB< z3=chYO6PzeNO!k_2!eouba!{dAT8Y?C4wT|UD6#xN`pvBHv(sUhac(>FNN8&XRr0H z=eh4Z3mZ@pK*?vMpZ528Y%>K4oyW}-0GGNQWNE)IbEK0zjj*Rul7Zzo*;(4TwZ1RQ z3d`TkBnaj+`W$)OqE?sP-ul#2Y`DHb{l%A}s^=J}Fr2TvxPRm~Gwgm;8$6tF1Q>o>i*CA7d@-qC+C;~)KkaAA@KV^g5H2<5@{N)@kR!56BY$=4Lp68@} zEwaq6AsLi0uKzR70TI>ZIYRYu55{w-M z!tjj#1rec$3-U%ZRZ+^ISt@B7%Qt5Kx#wvm`!g@wkcdL8tvij)>)IMKZ)TWF#o9I<_8P0OZ=y`MEn|(EbgKzg{+8<;KB7P8e!ghh{G(8?IKz zK>F!j$qYCoto&T!9_P>C>Pwe1<(IS2h+k7+a-Z+Pe35&=$YG< z8{h<%rH^rmLEeyP!QnY{zspZ{I|o1LA#VYYUUP0j0AH+FSRCCK<$xYHL@e@ zo^{iI94818-w!kaTQukm8Zp=wnC!;HY#Tj*WT2s+2`4 z$tpNgW@m@%LVL~eHuA&ihRD=Eer!Yem_6BOp7}XnR*gDdngMwe!h{s*tjJU*vr>(6;)aOWVZ>G6!%fr%k|sgDfZV50DVgT zEW~Jd)u!$Te@o6r73w9oyr2l5zrC0Is}JBER`?U;DFts|yuc#wVUn;Z)jApkVn{>) zh4T!1i2k)>tMR=m_i0;iKK%Fdi#cVgJyr9%um=;7fQk$x4=Ti4e*LtyJN1he$a({O zVMfLW(ALn`=ODq#FNrI%{yR_+6WPEs3&S!O10S;g#s2|y8X%P$dw zzr0*zKRP;whi~Y-?2}(W@TorqhRTGDhP57m-CUo#M-WO!AU9|^JWZpk#dg@-Zcj03 zwN$UtM-P>Df@Wzy8?m?hdv*VXLCj81rbnB-j~vwSz_bZqt+!l6(uTo+27nb~Ll@J% z?oK1uDTV=A9RyH6(tGU{fBR4K$n&kr(8=@uXLQOs9O-F4nbt(gvK7v! zMjX9P`Fwl2vo5IhljE$@+qFh5D9TFiJSzEo*=M;L=P4TUHVy?c3IPrYjNU&d>Nm~$ z+3a#{N-2~I3Gk@DAx^x+i6TeF#@@62M?zFV{D-5S4G0hSjoJ}S%ToPiy_h~v+b~8f z*H!^m3cxn*09@?ALuLmq&OF@dx$yN1ncqeJ4mFA_Og^aciXlvdGSGFtS27$X*1@lt z*2tY0guB(&^9yStYgvnF-mloPvlL=-q>YNy+v{G=_sE;K)mvU2%Jc4O3vT{Q%K1gm z@0cCGf_Tekr@;Un)%~f=i7clUg+v}^u^<``ON0!>!)0ZqQDYV7t95TnFOufEHeywT z*wJh`jTqF6lQ)HDY}^513`Ak8ODDEjaul8V>Yq&u5-*DlNYu;y1^3Ax!b>CIz60QJ z0Es*S$FaZKe1#w(vdW%#KeC>5K_Fk}``)rJ8c8cE-Eb-nHWDbC1}QeS_1o*x#?%KA zS9f@^bE5OB%mFDNn6ylTO~%`2Jzw6cAdCv?%iW3mJ5VP%R1;L*YTCF+hsr}k@(8Rp zeU}K9AJrA-`pxu(x62+eD3;yDg`(ek~p7`%jdn^J`lWLI{G2t4(SxMiZvS`rzg60fM5wb znb{#yH_&U8gnqxFCWq*xet1TL+uiE5zA-(Wtd14cYsC~iF@4cOhO(_YZ{vgzM1>0k z;>fd=A{j|Xuq8*?)4r=~+)C>+^ZdtD%g2YqNE??`v|t5HJulk~a>?o9m^T1f)B}7- ztk_XZ#TK+w_$YE5=Ifrv8s=5L4fON#^Y#|0RfWfV>1{Cys2`X#9?*vnPF(q`qvDX$ z7yq51&FXPN+_;7>&l963eW6bq{-*MQcgx-;O%B-2b7CN%vT2#Y^2x;R>=$+V#%69lqV<6 z9^Dp}f=ge@G^mI>j-N?Sj?y;&wP0$k(NbU)5D>Tk8cR^u{0}z{@|}1kt{za2m0}~u z;pos98=Ux8(qcqNU0~Ikhy?2{!y#^v=`2Ea{!aE18bM_)1c6MCbBk$@$7Lr{O(gq^2<$HW*n zcGf{I_WE4_JFOI$6Lqe2f>voU-?s`pLmEm-ED4t^JW_Rs9W@AKK$3yjA&y_q#?gVE4G)3_K&}J0ae<{%t;*9*DVFG z==$`ndOwtSNCJ-;c{Sy)B70?2F|@AC7W~krs#(Sck*a>vlP-9dym%Gpr}FTC^P74P zjanvypQ$;%@6So{i(yT5QLfL&o8fu8*$Z_-AD)M5^89mVCtc*@PgX7hyJUs_mjICt zUpVacV-L`ZG@jUO*F14!S~;m9iqc|aS^rYTq$t9 z9Z}Of5^%pFbK}Zw9^^2mdP?Rt8Z*^6BM9v!j9Ls9ckyEBq2QI)o0D)_11ib>S>$A~ zfL5n&TCpXoHxGJ&f19x_|MQh3DE4qi1EM-WgU%0}hu4t&(bgTcxw1QMJQ^^9k*e6>eXdOqmh5be?=&dZxPXh!RI+~p=pb6M^*Ce4qNqUK0UGj;TanpXrR~_pkY(DMFf!e`Hz#}%?u)t zgipYpTXa+e|Khws>2A4V^oi% zlBhRKCKMKVnmh5|AbxQ{NSoA=v{4?_RH?M0I z77{yCmAaW5EY8@r{6j19Ptmf9k2c2G72c5e*~wAg-&sM6U7rqZ0?)6fg~csQz4&)C z2&dR>jUE2kS6STn!4=JN7~f4O3sZ_JF10p)P~Y-+dGn4Cjj!0LI$(n?o6l0qN3 zy+aIOc^Q+}|J6=yYpiv<*>fs8{Nn-;(Z*u2oaxB%kWLX(2r6Si(&H_{@cuFIpJRsE zZGs#INRWe3uMuaifW7`(wX*Vx^3)>BqN~p$XI+u_0hhyuBb@BwXVainEcIRN?aMii zEnMT|mPZQ$!^`R(UHvxQ?Kp>8rUc1RlLvLLjXfPh)$xgm_)TGss*2P<%lZ*f=TEn3 zWeb4SqI#j!`~z_5f_ykQF2B3{`<(RCs73l>LF^>0&}Ib{hPCkoLF7wZgbVC#-;1Vd zNj|X#Jsl1YQjOi@HF4!6B{b}_PYQ9ztd ze(JQ`x00U^e?VHS*Y!D3D$Z76_oQwWN<*Wss`FWXrB zl;%W$Hy~n%vuL~)i|!# zLo{W{_+&zd5=d3V_i zkG5;c%*)XWe+bU&Y%_ZE%Fx)!F_EGotw9fICagMf|EE-NLw73d!otCYU6(eCML~?O zMSADB6HfiuArZva0hU!(VtA&}&au%*a%Sv)?!OM``c$(4#VDvTo8pTNB{}8`8xN1! zv)02yS_Wa(-uSwxc&V%@G6xFXHgq`#f#GV|v-o3fO2~hdIYvzyN6ffYMCJG7ADV2& zK8Kt)^j^fK*EFLCkO6`Z-_OBjs@|MQqu2}f){(y)$FO{E@A+_{7MMM>U9H{?KVC>Z zbX`4UTVt9rrO0b$8tG_6>+@hDs}TnW`KiC}8T2GQqoFx!3;eg2QUdVQp(bz$^7yuR ztBez)lT1%VrNR??DXIi%qGyn1L6OtRg}5=jcHx$4D@q@6O7ozgA&htLFErA|4BK7m zbjs%I%_&mH1oU@giE9gpeH1w4HEyL@pFUxgmq(9KMw(d)BfBQnNRslsA?pyo)v@-k z>-Z)_5#tPYT@^%KVYN60xk&{C#x(try(XFE&RuYxpZj>BLGGa{a>%qzSC zT^tJ%IJOSta^1X)RaU$S+Io88x4-rk3BB zvC{ZIW|wRhM8@h(J4ex=$&*CC!c`4$yX?6C``A=p`|o$R0&MK@w>BQ~jZO^YKCIVYQ?E{Sb?~o zJB4uQX#b_Zy<{eFY?Y0qkB4sxM|go4$;pZBg7RK(ngQhj9SQZvN?>!zTY`*Z^yZ}$ zzQw{psvmPNO6LxlO&FKDIp8ZWEdU$w)jC`545hv=vD>pE2%S+Buetv5hUdA8R05IF zkRVjuD@sTI>lzGNALqjA!;h!%pQV47hBlt3sdgWvfKKv|lkzgJ@Mh_t{PdsXjo1fY zX;k!}pkP~Em*+7rrCt2o*mH-U62B@;rt`uXJfwsm8LVOIJN+7J(xK=Yjcus>S@M+R zo#%d-LkQa7fC#ayen0WMbjIahB7Q=rp&CTB7yf1#P_ zH++%fRTGyzW+CS5%eNf<=f~Db(?a1)iYza-w7@QBs+NoMuoLYYceB!v0=4ETG!kAl z^~AMcS3K!x`}1u^wmj)q@mQGYU=)0j=Y09AcW%}H?xG>!EG_UM(D!ign;SEXXFHOG zmdek`v%W-wFCHi2{LT)64eduTwua3iCK!^~<(B^UvK$gBNgPF9w#fdP7uPa7ar zcYBbHpXn&w(h*0l`Uuu>koiAH$c*CJoi(IdBYlhY70hmHtgqG9(KgV3^^^#wE>pKdT%=l! zauwl9pYw_*28|@7M;8%_2Y8RdAtT4*2f}E&? z{MJfVb`(kjeM>Bgj85O}VgD*BwEvGvenv$PFYc=iT>L`;mHmSQAO!=mCXk&4M18

3*leh&sX5j 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 z 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 X|Njrft9bH(4?rHPK2^aenTP!!2Bs*Q literal 0 HcmV?d00001 diff --git a/docs/basics/_category_.json b/docs/languages/_category_.json similarity index 84% rename from docs/basics/_category_.json rename to docs/languages/_category_.json index 1038a5ea0..4b7ca7825 100644 --- a/docs/basics/_category_.json +++ b/docs/languages/_category_.json @@ -1,5 +1,5 @@ { - "label": "Basics concepts", + "label": "Languages", "position": 3, "link": { "type": "generated-index", diff --git a/docs/basics/javascript/_category_.json b/docs/languages/javascript/_category_.json similarity index 100% rename from docs/basics/javascript/_category_.json rename to docs/languages/javascript/_category_.json diff --git a/docs/basics/javascript/ex-1.md b/docs/languages/javascript/ex-1.md similarity index 100% rename from docs/basics/javascript/ex-1.md rename to docs/languages/javascript/ex-1.md diff --git a/docs/basics/javascript/ex-2.md b/docs/languages/javascript/ex-2.md similarity index 100% rename from docs/basics/javascript/ex-2.md rename to docs/languages/javascript/ex-2.md diff --git a/docs/basics/javascript/ex-3.md b/docs/languages/javascript/ex-3.md similarity index 100% rename from docs/basics/javascript/ex-3.md rename to docs/languages/javascript/ex-3.md diff --git a/docs/linkedlist/LinkedList.md b/docs/linkedlist/LinkedList.md new file mode 100644 index 000000000..b2fd1f35b --- /dev/null +++ b/docs/linkedlist/LinkedList.md @@ -0,0 +1,695 @@ +--- +id: linkedlist-in-dsa +title: LinkedList in Data Structures and Algorithms +sidebar_label: LinkedList +sidebar_position: 2 +description: "A linked list is a linear data structure in which elements are not stored in contiguous memory locations. Instead, each element, called a node, contains a data part and a reference (or link) to the next node in the sequence. Linked lists are used in various applications such as dynamic memory allocation, implementation of data structures like stacks and queues, and more." +tags: + [ + dsa, + data-structures, + linkedlist, + linked-list, + linkedlist-data-structure, + linkedlist-in-dsa, + linkedlist-in-data-structure, + linkedlist-in-algorithm, + linkedlist-in-dsa-example, + linkedlist-in-dsa-explanation, + linkedlist-in-dsa-conclusion, + linkedlist-in-dsa-importance, + linkedlist-in-dsa-syntax, + linkedlist-in-dsa-declaration, + linkedlist-in-dsa-access, + linkedlist-in-dsa-update, + linkedlist-in-dsa-insertion, + linkedlist-in-dsa-deletion, + linkedlist-in-dsa-traversal, + linkedlist-in-dsa-program, + linkedlist-in-dsa-code, + linkedlist-in-dsa-js, + linkedlist-in-dsa-java, + linkedlist-in-dsa-python, + linkedlist-in-dsa-c, + linkedlist-in-dsa-cpp, + linkedlist-in-dsa-ts, + ] +--- + +A linked list is a linear data structure in which elements are not stored in contiguous memory locations. Instead, each element, called a node, contains a data part and a reference (or link) to the next node in the sequence. Linked lists are used in various applications such as dynamic memory allocation, implementation of data structures like stacks and queues, and more. + +## Why are Linked Lists important? + +Linked lists are important because they provide a flexible way to store and manipulate data. They allow for efficient insertion and deletion of elements, which can be particularly useful in applications where the size of the data set changes frequently. + +## How to declare a Linked List? + +A linked list can be declared in various programming languages using the following syntax: + +# LinkedList in Data Structures and Algorithms (DSA) + +## Introduction + +A linked list is a fundamental data structure in computer science that represents a sequence of nodes. Each node contains data and a reference to the next node in the sequence. + +## Types of Linked Lists + +- **Singly Linked List**: Each node points to the next node and the last node points to null. +- **Doubly Linked List**: Each node points to both the next and the previous nodes. +- **Circular Linked List**: The last node points to the first node, forming a circle. +- **Circular Doubly Linked List**: Combines properties of both circular and doubly linked lists. + +## Basic Operations + +- **Insertion**: Adding a node to the linked list. +- **Deletion**: Removing a node from the linked list. +- **Traversal**: Accessing each node of the linked list. +- **Search**: Finding a node with a specific value. +- **Update**: Modifying the value of an existing node. + +## Why are Linked Lists important? + +Linked lists are important because they provide a flexible way to store and manipulate data. They allow for efficient insertion and deletion of elements, which can be particularly useful in applications where the size of the data set changes frequently. + +## How to declare a Linked List? + +A linked list can be declared in various programming languages using the following syntax: + + + + + ```js + // Node class in JavaScript + class Node { + constructor(data) { + this.data = data; + this.next = null; + } + } + + // LinkedList class in JavaScript + class LinkedList { + constructor() { + this.head = null; + } + + // Add a node at the end + append(data) { + let newNode = new Node(data); + if (this.head === null) { + this.head = newNode; + return; + } + let current = this.head; + while (current.next) { + current = current.next; + } + current.next = newNode; + } + } + ``` + + + + ```java + // Node class in Java + class Node { + int data; + Node next; + Node(int d) { data = d; next = null; } + } + + // LinkedList class in Java + public class LinkedList { + Node head; + + // Add a node at the end + public void append(int data) { + Node newNode = new Node(data); + if (head == null) { + head = newNode; + return; + } + Node current = head; + while (current.next != null) { + current = current.next; + } + current.next = newNode; + } + } + ``` + + + + ```python + # Node class in Python + class Node: + def __init__(self, data): + self.data = data + self.next = None + + # LinkedList class in Python + class LinkedList: + def __init__(self): + self.head = None + + # Add a node at the end + def append(self, data): + new_node = Node(data) + if self.head is None: + self.head = new_node + return + last = self.head + while last.next: + last = last.next + last.next = new_node + ``` + + + + ```c + // Node structure in C + struct Node { + int data; + struct Node* next; + }; + + // LinkedList structure in C + struct LinkedList { + struct Node* head; + }; + + // Function to create a new node + struct Node* createNode(int data) { + struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); + newNode->data = data; + newNode->next = NULL; + return newNode; + } + + // Function to add a node at the end + void append(struct LinkedList* list, int data) { + struct Node* newNode = createNode(data); + if (list->head == NULL) { + list->head = newNode; + return; + } + struct Node* temp = list->head; + while (temp->next != NULL) { + temp = temp->next; + } + temp->next = newNode; + } + ``` + + + + ```cpp + // Node class in C++ + class Node { + public: + int data; + Node* next; + Node(int d) { data = d; next = nullptr; } + }; + + // LinkedList class in C++ + class LinkedList { + public: + Node* head; + LinkedList() { head = nullptr; } + + // Add a node at the end + void append(int data) { + Node* newNode = new Node(data); + if (head == nullptr) { + head = newNode; + return; + } + Node* current = head; + while (current->next != nullptr) { + current = current->next; + } + current->next = newNode; + } + }; + ``` + + + + ```ts + // Node class in TypeScript + class Node { + data: number; + next: Node | null; + + constructor(data: number) { + this.data = data; + this.next = null; + } + } + + // LinkedList class in TypeScript + class LinkedList { + head: Node | null; + + constructor() { + this.head = null; + } + + // Add a node at the end + append(data: number): void { + let newNode = new Node(data); + if (this.head === null) { + this.head = newNode; + return; + } + let current = this.head; + while (current.next !== null) { + current = current.next; + } + current.next = newNode; + } + } + ``` + + + +## How to access a Linked List? + +A linked list can be accessed by traversing the nodes starting from the head. + + + + + ```js + // Access elements in a LinkedList in JavaScript + let list = new LinkedList(); + list.append(10); + list.append(20); + list.append(30); + + let current = list.head; + while (current !== null) { + console.log(current.data); + current = current.next; + } + ``` + + + + ```java + // Access elements in a LinkedList in Java + LinkedList list = new LinkedList(); + list.append(10); + list.append(20); + list.append(30); + + Node current = list.head; + while (current != null) { + System.out.println(current.data); + current = current.next; + } + ``` + + + + ```python + # Access elements in a LinkedList in Python + list = LinkedList() + list.append(10) + list.append(20) + list.append(30) + + current = list.head + while current: + print(current.data) + current = current.next + ``` + + + + ```c + // Access elements in a LinkedList in C + struct LinkedList list; + list.head = NULL; + append(&list, 10); + append(&list, 20); + append(&list, 30); + + struct Node* current = list.head; + while (current != NULL) { + printf("%d\n", current->data); + current = current->next; + } + ``` + + + + ```cpp + // Access elements in a LinkedList in C++ + LinkedList list; + list.append(10); + list.append(20); + list.append(30); + + Node* current = list.head; + while (current != nullptr) { + std::cout << current->data << std::endl; + current = current->next; + } + ``` + + + + ```ts + // Access elements in a LinkedList in TypeScript + let list = new LinkedList(); + list.append(10); + list.append(20); + list.append(30); + + let current = list.head; + while (current !== null) { + console.log(current.data); + current = current.next; + } + ``` + + + +## How to update a Linked List? + +A linked list can be updated by changing the data of a node directly. + + + + + ```js + // Update elements in a LinkedList in JavaScript + let list = new LinkedList(); + list.append(10); + list.append(20); + list.append(30); + + let current = list.head; + while (current !== null) { + if (current.data === 20) { + current.data = 25; + } + current = current.next; + } + ``` + + + + ```java + // Update elements in a LinkedList in Java + LinkedList list = new LinkedList(); + list.append(10); + list.append(20); + list.append(30); + + Node current = list.head; + while (current != null) { + if (current.data == 20) { + current.data = 25; + } + current = current.next; + } + ``` + + + + ```python + # Update elements in a LinkedList in Python + list = LinkedList() + list.append(10) + list.append(20) + list.append(30) + + current = list.head + while current: + if current.data == 20: + current.data = 25 + current = current.next + ``` + + + + ```c + // Update elements in a LinkedList in C + struct LinkedList list; + list.head = NULL; + append(&list, 10); + append(&list, 20); + append(&list, 30); + + struct Node* current = list.head; + while (current != NULL) { + if (current->data == 20) { + current->data = 25; + } + current = current->next; + } + ``` + + + + ```cpp + // Update elements in a LinkedList in C++ + LinkedList list; + list.append(10); + list.append(20); + list.append(30); + + Node* current = list.head; + while (current != nullptr) { + if (current->data == 20) { + current->data = 25; + } + current = current->next; + } + ``` + + + + ```ts + // Update elements in a LinkedList in TypeScript + let list = new LinkedList(); + list.append(10); + list.append(20); + list.append(30); + + let current = list.head; + while (current !== null) { + if (current.data === 20) { + current.data = 25; + } + current = current.next; + } + ``` + + + +## How to delete a node from a Linked List? + +A node can be deleted from a linked list by adjusting the links of the adjacent nodes. + + + + + ```js + // Delete a node from a LinkedList in JavaScript + class LinkedList { + // ... + delete(data) { + if (this.head === null) return; + if (this.head.data === data) { + this.head = this.head.next; + return; + } + let current = this.head; + while (current.next !== null) { + if (current.next.data === data) { + current.next = current.next.next; + return; + } + current = current.next; + } + } + } + ``` + + + + ```java + // Delete a node from a LinkedList in Java + public class LinkedList { + // ... + public void delete(int data) { + if (head == null) return; + if (head.data == data) { + head = head.next; + return; + } + Node current = head; + while (current.next != null) { + if (current.next.data == data) { + current.next = current.next.next; + return; + } + current = current.next; + } + } + } + ``` + + + + ```python + # Delete a node from a LinkedList in Python + class LinkedList: + # ... + def delete(self, data): + if self.head is None: + return + if self.head.data == data: + self.head = self.head.next + return + current = self.head + while current.next: + if current.next.data == data: + current.next = current.next.next + return + current = current.next + ``` + + + + ```c + // Delete a node from a LinkedList in C + void deleteNode(struct LinkedList* list, int data) { + if (list->head == NULL) return; + struct Node* temp = list->head; + if (temp->data == data) { + list->head = temp->next; + free(temp); + return; + } + struct Node* prev = NULL; + while (temp != NULL && temp->data != data) { + prev = temp; + temp = temp->next; + } + if (temp == NULL) return; + prev->next = temp->next; + free(temp); + } + ``` + + + + ```cpp + // Delete a node from a LinkedList in C++ + class LinkedList { + // ... + void deleteNode(int data) { + if (head == nullptr) return; + Node* temp = head; + if (temp->data == data) { + head = temp->next; + delete temp; + return; + } + Node* prev = nullptr; + while (temp != nullptr && temp->data != data) { + prev = temp; + temp = temp->next; + } + if (temp == nullptr) return; + prev->next = temp->next; + delete temp; + } + }; + ``` + + + + ```ts + // Delete a node from a LinkedList in TypeScript + class LinkedList { + // ... + delete(data: number) { + if (this.head === null) return; + if (this.head.data === data) { + this.head = this.head.next; + return; + } + let current = this.head; + while (current.next !== null) { + if (current.next.data === data) { + current.next = current.next.next; + return; + } + current = current.next; + } + } + } + ``` + + + +## Applications of Linked Lists + +- **Dynamic memory allocation**: Linked lists can efficiently manage memory allocation and deallocation. +- **Implementation of stacks and queues**: Linked lists provide the foundation for stack and queue data structures. +- **Graph representation**: Adjacency lists use linked lists to represent graphs. +- **Handling sparse matrices**: Linked lists efficiently store and manipulate sparse matrices. + +## Common Linked List Problems + +- **Reverse a Linked List**: Reversing the nodes of a linked list. +- **Detect a cycle in a Linked List**: Checking if a linked list contains a cycle. +- **Merge two sorted Linked Lists**: Combining two sorted linked lists into one sorted linked list. +- **Find the middle of a Linked List**: Finding the middle node in a linked list. + +## Advanced Linked List Variants + +- **Doubly Linked List**: A linked list where each node has references to both the next and previous nodes. +- **Circular Linked List**: A linked list where the last node points back to the first node. +- **Skip List**: A linked list with additional pointers for faster search. + +## Resources and References + +- **Books**: + - "Introduction to Algorithms" by Cormen, Leiserson, Rivest, and Stein + - "Data Structures and Algorithm Analysis in C" by Mark Allen Weiss +- **Online Courses**: + - Coursera: Data Structures and Algorithms Specialization + - edX: Data Structures Fundamentals +- **Websites**: + - [GeeksforGeeks](https://www.geeksforgeeks.org) + - [LeetCode](https://leetcode.com) + - [HackerRank](https://www.hackerrank.com) + +--- + +By understanding and mastering these linked list concepts and algorithms, you will be well-equipped to tackle a wide range of problems in data structures and algorithms. + +## Conclusion + +Linked lists are a fundamental data structure in computer science and play a crucial role in various applications and algorithms. This guide covers the essential concepts and operations associated with linked lists, providing a comprehensive understanding of how they work and how to implement them in different programming languages. + +Understanding linked lists is crucial for solving numerous problems in computer science, from basic data manipulation to complex algorithms in dynamic memory allocation, graph representation, and more. The examples provided demonstrate how to work with linked lists efficiently, ensuring a robust foundation for tackling more advanced DSA concepts. Mastery of linked lists enhances your ability to handle data structures and perform operations crucial in both everyday programming and competitive coding. + +Problems for Practice +To further practice and test your understanding of linked lists, consider solving the following problems from LeetCode: + +1. Reverse Linked List +2. Linked List Cycle +3. Merge Two Sorted Lists +4. Remove Nth Node From End of List +5. Add Two Numbers + +Engaging with these problems will help reinforce the concepts learned and provide practical experience in using linked lists effectively. By practicing these problems, you will enhance your problem-solving skills and deepen your understanding of linked list manipulation in various contexts. diff --git a/docs/linkedlist/LinkedListProblems.md b/docs/linkedlist/LinkedListProblems.md new file mode 100644 index 000000000..5c727033b --- /dev/null +++ b/docs/linkedlist/LinkedListProblems.md @@ -0,0 +1,146 @@ +--- +id: leetcode-linkedlist-problems +title: LeetCode LinkedList Problems +sidebar_label: LinkedList Problems +sidebar_position: 1 +description: "A collection of easy, medium, and hard LinkedList problems from LeetCode to help you practice and master LinkedList concepts in Data Structures and Algorithms." +tags: + [ + dsa, + data-structures, + linkedlist, + leetcode, + linkedlist-problems, + linkedlist-in-dsa, + linkedlist-in-data-structure, + linkedlist-in-algorithm, + linkedlist-in-dsa-example, + linkedlist-in-dsa-explanation, + linkedlist-in-dsa-conclusion, + linkedlist-in-dsa-importance, + linkedlist-in-dsa-syntax, + linkedlist-in-dsa-declaration, + linkedlist-in-dsa-access, + linkedlist-in-dsa-update, + linkedlist-in-dsa-delete, + linkedlist-in-dsa-iterate, + linkedlist-in-dsa-max-min, + linkedlist-in-dsa-program, + linkedlist-in-dsa-code, + linkedlist-in-dsa-js, + linkedlist-in-dsa-java, + linkedlist-in-dsa-python, + linkedlist-in-dsa-c, + linkedlist-in-dsa-cpp, + linkedlist-in-dsa-ts, + ] +--- + +# LeetCode LinkedList Problems + +## Easy Problems + +1. [Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/) + + - Problem: Reverse a singly linked list. + - LeetCode ID: 206 + +2. [Remove Linked List Elements](https://leetcode.com/problems/remove-linked-list-elements/) + + - Problem: Remove all elements from a linked list of integers that have value val. + - LeetCode ID: 203 + +3. [Palindrome Linked List](https://leetcode.com/problems/palindrome-linked-list/) + + - Problem: Check if a linked list is a palindrome. + - LeetCode ID: 234 + +4. [Merge Two Sorted Lists](https://leetcode.com/problems/merge-two-sorted-lists/) + + - Problem: Merge two sorted linked lists and return it as a new sorted list. + - LeetCode ID: 21 + +5. [Linked List Cycle](https://leetcode.com/problems/linked-list-cycle/) + + - Problem: Determine if a linked list has a cycle. + - LeetCode ID: 141 + +6. [Remove Duplicates from Sorted List](https://leetcode.com/problems/remove-duplicates-from-sorted-list/) + + - Problem: Delete all duplicates such that each element appears only once. + - LeetCode ID: 83 + +7. [Intersection of Two Linked Lists](https://leetcode.com/problems/intersection-of-two-linked-lists/) + - Problem: Find the node at which the intersection of two singly linked lists begins. + - LeetCode ID: 160 + +## Medium Problems + +1. [Add Two Numbers](https://leetcode.com/problems/add-two-numbers/) + + - Problem: Add two numbers represented by linked lists. + - LeetCode ID: 2 + +2. [Odd Even Linked List](https://leetcode.com/problems/odd-even-linked-list/) + + - Problem: Group all odd nodes together followed by the even nodes. + - LeetCode ID: 328 + +3. [Remove Nth Node From End of List](https://leetcode.com/problems/remove-nth-node-from-end-of-list/) + + - Problem: Remove the nth node from the end of the list. + - LeetCode ID: 19 + +4. [Reorder List](https://leetcode.com/problems/reorder-list/) + + - Problem: Reorder the list to follow a specific order. + - LeetCode ID: 143 + +5. [Rotate List](https://leetcode.com/problems/rotate-list/) + + - Problem: Rotate the list to the right by k places. + - LeetCode ID: 61 + +6. [Swap Nodes in Pairs](https://leetcode.com/problems/swap-nodes-in-pairs/) + + - Problem: Swap every two adjacent nodes. + - LeetCode ID: 24 + +7. [Partition List](https://leetcode.com/problems/partition-list/) + - Problem: Partition the list so that nodes less than x come before nodes greater than or equal to x. + - LeetCode ID: 86 + +## Hard Problems + +1. [Merge k Sorted Lists](https://leetcode.com/problems/merge-k-sorted-lists/) + + - Problem: Merge k sorted linked lists and return it as one sorted list. + - LeetCode ID: 23 + +2. [Reverse Nodes in k-Group](https://leetcode.com/problems/reverse-nodes-in-k-group/) + + - Problem: Reverse the nodes of a linked list k at a time. + - LeetCode ID: 25 + +3. [Copy List with Random Pointer](https://leetcode.com/problems/copy-list-with-random-pointer/) + + - Problem: A linked list with a random pointer, deep copy the list. + - LeetCode ID: 138 + +4. [LRU Cache](https://leetcode.com/problems/lru-cache/) + + - Problem: Design and implement a data structure for Least Recently Used (LRU) cache. + - LeetCode ID: 146 + +5. [Flatten a Multilevel Doubly Linked List](https://leetcode.com/problems/flatten-a-multilevel-doubly-linked-list/) + + - Problem: Flatten a multilevel doubly linked list. + - LeetCode ID: 430 + +6. [Linked List Random Node](https://leetcode.com/problems/linked-list-random-node/) + - Problem: Return a random node's value from the linked list. + - LeetCode ID: 382 + +## Conclusion + +Practicing these problems will help reinforce the concepts learned and provide practical experience in using linked lists effectively. By solving these problems, you will enhance your problem-solving skills and deepen your understanding of linked list manipulation in various contexts. diff --git a/docs/linkedlist/_category_.json b/docs/linkedlist/_category_.json new file mode 100644 index 000000000..471f3ca54 --- /dev/null +++ b/docs/linkedlist/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "LinkedList", + "position": 9, + "link": { + "type": "generated-index", + "description": "In data structures, Linked List is basically chains of nodes where each node contains information such as data and a pointer to the next node in the chain. It is a popular data structure with a wide range of real-world applications. In this article, we will provide a complete introduction of Linked List, which will help you tackle any problem based on Linked List." + } +} diff --git a/docs/recursion/_category_.json b/docs/recursion/_category_.json new file mode 100644 index 000000000..1af68bcf8 --- /dev/null +++ b/docs/recursion/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Recursion", + "position": 10, + "link": { + "type": "generated-index", + "description": "In data structures, The process in which a function calls itself directly or indirectly is called recursion and the corresponding function is called a recursive function. Using a recursive algorithm, certain problems can be solved quite easily. " + } +} diff --git a/docs/recursion/recursion.md b/docs/recursion/recursion.md new file mode 100644 index 000000000..3032a5c1e --- /dev/null +++ b/docs/recursion/recursion.md @@ -0,0 +1,249 @@ +--- +id: recursion-in-dsa +title: Recursion in Data Structures and Algorithms +sidebar_label: Recursion +sidebar_position: 3 +description: "Recursion is a programming technique where a function calls itself directly or indirectly to solve a problem. It is used in various applications such as solving mathematical problems, implementing data structures, and more." +tags: + [ + dsa, + algorithms, + recursion, + recursive-functions, + recursion-in-dsa, + recursion-in-algorithm, + recursion-in-dsa-example, + recursion-in-dsa-explanation, + recursion-in-dsa-conclusion, + recursion-in-dsa-importance, + recursion-in-dsa-syntax, + recursion-in-dsa-implementation, + recursion-in-dsa-applications, + recursion-in-dsa-problems, + recursion-in-dsa-solutions, + recursion-in-dsa-code, + recursion-in-dsa-js, + recursion-in-dsa-java, + recursion-in-dsa-python, + recursion-in-dsa-c, + recursion-in-dsa-cpp, + recursion-in-dsa-ts, + ] +--- + +Recursion is a programming technique where a function calls itself directly or indirectly to solve a problem. It is used in various applications such as solving mathematical problems, implementing data structures, and more. + +## Why is Recursion important? + +Recursion is important because it provides a simple and elegant way to solve complex problems. It allows problems to be broken down into smaller, more manageable subproblems, making it easier to understand and implement solutions. + +## How to implement Recursion? + +Recursion can be implemented in various programming languages using the following syntax: + +## Recursive Function Structure + +```python +def recursive_function(parameters): + if base_condition(parameters): + return base_case_value + else: + return recursive_function(modified_parameters) +``` + +## Examples of Recursive Functions + +### Factorial + + + + + ```js + function factorial(n) { + if (n === 0) { + return 1; + } + return n * factorial(n - 1); + } + ``` + + + + ```java + public class RecursionExample { + public static int factorial(int n) { + if (n == 0) { + return 1; + } + return n * factorial(n - 1); + } + } + ``` + + + + ```python + def factorial(n): + if n == 0: + return 1 + return n * factorial(n - 1) + ``` + + + + ```c + int factorial(int n) { + if (n == 0) { + return 1; + } + return n * factorial(n - 1); + } + ``` + + + + ```cpp + int factorial(int n) { + if (n == 0) { + return 1; + } + return n * factorial(n - 1); + } + ``` + + + + ```ts + function factorial(n: number): number { + if (n === 0) { + return 1; + } + return n * factorial(n - 1); + } + ``` + + +Fibonacci + + + + ```js + function fibonacci(n) { + if (n <= 1) { + return n; + } + return fibonacci(n - 1) + fibonacci(n - 2); + } + ``` + + + + ```java + public class RecursionExample { + public static int fibonacci(int n) { + if (n <= 1) { + return n; + } + return fibonacci(n - 1) + fibonacci(n - 2); + } + } + ``` + + + + ```python + def fibonacci(n): + if n <= 1: + return n + return fibonacci(n - 1) + fibonacci(n - 2) + ``` + + + + ```c + int fibonacci(int n) { + if (n <= 1) { + return n; + } + return fibonacci(n - 1) + fibonacci(n - 2); + } + ``` + + + + ```cpp + int fibonacci(int n) { + if (n <= 1) { + return n; + } + return fibonacci(n - 1) + fibonacci(n - 2); + } + ``` + + + + ```ts + function fibonacci(n: number): number { + if (n <= 1) { + return n; + } + return fibonacci(n - 1) + fibonacci(n - 2); + } + ``` + + + +## Applications of Recursion + +1. Mathematical computations: Factorial, Fibonacci series, power functions, etc. +2. Data structures: Tree and graph traversals. +3. Algorithm design: Divide and conquer algorithms like merge sort and quicksort. +4. Dynamic programming: Recursive definitions with memoization. +5. Common Recursive Problems +6. Tower of Hanoi: Moving disks between rods following specific rules. +7. Permutations and combinations: Generating all possible arrangements or selections. +8. Backtracking: Solving puzzles and constraint satisfaction problems. + +## Advanced Recursive Techniques + +1. Tail Recursion: A special form of recursion where the recursive call is the last statement in the function. Optimized by compilers to prevent stack overflow. +2. Memoization: Caching the results of expensive function calls to improve performance. + +## Resources and References + +### Books: + +1. "Introduction to Algorithms" by Cormen, Leiserson, Rivest, and Stein +2. "The Art of Computer Programming" by Donald Knuth + +### Online Courses: + +1. Coursera: Data Structures and Algorithms Specialization +2. edX: Algorithms and Data Structures + +### Websites: + +1. GeeksforGeeks +2. LeetCode +3. HackerRank + +By understanding and mastering these recursion concepts and techniques, you will be well-equipped to tackle a wide range of problems in data structures and algorithms. + +## Conclusion + +Recursion is a powerful technique in computer science that enables elegant and efficient solutions to complex problems. This guide covers the essential concepts and applications of recursion, providing a comprehensive understanding of how to implement and utilize recursive functions in different programming languages. + +Understanding recursion is crucial for solving numerous problems in computer science, from basic mathematical computations to complex algorithm design. The examples provided demonstrate how to work with recursion effectively, ensuring a robust foundation for tackling more advanced DSA concepts. Mastery of recursion enhances your ability to handle algorithmic challenges and perform operations crucial in both everyday programming and competitive coding. + +## Problems for Practice + +To further practice and test your understanding of recursion, consider solving the following problems from LeetCode: + +1. Fibonacci Number +2. Climbing Stairs +3. Permutations +4. Subsets +5. Combination Sum + + + Engaging with these problems will help reinforce the concepts learned and provide practical experience in using recursion effectively. By practicing these problems, you will enhance your problem-solving skills and deepen your understanding of recursive algorithms in various contexts. diff --git a/docs/recursion/recursionVsIteration.md b/docs/recursion/recursionVsIteration.md new file mode 100644 index 000000000..84d0b0067 --- /dev/null +++ b/docs/recursion/recursionVsIteration.md @@ -0,0 +1,157 @@ +--- +id: recursion-vs-iteration-in-dsa +title: Difference between Recursion and Iteration in Data Structures and Algorithms +sidebar_label: Recursion vs Iteration +sidebar_position: 3 +description: "Understanding the differences between recursion and iteration is crucial for selecting the appropriate approach for solving various problems in data structures and algorithms. This guide highlights the key differences, advantages, and use cases of both recursion and iteration." +tags: + [ + dsa, + data-structures, + algorithms, + recursion, + iteration, + recursion-vs-iteration, + recursion-in-dsa, + iteration-in-dsa, + recursion-vs-iteration-in-dsa, + recursion-vs-iteration-examples, + recursion-vs-iteration-differences, + recursion-vs-iteration-advantages, + recursion-vs-iteration-disadvantages, + recursion-vs-iteration-usage, + ] +--- + +Understanding the differences between recursion and iteration is crucial for selecting the appropriate approach for solving various problems in data structures and algorithms. This guide highlights the key differences, advantages, and use cases of both recursion and iteration. + +## Introduction + +### Recursion + +Recursion is a technique where a function calls itself in order to solve a smaller instance of the same problem until a base case is reached. Recursive solutions can be elegant and easy to understand but may come with performance overheads due to repeated function calls. + +### Iteration + +Iteration involves using loops (such as for, while, or do-while) to repeat a block of code until a certain condition is met. Iterative solutions are often more efficient in terms of memory usage and execution time compared to recursion, but they can be less intuitive for problems that have a naturally recursive structure. + +## Key Differences + +| Feature | Recursion | Iteration | +| ------------ | ------------------------------------------------------ | ------------------------------------------- | +| Definition | Function calls itself | Loop repeatedly executes block of code | +| Termination | Base case | Loop condition | +| Memory Usage | Uses call stack, can lead to stack overflow | Uses constant or linear memory | +| Readability | Often more readable for problems with recursive nature | Can be less readable for complex conditions | +| Performance | Higher overhead due to function calls | Generally more efficient | +| Use Cases | Divide and conquer, tree and graph traversal | Simple loops, repetitive tasks | + +## Examples + +### Factorial Calculation + +#### Recursion + +```python +def factorial(n): + if n == 0: + return 1 + else: + return n * factorial(n - 1) +``` + +#### Iteration + +```python +def factorial(n): + result = 1 + for i in range(1, n + 1): + result *= i + return result +``` + +### Fibonacci Series + +#### Recursion + +```python +def fibonacci(n): + if n <= 1: + return n + else: + return fibonacci(n - 1) + fibonacci(n - 2) +``` + +#### Iteration + +```python +def fibonacci(n): + a, b = 0, 1 + for _ in range(n): + a, b = b, a + b + return a +``` + +## Advantages and Disadvantages + +### Recursion + +#### Advantages: + + 1. Simplifies the code for problems that have a natural recursive structure. + 2. Makes the code easier to write and understand for problems like tree traversals. + +#### Disadvantages: + + 1. Can lead to stack overflow if the recursion depth is too large. + 2. Generally less efficient in terms of time and space due to function call overhead. + +### Iteration + +#### Advantages: + + 1. More efficient in terms of memory and execution time. + 2. Avoids the risk of stack overflow. + +#### Disadvantages: + + 1. Can result in more complex and less readable code for problems with recursive nature. + 2. Requires explicit management of loop conditions and state. + +## When to Use Recursion vs Iteration + +### Use Recursion When: + +The problem has a naturally recursive structure (e.g., tree and graph traversal). +Code readability and simplicity are more important than performance. +You are dealing with divide-and-conquer algorithms (e.g., quicksort, mergesort). + +### Use Iteration When: + +Performance and memory efficiency are critical. +The problem involves simple repetitive tasks or loops. +You want to avoid the risk of stack overflow for deep recursion. + +## Conclusion + +Both recursion and iteration are fundamental techniques in data structures and algorithms, each with its own strengths and weaknesses. The choice between recursion and iteration depends on the specific problem at hand, the importance of performance and memory usage, and the need for code readability and simplicity. By understanding the differences and appropriate use cases for each approach, you can make informed decisions in your algorithmic implementations. + +## Resources and References + +#### Books: + + 1. "Introduction to Algorithms" by Cormen, Leiserson, Rivest, and Stein + 2. "Data Structures and Algorithm Analysis in C" by Mark Allen Weiss + +#### Online Courses: + + 1. Coursera: Data Structures and Algorithms Specialization + 2. edX: Algorithms and Data Structures + +#### Websites: + + 1. GeeksforGeeks + 2. LeetCode + 3. HackerRank + + Understanding and mastering both recursion and iteration will significantly enhance your ability to solve a wide range of problems in data structures and algorithms. This guide provides a comprehensive overview of the differences, advantages, and use cases for each approach, enabling you to make the best choice for your specific needs. diff --git a/docs/recursion/recursion_leetcode_questions.md b/docs/recursion/recursion_leetcode_questions.md new file mode 100644 index 000000000..3010abf3c --- /dev/null +++ b/docs/recursion/recursion_leetcode_questions.md @@ -0,0 +1,75 @@ +--- +id: recursion-leetcode-questions +title: Recursion Leetcode Questions +sidebar_label: Recursion Leetcode Questions +sidebar_position: 4 +description: "A collection of 20 Leetcode questions focused on recursion, categorized into easy, medium, and hard levels." +tags: + [ + dsa, + data-structures, + algorithms, + recursion, + leetcode, + recursion-leetcode, + recursion-leetcode-easy, + recursion-leetcode-medium, + recursion-leetcode-hard, + recursion-leetcode-questions, + ] +--- + +A collection of 20 Leetcode questions focused on recursion, categorized into easy, medium, and hard levels. + +## Easy + +1. **[Factorial](https://leetcode.com/problems/factorial)** + - Description: Calculate the factorial of a given number using recursion. +2. **[Fibonacci Number](https://leetcode.com/problems/fibonacci-number)** + - Description: Compute the n-th Fibonacci number using recursion. +3. **[Reverse String](https://leetcode.com/problems/reverse-string)** + - Description: Reverse a string using recursion. +4. **[Sum of Digits of a Number](https://leetcode.com/problems/sum-of-digits-of-a-number)** + - Description: Find the sum of digits of a given number using recursion. +5. **[Power of Three](https://leetcode.com/problems/power-of-three)** + - Description: Determine if a number is a power of three using recursion. +6. **[Climbing Stairs](https://leetcode.com/problems/climbing-stairs)** + - Description: Find the number of ways to climb a staircase using recursion. +7. **[Palindrome Linked List](https://leetcode.com/problems/palindrome-linked-list)** + - Description: Check if a linked list is a palindrome using recursion. +8. **[Maximum Depth of Binary Tree](https://leetcode.com/problems/maximum-depth-of-binary-tree)** + - Description: Find the maximum depth of a binary tree using recursion. + +## Medium + +1. **[Subsets](https://leetcode.com/problems/subsets)** + - Description: Generate all possible subsets of a set using recursion. +2. **[Permutations](https://leetcode.com/problems/permutations)** + - Description: Generate all possible permutations of a sequence using recursion. +3. **[Unique Binary Search Trees II](https://leetcode.com/problems/unique-binary-search-trees-ii)** + - Description: Generate all unique BSTs that store values 1 to n using recursion. +4. **[Word Search](https://leetcode.com/problems/word-search)** + - Description: Search for a word in a 2D grid using recursion. +5. **[Combination Sum](https://leetcode.com/problems/combination-sum)** + - Description: Find all unique combinations of numbers that sum to a target using recursion. +6. **[Letter Combinations of a Phone Number](https://leetcode.com/problems/letter-combinations-of-a-phone-number)** + - Description: Generate all possible letter combinations that a phone number could represent using recursion. +7. **[Generate Parentheses](https://leetcode.com/problems/generate-parentheses)** + - Description: Generate all combinations of well-formed parentheses using recursion. + +## Hard + +1. **[N-Queens](https://leetcode.com/problems/n-queens)** + - Description: Solve the N-Queens problem using recursion. +2. **[Sudoku Solver](https://leetcode.com/problems/sudoku-solver)** + - Description: Solve a given Sudoku puzzle using recursion. +3. **[Regular Expression Matching](https://leetcode.com/problems/regular-expression-matching)** + - Description: Implement regular expression matching with support for '.' and '\*' using recursion. +4. **[Longest Valid Parentheses](https://leetcode.com/problems/longest-valid-parentheses)** + - Description: Find the length of the longest valid parentheses substring using recursion. +5. **[Interleaving String](https://leetcode.com/problems/interleaving-string)** + - Description: Determine if a string is an interleaving of two other strings using recursion. + +--- + +These questions provide a comprehensive overview of recursion techniques and are a great way to practice and improve your recursion skills in data structures and algorithms. diff --git a/docs/stack/_category_.json b/docs/stack/_category_.json new file mode 100644 index 000000000..9b32456bc --- /dev/null +++ b/docs/stack/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Stack", + "position": 12, + "link": { + "type": "generated-index", + "description": "Stack is a linear data structure that follows LIFO principle" + } +} diff --git a/docs/stack/stack-using-array.md b/docs/stack/stack-using-array.md new file mode 100644 index 000000000..3dd65eb53 --- /dev/null +++ b/docs/stack/stack-using-array.md @@ -0,0 +1,244 @@ +--- +id: stack-in-dsa +title: Stack Using Array +sidebar_label: Stack Using Array +sidebar_position: 1 +description: "Stack is a linear data structure that follows LIFO principle" +tags: [dsa, data-structures, stack, LIFO] +--- + +### Introduction to Stack + +A stack is a linear data structure that follows the Last In First Out (LIFO) principle. This means that the last element added to the stack will be the first one to be removed. Stacks are used in various applications such as expression evaluation, function call management in recursion, and more. + +### Stack Operations + +1. **Push**: Add an element to the top of the stack. +2. **Pop**: Remove the top element from the stack. +3. **Peek (or Top)**: Retrieve the top element of the stack without removing it. +4. **isEmpty**: Check if the stack is empty. +5. **Size**: Get the number of elements in the stack. + +### Pseudocode + +#### Basic Operations + +1. **Push**: + + ```text + function push(stack, element): + stack.append(element) + ``` + +2. **Pop**: + + ```text + function pop(stack): + if isEmpty(stack): + return "Stack Underflow" + return stack.pop() + ``` + +3. **Peek**: + + ```text + function peek(stack): + if isEmpty(stack): + return "Stack is empty" + return stack[-1] + ``` + +4. **isEmpty**: + + ```text + function isEmpty(stack): + return len(stack) == 0 + ``` + +5. **Size**: + ```text + function size(stack): + return len(stack) + ``` + +### Implementation in Python, C++, and Java + +#### Python Implementation + +```python +class Stack: + def __init__(self): + self.elements = [] + + def push(self, element): + self.elements.append(element) + + def pop(self): + if self.is_empty(): + return "Stack Underflow" + return self.elements.pop() + + def peek(self): + if self.is_empty(): + return "Stack is empty" + return self.elements[-1] + + def is_empty(self): + return len(self.elements) == 0 + + def size(self): + return len(self.elements) + +# Example usage +stack = Stack() +stack.push(10) +stack.push(20) +print(stack.pop()) # Output: 20 +print(stack.peek()) # Output: 10 +print(stack.is_empty()) # Output: False +print(stack.size()) # Output: 1 +``` + +#### C++ Implementation + +```cpp +#include +#include + +class Stack { +private: + std::vector.elements; + +public: + void push(int element) { + .elements.push_back(element); + } + + int pop() { + if (isEmpty()) { + std::cerr << "Stack Underflow" << std::endl; + return -1; + } + int top =.elements.back(); + .elements.pop_back(); + return top; + } + + int peek() { + if (isEmpty()) { + std::cerr << "Stack is empty" << std::endl; + return -1; + } + return.elements.back(); + } + + bool isEmpty() { + return.elements.empty(); + } + + int size() { + return.elements.size(); + } +}; + +// Example usage +int main() { + Stack stack; + stack.push(10); + stack.push(20); + std::cout << stack.pop() << std::endl; // Output: 20 + std::cout << stack.peek() << std::endl; // Output: 10 + std::cout << std::boolalpha << stack.isEmpty() << std::endl; // Output: false + std::cout << stack.size() << std::endl; // Output: 1 + return 0; +} +``` + +#### Java Implementation + +```java +import java.util.ArrayList; + +public class Stack { + private ArrayList.elements; + + public Stack() { + .elements = new ArrayList<>(); + } + + public void push(int element) { + .elements.add(element); + } + + public int pop() { + if (isEmpty()) { + System.out.println("Stack Underflow"); + return -1; + } + return.elements.remove.elements.size() - 1); + } + + public int peek() { + if (isEmpty()) { + System.out.println("Stack is empty"); + return -1; + } + return.elements.get.elements.size() - 1); + } + + public boolean isEmpty() { + return.elements.isEmpty(); + } + + public int size() { + return.elements.size(); + } + + // Example usage + public static void main(String[] args) { + Stack stack = new Stack(); + stack.push(10); + stack.push(20); + System.out.println(stack.pop()); // Output: 20 + System.out.println(stack.peek()); // Output: 10 + System.out.println(stack.isEmpty()); // Output: false + System.out.println(stack.size()); // Output: 1 + } +} +``` + +### Complexity + +- **Time Complexity**: + + - Push: $O(1)$ + - Pop: $O(1)$ + - Peek: $O(1)$ + - isEmpty: $O(1)$ + - Size: $O(1)$ + +- **Space Complexity**: $O(n)$, where $n$ is the number of elements in the stack. + +### Example + +Consider a stack with the following operations: + +1. Push 10 +2. Push 20 +3. Pop +4. Peek +5. Check if empty +6. Get size + +**Operations**: + +- Push 10: Stack becomes [10] +- Push 20: Stack becomes [10, 20] +- Pop: Removes 20, Stack becomes [10] +- Peek: Returns 10, Stack remains [10] +- isEmpty: Returns false +- Size: Returns 1 + +### Conclusion + +A stack is a fundamental data structure used in computer science for various applications where the LIFO (Last In First Out) principle is required. It is simple to implement and provides efficient operations for adding and removing elements. Understanding and using stacks effectively can help solve many algorithmic problems. diff --git a/docs/strings/_category_.json b/docs/strings/_category_.json new file mode 100644 index 000000000..5e94df7ac --- /dev/null +++ b/docs/strings/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "String", + "position": 8, + "link": { + "type": "generated-index", + "description": "In data structures, a string is a sequence of characters used to represent text. Strings are commonly used for storing and manipulating textual data in computer programs. They can be manipulated using various operations like concatenation, substring extraction, and comparison." + } +} diff --git a/docs/strings/leetcode_practice_problems_strings.md b/docs/strings/leetcode_practice_problems_strings.md new file mode 100644 index 000000000..a9ea2bd93 --- /dev/null +++ b/docs/strings/leetcode_practice_problems_strings.md @@ -0,0 +1,31 @@ +# Practice Problems for Strings + +To further practice and test your understanding of strings, consider solving the following problems from LeetCode: + +## Easy + +1. [Valid Palindrome](https://leetcode.com/problems/valid-palindrome/) +2. [Longest Common Prefix](https://leetcode.com/problems/longest-common-prefix/) +3. [Implement strStr()](https://leetcode.com/problems/implement-strstr/) +4. [Count and Say](https://leetcode.com/problems/count-and-say/) +5. [Reverse String](https://leetcode.com/problems/reverse-string/) +6. [First Unique Character in a String](https://leetcode.com/problems/first-unique-character-in-a-string/) +7. [Valid Anagram](https://leetcode.com/problems/valid-anagram/) +8. [Reverse Vowels of a String](https://leetcode.com/problems/reverse-vowels-of-a-string/) +9. [Detect Capital](https://leetcode.com/problems/detect-capital/) +10. [Repeated Substring Pattern](https://leetcode.com/problems/repeated-substring-pattern/) + +## Medium + +11. [Longest Substring Without Repeating Characters](https://leetcode.com/problems/longest-substring-without-repeating-characters/) +12. [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/) +13. [Group Anagrams](https://leetcode.com/problems/group-anagrams/) +14. [Decode String](https://leetcode.com/problems/decode-string/) +15. [String to Integer (atoi)](https://leetcode.com/problems/string-to-integer-atoi/) +16. [Letter Combinations of a Phone Number](https://leetcode.com/problems/letter-combinations-of-a-phone-number/) +17. [Simplify Path](https://leetcode.com/problems/simplify-path/) +18. [Add Bold Tag in String](https://leetcode.com/problems/add-bold-tag-in-string/) +19. [Find All Anagrams in a String](https://leetcode.com/problems/find-all-anagrams-in-a-string/) +20. [Longest Palindromic Subsequence](https://leetcode.com/problems/longest-palindromic-subsequence/) + +Engaging with these problems will help reinforce the concepts learned and provide practical experience in using strings effectively. By practicing these problems, you will enhance your problem-solving skills and deepen your understanding of string manipulation in various contexts. diff --git a/docs/strings/strings-dsa.md b/docs/strings/strings-dsa.md new file mode 100644 index 000000000..03194ab49 --- /dev/null +++ b/docs/strings/strings-dsa.md @@ -0,0 +1,360 @@ +--- +id: strings-in-dsa +title: Strings in Data Structures and Algorithms +sidebar_label: Strings +sidebar_position: 1 +description: "A string is a sequence of characters. It is a data structure that represents a sequence of characters, either as a literal constant or as some kind of variable. In data structures and algorithms, strings are used in a wide range of applications such as text processing, pattern matching, and data serialization." +tags: + [ + dsa, + data-structures, + strings, + string, + string-data-structure, + string-in-dsa, + string-in-data-structure, + string-in-algorithm, + string-in-dsa-example, + string-in-dsa-explanation, + string-in-dsa-conclusion, + string-in-dsa-importance, + string-in-dsa-syntax, + string-in-dsa-declaration, + string-in-dsa-access, + string-in-dsa-update, + string-in-dsa-length, + string-in-dsa-iterate, + string-in-dsa-max-min, + string-in-dsa-program, + string-in-dsa-code, + string-in-dsa-js, + string-in-dsa-java, + string-in-dsa-python, + string-in-dsa-c, + string-in-dsa-cpp, + string-in-dsa-ts, + ] +--- + +A string is a sequence of characters. It is a data structure that represents a sequence of characters, either as a literal constant or as some kind of variable. In data structures and algorithms, strings are used in a wide range of applications such as text processing, pattern matching, and data serialization. + +## Why are Strings important? + +Strings are important because they are used to store and manipulate text. They are used in many applications such as text processing, pattern matching, and data serialization. + +## How to declare a String? + +A string can be declared in various programming languages using the following syntax: + +# Strings in Data Structures and Algorithms (DSA) + +## Table of Contents + +- [Strings in Data Structures and Algorithms (DSA)](#strings-in-data-structures-and-algorithms-dsa) + - [Table of Contents](#table-of-contents) + - [Introduction](#introduction) + - [Basic String Operations](#basic-string-operations) + - [Why are Strings important?](#why-are-strings-important-1) + - [How to declare a String?](#how-to-declare-a-string-1) + - [How to access a String?](#how-to-access-a-string) + - [How to update a String?](#how-to-update-a-string) + - [How to find the length of a String?](#how-to-find-the-length-of-a-string) + - [Pattern Matching Algorithms](#pattern-matching-algorithms) + - [String Manipulation](#string-manipulation) + - [String Data Structures](#string-data-structures) + - [Common String Problems](#common-string-problems) + - [Advanced String Algorithms](#advanced-string-algorithms) + - [Resources and References](#resources-and-references) + - [Conclusion](#conclusion) + +## Introduction + +Strings are sequences of characters and are a fundamental data type in computer science. They are used extensively in algorithms and data structures. + +## Basic String Operations + +- **Length**: Determine the length of a string. +- **Concatenation**: Combine two or more strings. +- **Substring**: Extract a portion of a string. +- **Comparison**: Compare two strings lexicographically. +- **Search**: Find the occurrence of a substring. + +## Why are Strings important? + +Strings are important because they are used to store and manipulate text. They are used in many applications such as text processing, pattern matching, and data serialization. + +## How to declare a String? + +A string can be declared in various programming languages using the following syntax: + + + + + ```js + // Declare a string in JavaScript + let str = "Hello, world!"; + ``` + + + + ```java + // Declare a string in Java + String str = "Hello, world!"; + ``` + + + + ```python + # Declare a string in Python + str = "Hello, world!" + ``` + + + + ```c + // Declare a string in C + char str[] = "Hello, world!"; + ``` + + + + ```cpp + // Declare a string in C++ + std::string str = "Hello, world!"; + ``` + + + + ```ts + // Declare a string in TypeScript + let str: string = "Hello, world!"; + ``` + + + +## How to access a String? + +A string can be accessed using the index of the character. The index of the first character is 0, the index of the second character is 1, and so on. + + + + + ```js + // Access a string in JavaScript + let str = "Hello, world!"; + console.log(str[0]); // H + console.log(str[1]); // e + console.log(str[2]); // l + ``` + + + + ```java + // Access a string in Java + String str = "Hello, world!"; + System.out.println(str.charAt(0)); // H + System.out.println(str.charAt(1)); // e + System.out.println(str.charAt(2)); // l + ``` + + + + ```python + # Access a string in Python + str = "Hello, world!" + print(str[0]) # H + print(str[1]) # e + print(str[2]) # l + ``` + + + + ```c + // Access a string in C + char str[] = "Hello, world!"; + printf("%c\n", str[0]); // H + printf("%c\n", str[1]); // e + printf("%c\n", str[2]); // l + ``` + + + + ```cpp + // Access a string in C++ + std::string str = "Hello, world!"; + std::cout << str[0] << std::endl; // H + std::cout << str[1] << std::endl; // e + std::cout << str[2] << std::endl; // l + ``` + + + + ```ts + // Access a string in TypeScript + let str: string = "Hello, world!"; + console.log(str[0]); // H + console.log(str[1]); // e + console.log(str[2]); // l + ``` + + + +## How to update a String? + +A string can be updated by creating a new string with the desired changes, as strings are immutable in many programming languages. + + + + + ```js + // Update a string in JavaScript + let str = "Hello, world!"; + str = "Hello, JavaScript!"; + console.log(str); // Hello, JavaScript! + ``` + + + + ```java + // Update a string in Java + String str = "Hello, world!"; + str = "Hello, Java!"; + System.out.println(str); // Hello, Java! + ``` + + + + ```python + # Update a string in Python + str = "Hello, world!" + str = "Hello, Python!" + print(str) # Hello, Python! + ``` + + + + ```c + // Update a string in C + char str[] = "Hello, world!"; + strcpy(str, "Hello, C!"); + printf("%s\n", str); // Hello, C! + ``` + + + + ```cpp + // Update a string in C++ + std::string str = "Hello, world!"; + str = "Hello, C++!"; + std::cout << str << std::endl; // Hello, C++! + ``` + + + + ```ts + // Update a string in TypeScript + let str: string = "Hello, world!"; + str = "Hello, TypeScript!"; + console.log(str); // Hello, TypeScript! + ``` + + + +## How to find the length of a String? + +The length of a string can be found using the `length` property or method. + + + + + ```js + // Find the length of a string in JavaScript + let str = "Hello, world!"; + console.log(str.length); // 13 + ``` + + + + ```java + // Find the length of a string in Java + String str = "Hello, world!"; + System.out.println(str.length()); // 13 + ``` + + + + ```python + # Find the length of a string in Python + str = "Hello, world!" + print(len(str)) # 13 + ``` + + + +## Pattern Matching Algorithms + +- **Naive Pattern Matching**: A straightforward approach with a time complexity of O(m\*n). +- **Knuth-Morris-Pratt (KMP)**: An efficient pattern matching algorithm with a time complexity of O(m+n). +- **Rabin-Karp Algorithm**: Uses hashing for pattern matching with a time complexity of O(m+n) on average. +- **Boyer-Moore Algorithm**: A powerful algorithm with a worst-case time complexity of O(m\*n) but performs well in practice. + +## String Manipulation + +- **Reversal**: Reversing a string. +- **Palindromes**: Checking if a string reads the same forwards and backwards. +- **Anagrams**: Checking if two strings are permutations of each other. +- **Rotation**: Rotating a string by a given number of characters. + +## String Data Structures + +- **Trie (Prefix Tree)**: A tree-like data structure that stores a dynamic set of strings, typically used for search operations. +- **Suffix Tree**: A compressed trie of all suffixes of a given string, useful for pattern matching. +- **Suffix Array**: An array of all suffixes of a string, sorted in lexicographical order. +- **Aho-Corasick Algorithm**: A trie-based data structure for multiple pattern matching. + +## Common String Problems + +- **Longest Common Substring**: Finding the longest substring that appears in two or more strings. +- **Longest Common Subsequence**: Finding the longest sequence that can be derived from two strings without changing the order of characters. +- **Edit Distance (Levenshtein Distance)**: Measuring the minimum number of single-character edits required to change one string into another. +- **String Compression**: Reducing the size of a string using algorithms like Run-Length Encoding (RLE). + +## Advanced String Algorithms + +- **Burrows-Wheeler Transform (BWT)**: A data transformation algorithm useful for data compression. +- **Manacher’s Algorithm**: An efficient algorithm to find the longest palindromic substring in linear time. +- **Z-Algorithm**: Finds occurrences of a pattern in a string in linear time. + +## Resources and References + +- **Books**: + - "Introduction to Algorithms" by Cormen, Leiserson, Rivest, and Stein + - "Algorithms" by Robert Sedgewick and Kevin Wayne +- **Online Courses**: + - Coursera: Data Structures and Algorithm Specialization + - edX: Algorithms and Data Structures +- **Websites**: + - [GeeksforGeeks](https://www.geeksforgeeks.org) + - [LeetCode](https://leetcode.com) + - [HackerRank](https://www.hackerrank.com) + +--- + +By understanding and mastering these string concepts and algorithms, you will be well-equipped to tackle a wide range of problems in data structures and algorithms. + +## Conclusion + +Strings are a vital data structure in the study of data structures and algorithms (DSA). They are sequences of characters used to represent text and are fundamental to various programming tasks. In this tutorial, we explored the essential operations related to strings, including declaration, access, modification, length determination, iteration, and searching in different programming languages like JavaScript, Java, Python, C, C++, and TypeScript. + +Understanding strings is crucial for solving numerous problems in computer science, from simple text manipulation to complex algorithms in text processing, pattern matching, and more. The examples provided demonstrate how to work with strings efficiently, ensuring a robust foundation for tackling more advanced DSA concepts. Mastery of strings enhances your ability to handle data and perform operations crucial in both everyday programming and competitive coding. + +Problems for Practice +To further practice and test your understanding of strings, consider solving the following problems from LeetCode: + +1. Longest Substring Without Repeating Characters +2. Valid Anagram +3. Longest Palindromic Substring +4. Group Anagrams +5. Minimum Window Substring + +Engaging with these problems will help reinforce the concepts learned and provide practical experience in using strings effectively. By practicing these problems, you will enhance your problem-solving skills and deepen your understanding of string manipulation in various contexts. diff --git a/docusaurus.config.js b/docusaurus.config.js index 61d07478d..092f9f0d3 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -42,6 +42,16 @@ const config = { ], ], + stylesheets: [ + { + href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css', + type: 'text/css', + integrity: + 'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM', + crossorigin: 'anonymous', + }, + ], + themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({