From 8bad410a3aa77edb0a8f6460251fd4ff8d79a55c Mon Sep 17 00:00:00 2001 From: Meisterlala <6453306+Meisterlala@users.noreply.github.com> Date: Mon, 18 Apr 2022 17:10:58 +0200 Subject: [PATCH] Knapsack --- .../Part 3/knapsack/Cargo.lock | 7 + .../Part 3/knapsack/Cargo.toml | 8 + .../knapsack/input_random_17_100_1000.txt | 1001 +++++++++ .../knapsack/input_random_26_1000_1000.txt | 1001 +++++++++ .../Part 3/knapsack/input_random_5_10_10.txt | 11 + .../Part 3/knapsack/knapsack1.txt | 101 + .../Part 3/knapsack/knapsack_big.txt | 2001 +++++++++++++++++ .../Part 3/knapsack/src/lib.rs | 61 + .../Part 3/knapsack/src/main.rs | 50 + 9 files changed, 4241 insertions(+) create mode 100644 Algorithms Specialization/Part 3/knapsack/Cargo.lock create mode 100644 Algorithms Specialization/Part 3/knapsack/Cargo.toml create mode 100644 Algorithms Specialization/Part 3/knapsack/input_random_17_100_1000.txt create mode 100644 Algorithms Specialization/Part 3/knapsack/input_random_26_1000_1000.txt create mode 100644 Algorithms Specialization/Part 3/knapsack/input_random_5_10_10.txt create mode 100644 Algorithms Specialization/Part 3/knapsack/knapsack1.txt create mode 100644 Algorithms Specialization/Part 3/knapsack/knapsack_big.txt create mode 100644 Algorithms Specialization/Part 3/knapsack/src/lib.rs create mode 100644 Algorithms Specialization/Part 3/knapsack/src/main.rs diff --git a/Algorithms Specialization/Part 3/knapsack/Cargo.lock b/Algorithms Specialization/Part 3/knapsack/Cargo.lock new file mode 100644 index 0000000..e5b936e --- /dev/null +++ b/Algorithms Specialization/Part 3/knapsack/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "knapsack" +version = "0.1.0" diff --git a/Algorithms Specialization/Part 3/knapsack/Cargo.toml b/Algorithms Specialization/Part 3/knapsack/Cargo.toml new file mode 100644 index 0000000..7b1d5d9 --- /dev/null +++ b/Algorithms Specialization/Part 3/knapsack/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "knapsack" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/Algorithms Specialization/Part 3/knapsack/input_random_17_100_1000.txt b/Algorithms Specialization/Part 3/knapsack/input_random_17_100_1000.txt new file mode 100644 index 0000000..7f76123 --- /dev/null +++ b/Algorithms Specialization/Part 3/knapsack/input_random_17_100_1000.txt @@ -0,0 +1,1001 @@ +100 1000 +17 11 +30 35 +7 49 +47 1 +45 27 +46 35 +44 40 +48 45 +8 49 +44 50 +39 44 +4 48 +30 4 +25 1 +26 16 +9 2 +50 1 +21 26 +31 37 +46 48 +45 28 +1 23 +49 29 +25 18 +36 17 +45 21 +40 6 +43 24 +18 40 +17 25 +25 50 +14 7 +16 29 +12 8 +40 1 +12 37 +7 8 +18 33 +23 28 +28 47 +11 25 +22 18 +10 22 +28 48 +29 49 +17 7 +25 16 +38 32 +4 19 +23 30 +18 26 +36 30 +32 20 +45 15 +22 9 +16 20 +25 2 +23 4 +8 36 +35 48 +25 8 +22 31 +40 14 +43 17 +2 36 +29 28 +18 25 +11 49 +28 29 +42 24 +15 40 +22 4 +17 47 +18 27 +18 37 +13 7 +48 20 +46 24 +22 26 +32 21 +32 14 +22 29 +47 5 +34 36 +34 9 +21 47 +31 24 +50 11 +26 20 +49 28 +22 44 +47 20 +18 49 +31 50 +2 3 +34 31 +50 6 +19 9 +29 1 +24 50 +2 13 +10 29 +5 18 +22 36 +49 3 +39 36 +43 25 +35 16 +14 29 +8 20 +5 34 +1 39 +47 21 +42 30 +12 44 +29 1 +26 9 +29 44 +21 35 +3 29 +21 9 +20 6 +9 40 +17 6 +2 3 +11 11 +38 31 +2 34 +36 16 +17 45 +50 6 +48 35 +28 12 +14 38 +16 11 +11 12 +23 33 +43 21 +4 19 +1 30 +44 19 +26 34 +29 18 +24 15 +42 17 +4 23 +8 9 +40 9 +44 23 +12 21 +23 19 +1 37 +31 16 +20 14 +30 22 +39 33 +23 31 +26 47 +31 6 +28 13 +16 17 +22 26 +29 17 +10 31 +22 35 +3 1 +21 9 +42 7 +24 30 +41 39 +31 12 +6 45 +6 41 +5 2 +43 48 +10 1 +21 40 +35 14 +47 10 +17 7 +28 32 +19 18 +50 33 +39 10 +33 3 +1 32 +49 34 +6 42 +38 25 +16 13 +23 26 +16 45 +3 44 +45 45 +23 6 +41 18 +37 34 +4 43 +39 8 +14 7 +4 40 +7 7 +37 21 +37 1 +12 46 +27 26 +9 18 +13 22 +14 1 +47 10 +9 48 +19 34 +29 32 +43 41 +49 4 +8 29 +36 8 +29 32 +45 37 +32 44 +19 39 +7 25 +31 37 +4 24 +21 40 +27 9 +39 3 +28 30 +3 13 +19 15 +4 19 +46 20 +6 22 +46 34 +25 38 +27 44 +4 25 +35 24 +14 49 +7 26 +3 25 +1 9 +4 37 +50 22 +17 1 +19 35 +9 7 +22 17 +50 45 +28 33 +23 6 +42 47 +14 38 +21 31 +48 18 +6 23 +16 47 +34 5 +42 9 +6 19 +27 50 +16 17 +1 37 +29 13 +16 18 +3 16 +31 11 +10 33 +3 26 +22 22 +12 8 +35 15 +12 3 +5 10 +26 27 +44 39 +19 34 +9 20 +13 48 +17 23 +38 9 +6 44 +31 4 +15 46 +40 45 +36 26 +31 20 +27 24 +20 33 +36 47 +9 47 +43 31 +26 38 +6 46 +42 21 +9 26 +10 34 +45 4 +42 46 +38 30 +7 8 +27 8 +4 37 +19 45 +10 41 +11 33 +21 25 +14 33 +3 43 +22 44 +31 21 +7 23 +25 16 +48 29 +48 36 +34 10 +8 15 +25 7 +9 29 +24 8 +50 37 +15 31 +31 22 +1 2 +30 35 +25 37 +48 39 +38 14 +14 36 +48 17 +37 14 +33 11 +27 7 +14 19 +27 31 +4 31 +2 15 +8 47 +28 44 +12 8 +41 13 +16 11 +29 24 +14 15 +9 48 +26 39 +2 46 +17 23 +43 2 +11 34 +20 24 +44 28 +2 14 +35 39 +5 43 +50 45 +3 8 +48 26 +16 6 +29 50 +3 38 +4 16 +5 4 +50 16 +15 19 +17 45 +36 24 +28 13 +39 40 +3 8 +1 40 +16 27 +42 50 +33 27 +21 7 +26 11 +1 43 +27 2 +8 6 +25 28 +3 46 +41 17 +6 34 +14 17 +9 35 +27 9 +1 47 +36 32 +39 12 +45 14 +6 34 +22 31 +10 28 +9 43 +46 4 +22 32 +49 30 +43 46 +4 12 +49 8 +35 44 +38 10 +44 1 +20 15 +6 2 +44 43 +17 19 +18 2 +48 13 +14 26 +6 43 +26 39 +28 48 +49 2 +21 27 +17 46 +27 36 +38 14 +11 14 +5 15 +38 18 +17 25 +11 28 +17 38 +13 39 +3 12 +45 41 +8 41 +44 2 +4 22 +8 2 +36 10 +47 30 +50 20 +36 10 +26 48 +30 45 +46 48 +37 50 +9 24 +5 7 +36 7 +14 9 +27 41 +43 37 +3 17 +24 34 +7 31 +21 22 +14 27 +16 48 +33 33 +35 26 +42 15 +32 28 +41 7 +34 9 +49 13 +29 14 +29 25 +6 15 +13 47 +44 5 +49 37 +50 32 +46 35 +10 16 +1 29 +13 15 +34 16 +13 19 +11 19 +10 42 +22 48 +50 25 +36 40 +19 2 +13 10 +37 10 +21 40 +48 22 +23 35 +5 20 +27 10 +36 1 +31 48 +45 12 +26 12 +1 50 +3 15 +43 19 +25 50 +15 35 +17 36 +35 14 +23 18 +36 48 +43 32 +6 47 +48 10 +49 18 +44 1 +21 20 +33 12 +33 36 +42 9 +33 7 +7 26 +7 36 +24 24 +30 45 +43 48 +13 21 +3 31 +1 11 +18 26 +4 15 +31 6 +32 10 +13 9 +18 10 +8 42 +37 40 +6 22 +5 45 +39 9 +29 48 +37 35 +40 11 +16 45 +9 9 +33 3 +37 5 +4 18 +40 26 +12 48 +41 13 +41 29 +35 41 +31 9 +45 1 +6 4 +13 25 +30 9 +18 28 +1 17 +39 35 +5 38 +29 11 +12 10 +41 36 +41 4 +2 15 +14 46 +44 29 +17 46 +44 29 +46 39 +8 11 +44 1 +30 41 +14 44 +45 50 +12 11 +17 5 +19 49 +44 7 +7 4 +21 8 +39 31 +23 39 +47 28 +38 35 +50 33 +33 23 +5 49 +32 42 +42 16 +8 14 +3 16 +47 2 +24 21 +48 11 +33 23 +12 14 +9 29 +4 38 +40 40 +47 37 +34 6 +8 17 +3 47 +3 20 +36 48 +22 12 +47 27 +31 12 +10 36 +27 8 +15 6 +3 12 +23 14 +28 10 +38 8 +23 12 +34 32 +25 31 +27 41 +12 38 +24 34 +21 26 +43 1 +26 31 +42 32 +33 15 +15 7 +15 40 +31 11 +11 28 +18 30 +25 10 +49 34 +25 19 +24 29 +13 24 +40 2 +42 11 +36 37 +13 33 +15 30 +39 26 +39 39 +23 14 +19 47 +44 2 +8 7 +44 5 +19 24 +15 29 +39 27 +24 44 +20 22 +27 10 +1 1 +15 45 +45 28 +31 9 +14 24 +22 21 +2 7 +23 38 +42 16 +5 43 +25 46 +45 10 +39 31 +45 39 +15 5 +34 11 +23 49 +18 28 +11 16 +30 35 +28 31 +44 30 +35 6 +15 38 +2 31 +32 4 +20 16 +5 31 +28 6 +18 48 +48 2 +15 49 +48 15 +45 30 +25 19 +39 12 +14 15 +34 5 +29 24 +23 1 +28 40 +38 49 +41 34 +42 46 +49 50 +20 22 +3 22 +6 47 +6 2 +22 8 +41 21 +31 7 +38 42 +50 47 +45 2 +33 4 +43 9 +25 1 +10 16 +48 8 +10 50 +20 30 +18 35 +10 1 +2 6 +33 30 +16 43 +40 5 +48 40 +43 24 +14 29 +19 4 +38 31 +33 35 +16 43 +21 6 +33 45 +36 4 +16 18 +28 40 +5 46 +3 10 +46 19 +17 47 +19 41 +24 30 +35 33 +14 48 +28 5 +49 1 +18 42 +47 3 +19 10 +25 27 +30 30 +6 50 +35 23 +12 4 +14 36 +13 40 +31 34 +31 2 +37 41 +31 12 +9 36 +45 2 +14 27 +10 47 +32 11 +48 28 +21 47 +4 24 +47 39 +41 33 +19 8 +5 22 +33 36 +4 19 +47 3 +3 15 +43 44 +3 47 +17 17 +34 48 +46 35 +32 36 +49 34 +42 26 +19 44 +44 2 +50 26 +40 37 +37 43 +6 41 +42 23 +43 27 +46 34 +33 20 +3 4 +4 42 +32 33 +50 35 +13 24 +4 43 +4 45 +44 36 +18 21 +48 31 +40 49 +19 44 +45 33 +18 13 +10 44 +21 3 +50 31 +41 37 +10 39 +30 50 +45 45 +3 27 +46 8 +49 49 +34 3 +3 25 +41 45 +11 43 +49 49 +21 35 +43 36 +21 39 +2 36 +7 5 +43 41 +16 5 +39 2 +15 24 +12 28 +12 10 +25 29 +18 48 +30 11 +48 12 +2 22 +31 37 +42 3 +41 7 +48 8 +22 43 +1 37 +44 34 +30 42 +46 41 +36 49 +13 16 +17 28 +24 1 +44 20 +17 16 +45 15 +45 12 +6 13 +14 22 +35 31 +30 3 +1 28 +2 36 +15 42 +37 36 +15 45 +16 38 +36 9 +44 49 +10 13 +38 19 +17 46 +46 8 +32 18 +50 3 +1 27 +3 47 +32 2 +37 31 +16 21 +27 44 +29 14 +47 38 +6 46 +7 49 +49 39 +33 16 +46 14 +37 40 +35 49 +15 41 +43 44 +19 11 +36 21 +20 29 +49 46 +39 42 +28 34 +49 50 +25 41 +6 45 +50 42 +47 8 +48 2 +16 24 +29 1 +40 21 +36 11 +18 6 +7 41 +16 18 +13 2 +8 33 +48 17 +4 50 +11 30 +26 11 +7 39 +12 42 +34 29 +34 30 +13 42 +10 47 +9 26 +4 35 +37 27 +33 47 +3 27 +19 3 +42 12 +9 50 +46 41 +31 41 +7 40 +15 13 +20 31 +11 9 +29 26 +46 44 +37 27 +7 40 +15 31 +37 24 +38 40 +12 47 +14 22 +43 5 +22 6 +20 18 +16 44 +32 19 +48 37 +22 33 +41 47 +6 24 +23 26 +48 41 +49 7 +18 38 +16 3 +28 26 +19 33 +18 41 +8 23 +2 45 +13 26 +28 42 +15 39 +49 20 +1 4 +26 42 +4 5 +1 27 +36 3 +29 27 +20 40 +2 23 +1 21 +16 28 +14 31 +15 23 +22 3 +25 17 +21 41 +30 2 +49 35 +4 5 +38 1 +10 42 +31 36 +50 29 +19 16 +39 23 +1 33 +10 33 +33 40 +45 39 +29 50 +21 47 +44 19 +28 17 +42 20 +5 33 +46 18 +33 24 +43 32 +16 41 +37 47 +31 45 +36 5 +4 46 +26 19 +39 35 +34 16 diff --git a/Algorithms Specialization/Part 3/knapsack/input_random_26_1000_1000.txt b/Algorithms Specialization/Part 3/knapsack/input_random_26_1000_1000.txt new file mode 100644 index 0000000..d4a1ea4 --- /dev/null +++ b/Algorithms Specialization/Part 3/knapsack/input_random_26_1000_1000.txt @@ -0,0 +1,1001 @@ +1000 1000 +160 95 +16 193 +168 323 +318 282 +187 130 +465 465 +466 500 +320 77 +326 141 +380 409 +53 321 +36 282 +99 454 +411 130 +475 93 +156 127 +62 488 +1 43 +205 231 +359 468 +387 52 +98 225 +402 424 +283 396 +262 126 +144 325 +479 327 +491 343 +321 124 +176 241 +498 75 +407 260 +4 356 +417 443 +297 250 +74 167 +347 466 +63 469 +261 481 +322 160 +256 410 +9 403 +162 124 +162 489 +497 417 +81 77 +150 428 +158 372 +14 318 +326 302 +218 245 +82 398 +227 383 +17 442 +74 349 +2 68 +354 182 +307 350 +242 239 +58 22 +60 462 +358 401 +246 45 +54 203 +320 185 +440 134 +271 232 +439 284 +388 352 +94 429 +464 380 +100 410 +48 248 +355 124 +32 387 +268 439 +302 261 +242 179 +405 497 +369 20 +445 148 +300 327 +334 469 +15 111 +57 230 +237 14 +225 121 +300 232 +318 25 +320 462 +273 499 +9 42 +321 428 +131 438 +158 130 +14 119 +207 42 +423 64 +407 154 +41 281 +317 322 +485 240 +473 466 +432 28 +152 381 +310 292 +309 260 +438 193 +106 20 +419 67 +469 96 +406 398 +403 310 +410 120 +60 197 +90 312 +217 115 +336 132 +378 245 +127 27 +4 274 +352 251 +75 479 +14 499 +419 489 +41 488 +474 181 +324 74 +136 23 +144 431 +20 197 +113 500 +148 262 +496 474 +312 351 +284 355 +415 166 +227 387 +324 452 +61 132 +195 266 +60 147 +263 88 +381 475 +390 135 +165 328 +301 309 +326 283 +59 119 +310 208 +156 295 +383 194 +21 381 +320 188 +362 51 +390 255 +70 366 +73 292 +134 128 +416 423 +364 479 +407 326 +363 365 +202 96 +399 287 +263 28 +15 81 +135 259 +467 216 +392 428 +94 31 +97 406 +242 153 +115 134 +105 206 +36 210 +69 140 +444 207 +230 157 +199 183 +95 468 +432 4 +214 165 +315 122 +232 438 +351 496 +316 28 +235 24 +209 20 +60 191 +37 35 +466 192 +451 373 +210 71 +64 151 +235 221 +283 71 +457 193 +76 490 +127 213 +441 345 +257 218 +303 488 +272 20 +345 232 +378 113 +386 289 +404 249 +216 419 +79 87 +484 426 +376 175 +410 385 +379 395 +306 25 +333 443 +375 14 +157 229 +481 201 +228 496 +232 215 +207 202 +167 114 +355 302 +75 495 +235 130 +31 309 +26 59 +478 426 +250 326 +474 238 +114 290 +423 256 +223 270 +405 196 +498 321 +456 475 +290 5 +312 74 +490 22 +164 76 +378 470 +40 441 +213 168 +471 28 +169 341 +284 400 +64 274 +295 49 +169 184 +360 127 +313 139 +236 134 +173 287 +107 250 +24 331 +450 275 +147 3 +427 6 +356 246 +360 133 +56 361 +91 33 +139 108 +205 70 +373 321 +197 242 +280 211 +447 156 +79 6 +8 445 +415 482 +473 183 +479 1 +191 130 +356 77 +103 87 +203 332 +124 320 +241 491 +328 262 +222 108 +447 488 +498 11 +17 192 +377 57 +243 488 +496 376 +270 457 +151 454 +2 426 +316 483 +193 248 +97 138 +350 321 +349 387 +478 19 +156 334 +131 23 +345 353 +1 168 +190 373 +306 286 +116 344 +368 416 +238 15 +353 408 +308 410 +52 206 +20 3 +438 416 +13 59 +102 447 +241 218 +201 286 +493 242 +440 14 +368 326 +472 441 +260 218 +57 140 +402 367 +443 275 +47 290 +116 153 +27 327 +272 60 +109 81 +172 252 +250 285 +276 165 +466 183 +393 27 +120 487 +333 444 +216 327 +283 284 +391 381 +320 100 +161 499 +275 195 +399 114 +168 62 +327 153 +126 277 +299 62 +382 312 +383 490 +138 365 +233 484 +112 444 +175 359 +81 215 +105 302 +291 439 +144 222 +149 134 +207 290 +393 143 +207 140 +460 391 +56 386 +464 77 +159 409 +21 123 +138 111 +354 429 +464 250 +489 358 +292 439 +311 32 +10 322 +289 221 +66 118 +9 335 +363 146 +154 399 +455 488 +268 313 +446 149 +72 85 +105 175 +320 188 +136 202 +329 217 +125 456 +263 389 +256 46 +382 188 +327 312 +111 195 +85 236 +79 132 +157 415 +29 158 +127 159 +470 391 +237 213 +380 427 +361 496 +119 120 +401 251 +439 40 +162 243 +194 112 +149 290 +204 102 +47 84 +166 272 +414 215 +492 409 +14 279 +338 382 +26 178 +325 394 +297 301 +239 416 +60 190 +484 271 +473 460 +381 27 +342 350 +210 86 +334 222 +435 478 +68 347 +375 33 +356 309 +168 462 +376 432 +248 498 +92 316 +173 100 +412 131 +274 470 +60 406 +275 356 +107 60 +458 258 +404 32 +418 119 +224 422 +105 46 +120 423 +24 90 +372 102 +489 159 +155 368 +176 198 +185 472 +120 121 +276 317 +166 165 +274 49 +247 453 +436 181 +169 347 +163 328 +428 52 +251 441 +356 33 +195 148 +16 2 +87 43 +270 326 +51 389 +338 334 +5 296 +423 224 +48 474 +382 183 +173 320 +480 297 +63 27 +318 28 +284 399 +233 177 +368 214 +253 386 +262 495 +92 204 +130 319 +392 282 +397 146 +210 341 +114 149 +253 294 +283 10 +219 424 +431 384 +156 77 +33 279 +107 114 +265 117 +37 447 +479 236 +360 388 +414 189 +341 213 +378 175 +476 243 +157 230 +360 276 +140 6 +275 21 +436 213 +18 16 +316 181 +327 399 +420 89 +139 62 +493 317 +466 346 +489 168 +165 319 +260 460 +378 336 +321 388 +356 405 +154 382 +246 98 +397 348 +12 409 +173 19 +11 155 +397 133 +296 247 +371 387 +404 400 +411 490 +408 68 +269 331 +94 436 +230 4 +77 212 +371 309 +337 347 +191 494 +378 136 +147 482 +132 329 +306 159 +129 368 +231 198 +273 315 +154 432 +137 218 +13 261 +95 451 +173 387 +317 433 +424 254 +266 435 +355 243 +27 323 +9 498 +445 371 +179 302 +437 294 +404 285 +152 466 +20 119 +245 32 +389 487 +294 493 +472 135 +47 47 +390 228 +16 432 +364 196 +161 223 +244 306 +22 75 +9 497 +197 124 +24 183 +430 10 +434 163 +262 339 +389 132 +163 453 +271 39 +104 40 +277 175 +433 408 +390 94 +419 445 +403 374 +375 353 +255 183 +246 32 +286 412 +298 21 +492 436 +409 46 +369 146 +311 355 +40 36 +76 475 +88 258 +255 218 +393 480 +194 5 +296 121 +97 123 +348 389 +151 391 +324 152 +197 284 +321 400 +273 62 +413 374 +165 393 +351 137 +123 385 +489 248 +242 406 +108 178 +469 99 +257 448 +147 290 +72 459 +250 433 +87 93 +358 36 +376 83 +45 121 +30 205 +147 442 +40 43 +292 175 +185 354 +163 71 +497 2 +366 367 +176 117 +120 229 +377 14 +452 145 +358 219 +307 418 +64 233 +285 112 +108 288 +500 360 +220 34 +270 117 +207 220 +288 287 +44 390 +263 401 +92 20 +179 480 +170 441 +190 178 +491 355 +404 276 +136 192 +149 414 +207 454 +491 373 +81 345 +363 254 +176 195 +352 89 +492 492 +168 194 +51 339 +197 427 +251 279 +12 357 +235 474 +393 16 +263 77 +125 9 +324 106 +26 176 +14 442 +58 395 +1 288 +347 134 +309 497 +409 340 +425 284 +322 238 +290 191 +10 227 +15 407 +228 304 +372 482 +394 431 +179 227 +405 112 +137 65 +263 422 +240 457 +190 169 +405 358 +73 57 +64 150 +126 248 +263 270 +275 385 +188 204 +403 62 +245 102 +436 452 +24 391 +75 458 +354 116 +132 144 +301 345 +317 341 +313 190 +282 33 +167 206 +396 176 +261 389 +290 300 +149 491 +104 208 +16 336 +161 170 +22 265 +125 404 +23 352 +291 71 +144 431 +38 434 +331 270 +491 239 +487 227 +459 6 +258 118 +458 11 +173 5 +388 367 +68 137 +491 163 +491 69 +1 336 +240 336 +321 237 +210 242 +182 153 +399 488 +281 443 +314 46 +70 125 +103 423 +52 88 +439 490 +348 388 +421 159 +172 97 +406 497 +270 156 +374 147 +187 267 +468 167 +414 66 +67 337 +171 9 +155 132 +431 74 +441 306 +223 19 +248 314 +72 127 +118 132 +3 492 +332 283 +45 407 +440 45 +335 380 +322 366 +107 402 +179 149 +39 282 +328 419 +425 482 +237 152 +143 194 +313 17 +473 280 +358 34 +431 175 +453 457 +53 465 +78 111 +309 495 +394 282 +330 70 +347 318 +187 112 +129 480 +174 62 +486 407 +135 49 +420 463 +182 199 +293 167 +425 421 +144 16 +224 330 +337 100 +207 56 +40 419 +18 106 +82 258 +363 139 +47 167 +83 344 +93 237 +216 203 +19 473 +81 364 +128 79 +323 283 +317 185 +495 210 +409 251 +118 178 +383 148 +375 259 +240 251 +355 258 +1 111 +245 52 +175 363 +270 154 +95 443 +53 345 +476 397 +402 455 +36 328 +333 412 +120 400 +143 231 +43 179 +240 487 +464 87 +333 279 +137 442 +176 484 +30 251 +354 111 +48 254 +329 7 +222 380 +426 150 +295 301 +271 258 +239 458 +345 188 +377 130 +275 244 +80 345 +309 395 +33 206 +489 7 +287 48 +272 340 +224 54 +277 310 +163 93 +378 166 +274 250 +40 244 +133 341 +457 323 +366 362 +384 154 +354 456 +389 297 +490 110 +147 76 +142 94 +454 401 +82 21 +470 375 +481 424 +269 173 +213 335 +338 22 +30 67 +422 116 +243 102 +233 456 +176 373 +198 353 +151 441 +411 234 +200 485 +91 223 +10 309 +475 165 +92 61 +345 473 +395 149 +99 315 +276 351 +152 490 +142 135 +1 84 +471 275 +267 432 +408 435 +381 393 +412 310 +199 405 +236 234 +466 332 +340 80 +416 122 +169 381 +488 148 +331 154 +449 231 +205 358 +106 92 +35 38 +165 451 +3 110 +452 80 +158 14 +318 396 +315 245 +291 279 +130 164 +401 170 +105 366 +467 291 +421 184 +78 261 +389 427 +86 490 +196 106 +473 491 +210 223 +437 46 +250 79 +308 457 +290 330 +125 369 +8 428 +95 273 +324 335 +464 443 +254 12 +404 221 +332 119 +263 74 +245 212 +286 113 +133 444 +156 192 +214 359 +151 193 +59 148 +35 478 +441 355 +357 487 +99 480 +335 325 +420 354 +5 356 +174 101 +92 231 +446 193 +410 81 +260 468 +308 125 +495 105 +402 270 +462 355 +415 422 +190 271 +253 264 +347 238 +407 59 +287 222 +339 246 +401 46 +274 139 +373 162 +328 345 +365 303 +305 148 +495 123 +35 36 +461 127 +327 497 +183 317 +450 238 +408 171 +120 476 +183 327 +419 35 +116 168 diff --git a/Algorithms Specialization/Part 3/knapsack/input_random_5_10_10.txt b/Algorithms Specialization/Part 3/knapsack/input_random_5_10_10.txt new file mode 100644 index 0000000..2f37742 --- /dev/null +++ b/Algorithms Specialization/Part 3/knapsack/input_random_5_10_10.txt @@ -0,0 +1,11 @@ +10 10 +4 5 +2 3 +3 5 +2 3 +4 3 +3 3 +4 4 +5 1 +4 4 +3 5 diff --git a/Algorithms Specialization/Part 3/knapsack/knapsack1.txt b/Algorithms Specialization/Part 3/knapsack/knapsack1.txt new file mode 100644 index 0000000..0e9ccca --- /dev/null +++ b/Algorithms Specialization/Part 3/knapsack/knapsack1.txt @@ -0,0 +1,101 @@ +10000 100 +16808 250 +50074 659 +8931 273 +27545 879 +77924 710 +64441 166 +84493 43 +7988 504 +82328 730 +78841 613 +44304 170 +17710 158 +29561 934 +93100 279 +51817 336 +99098 827 +13513 268 +23811 634 +80980 150 +36580 822 +11968 673 +1394 337 +25486 746 +25229 92 +40195 358 +35002 154 +16709 945 +15669 491 +88125 197 +9531 904 +27723 667 +28550 25 +97802 854 +40978 409 +8229 934 +60299 982 +28636 14 +23866 815 +39064 537 +39426 670 +24116 95 +75630 502 +46518 196 +30106 405 +19452 299 +82189 124 +99506 883 +6753 567 +36717 338 +54439 145 +51502 898 +83872 829 +11138 359 +53178 398 +22295 905 +21610 232 +59746 176 +53636 299 +98143 400 +27969 413 +261 558 +41595 9 +16396 969 +19114 531 +71007 963 +97943 366 +42083 853 +30768 822 +85696 713 +73672 902 +48591 832 +14739 58 +31617 791 +55641 680 +37336 7 +97973 99 +49096 320 +83455 224 +12290 761 +48906 127 +36124 507 +45814 771 +35239 95 +96221 845 +12367 535 +25227 395 +41364 739 +7845 591 +36551 160 +8624 948 +97386 218 +95273 540 +99248 386 +13497 886 +40624 421 +28145 969 +35736 916 +61626 535 +46043 12 +54680 153 diff --git a/Algorithms Specialization/Part 3/knapsack/knapsack_big.txt b/Algorithms Specialization/Part 3/knapsack/knapsack_big.txt new file mode 100644 index 0000000..20cce77 --- /dev/null +++ b/Algorithms Specialization/Part 3/knapsack/knapsack_big.txt @@ -0,0 +1,2001 @@ +2000000 2000 +16808 241486 +50074 834558 +8931 738037 +27545 212860 +77924 494349 +64441 815107 +84493 723724 +7988 421316 +82328 652893 +78841 402599 +44304 631607 +17710 318556 +29561 608119 +93100 429390 +51817 431959 +99098 365899 +13513 90282 +23811 467558 +80980 743542 +36580 896948 +11968 883369 +1394 604449 +25486 562244 +25229 333236 +40195 157443 +35002 696933 +16709 539123 +15669 202584 +88125 759690 +9531 69730 +27723 110467 +28550 651058 +97802 231944 +40978 186803 +8229 572887 +60299 797491 +28636 692529 +23866 503157 +39064 243688 +39426 182032 +24116 262772 +75630 246257 +46518 605917 +30106 685556 +19452 522241 +82189 419114 +99506 622799 +6753 512332 +36717 489578 +54439 869423 +51502 771067 +83872 884103 +11138 450309 +53178 444804 +22295 405168 +21610 527012 +59746 255432 +53636 702071 +98143 264607 +27969 227173 +261 471962 +41595 807033 +16396 471595 +19114 520773 +71007 21653 +97943 882635 +42083 801161 +30768 806299 +85696 402599 +73672 858413 +48591 122945 +14739 256166 +31617 350118 +55641 783545 +37336 518571 +97973 17616 +49096 640048 +83455 74134 +12290 610321 +48906 141662 +36124 589402 +45814 638947 +35239 751616 +96221 533618 +12367 850339 +25227 670142 +41364 699869 +7845 269378 +36551 198914 +8624 98356 +97386 122211 +95273 646654 +99248 231210 +13497 806666 +40624 153773 +28145 427188 +35736 90282 +61626 23855 +46043 585365 +54680 654728 +75245 593439 +78819 117073 +87693 903554 +12992 357458 +22670 469393 +89554 642617 +75826 568850 +29663 532884 +33809 531783 +22762 171022 +37336 833090 +77996 467191 +62768 784279 +29875 716017 +40557 519305 +68873 549766 +20095 435262 +13756 171022 +51408 709411 +30194 111935 +15681 116706 +16856 669408 +70964 512332 +86677 892544 +63250 836026 +77845 418747 +60809 531049 +28652 532884 +45204 478201 +96532 514167 +95420 866487 +42010 780976 +87930 258368 +44055 202217 +76738 877864 +47318 901352 +4201 634910 +21565 69730 +6649 16515 +25551 203685 +41977 835292 +38555 736202 +2505 215429 +34749 905022 +59379 171389 +78210 744276 +78554 485174 +50448 394158 +80774 697300 +64306 324061 +70054 724825 +84631 377643 +5401 191941 +95371 695098 +83017 107164 +8156 807033 +15558 218365 +53179 670142 +87358 219466 +27879 757121 +74820 194143 +83134 660600 +23721 531783 +6634 32663 +76032 528480 +60590 884470 +98878 569584 +79359 553436 +77255 80373 +14916 269378 +45481 776205 +69956 608853 +37108 143497 +40001 213961 +45036 344613 +61114 472696 +29594 539123 +98355 675647 +25358 809235 +13730 649223 +76564 218365 +60918 373606 +19420 63491 +47748 105696 +55396 600045 +4474 913096 +11749 417279 +5659 576190 +45407 777306 +39825 916399 +974 70097 +46898 715650 +3951 50646 +88481 562978 +13901 764828 +62534 772535 +17004 569217 +20951 344246 +58781 576557 +41833 484073 +33550 262405 +6250 548665 +66311 846302 +984 237082 +92041 86245 +73651 451043 +53230 873827 +17747 340209 +87231 470861 +70777 354889 +68245 560409 +47697 456181 +29065 364064 +56599 853642 +69941 86245 +89552 891443 +27206 238183 +80419 708677 +59650 713448 +83321 593439 +22013 800794 +54789 811070 +24009 64592 +65325 643718 +51258 547197 +35691 770333 +62411 360027 +90554 384983 +90961 242220 +51404 456181 +7308 263873 +44911 44774 +92800 210658 +20172 702438 +34415 522608 +16642 883002 +55349 229375 +14316 229375 +81446 587567 +72221 702071 +9240 681152 +41306 439666 +82254 569217 +15167 44040 +59305 492514 +45899 274516 +1721 647388 +51581 173591 +49353 713448 +78699 803363 +60812 626469 +56892 885204 +31729 70097 +51662 300940 +3121 193409 +17159 448107 +69628 266075 +53712 737303 +29595 767030 +1728 778774 +98796 623166 +37443 173958 +85007 28993 +66925 438198 +27098 28993 +67104 736202 +80109 49178 +2282 51013 +43711 456548 +1906 245890 +67782 447740 +70792 346815 +97866 424252 +29537 643351 +57126 605917 +80168 124413 +477 792353 +21577 216530 +77468 571419 +27385 373973 +25211 910160 +28212 37434 +19519 788316 +21935 671977 +80768 843366 +49819 30461 +11826 765562 +58029 693263 +78035 197813 +51241 914564 +86541 80006 +90936 640415 +48049 103127 +87012 148268 +53065 755286 +17238 601146 +70246 643351 +70416 446272 +24711 83676 +63038 601146 +68448 270846 +41694 471962 +67130 793454 +33980 25323 +95526 631974 +74959 279287 +11801 837127 +87671 310482 +80847 29727 +9544 481504 +85937 343145 +97720 712347 +91248 681519 +28360 177628 +45036 308647 +83913 383148 +45990 226072 +63735 870891 +520 608486 +67046 170288 +26662 853642 +82820 815474 +22904 485174 +36799 171022 +14005 75969 +680 373239 +7392 11377 +64925 211025 +57122 750148 +77107 175426 +51704 577658 +71033 300206 +61655 729596 +42218 330300 +57290 271580 +84748 344246 +89880 890342 +1517 266809 +82763 677482 +49040 687391 +5904 592338 +10762 475632 +61467 211025 +44558 659866 +26956 747579 +21495 751983 +92222 148635 +2294 546096 +42233 803730 +34792 782811 +49153 468292 +73571 862083 +27440 422784 +35800 547931 +91836 119642 +46044 903187 +74087 11744 +39151 263873 +18624 324428 +9606 760057 +37312 718953 +77993 321125 +38700 550133 +80640 181665 +25837 614358 +82858 9542 +83329 456548 +74411 253964 +85177 320391 +72092 745377 +84712 129551 +91027 364798 +10791 740973 +59365 256900 +24885 536554 +41442 323694 +16180 252863 +94538 438198 +87562 642250 +74166 892911 +57733 838228 +47855 547197 +9848 299105 +40463 519672 +43820 80006 +13378 225338 +43837 82942 +32300 419114 +34760 867588 +74391 500955 +30049 203685 +59045 26424 +40151 554904 +41296 197079 +95732 58720 +28246 573254 +46058 332135 +93929 177995 +62174 629038 +9670 147534 +4504 873827 +18676 450676 +24301 914197 +40263 659132 +68264 545729 +24890 524443 +76736 863551 +31365 262772 +50964 410306 +85653 263506 +57317 293233 +61421 58353 +7451 223136 +78742 240385 +99197 178729 +2502 619863 +93129 860248 +77449 41104 +17254 534352 +69330 184601 +33720 367367 +38821 862817 +81080 44407 +94411 366266 +66114 185702 +98139 389020 +46045 216163 +98394 321859 +981 538022 +45597 208089 +67371 397461 +6544 836393 +62853 536921 +76825 856211 +82381 835292 +71858 673445 +59499 253597 +52846 637479 +68510 375808 +96850 896214 +19291 907591 +85744 97989 +36386 749047 +86276 493248 +11152 843733 +75252 74134 +32784 804831 +66438 447740 +7699 873827 +83138 347549 +45879 875295 +70343 314519 +45961 662802 +35141 228641 +43567 609220 +563 114504 +41970 721889 +12624 847770 +17314 450309 +27011 782811 +76979 415811 +7395 42939 +87657 633075 +61787 423518 +54545 680051 +8777 22754 +74253 642984 +75515 14680 +95020 29360 +66672 310482 +56664 101292 +84025 546463 +16855 720788 +14982 751249 +86289 257267 +8360 856578 +55380 560776 +19462 674913 +8354 849238 +85789 906857 +69881 895847 +38284 303142 +237 855110 +98568 353054 +47940 451410 +69652 48811 +9267 640415 +111 11010 +86328 820245 +25582 745377 +7937 250661 +45436 715283 +66973 184234 +19799 778040 +74588 571786 +69090 86245 +29091 784646 +66613 883369 +72113 21653 +51952 540591 +3322 410306 +55129 850339 +28601 104228 +49755 254331 +55195 428656 +48633 722623 +58778 149736 +18633 499120 +86384 131386 +37154 588668 +98522 914197 +9819 361495 +66901 55417 +74121 362229 +33600 582429 +27145 390488 +40871 298738 +4600 309748 +74619 368101 +79453 143864 +52801 734000 +44841 895480 +86386 107898 +24516 877130 +14879 11010 +18562 376909 +28049 591237 +49441 336539 +18771 747212 +40252 427555 +5870 45141 +72470 833824 +8173 477834 +52126 31195 +98851 889608 +11244 81107 +25870 266442 +41395 105696 +26393 240018 +9525 389754 +39520 545729 +81563 285526 +3726 176527 +5950 333236 +37323 66060 +60094 485908 +85123 695098 +26367 398929 +71024 556372 +66640 416545 +8794 681152 +59179 372872 +56772 86245 +51356 797858 +68490 587200 +67121 642617 +10313 176160 +33348 127349 +32852 402599 +25812 271947 +91737 773636 +29608 779141 +87867 301307 +41413 698034 +14041 177995 +34258 571052 +88296 292132 +42252 345347 +92695 437464 +51139 339108 +19876 332135 +94293 868689 +14563 16882 +93237 747579 +83874 734000 +27485 734367 +54120 609220 +99329 619129 +263 449942 +5717 293967 +92173 438932 +44001 91383 +61399 552702 +89546 254698 +12301 898783 +52193 452144 +14784 411407 +69802 322226 +46222 89181 +24514 555271 +32532 75969 +45820 808868 +46857 233045 +64255 249193 +49815 649223 +66538 40370 +47298 505726 +25761 418013 +80192 799326 +54175 458016 +14878 412875 +94785 455447 +6751 870524 +45000 848504 +99610 675647 +55365 606651 +32813 613624 +24135 177995 +93584 433794 +14260 402966 +754 651792 +79322 812538 +65254 684455 +36097 720421 +30662 296536 +27492 84043 +42921 905022 +81688 573621 +55473 265708 +55642 12111 +82952 493982 +58446 712714 +49475 822814 +96177 417279 +25827 788683 +23345 460952 +85980 621698 +68130 490312 +59849 858780 +5618 865019 +47839 910894 +88930 409205 +29969 669041 +25200 811437 +59830 39269 +3489 489945 +2820 386818 +91138 760057 +80319 370303 +80684 500955 +91121 310115 +89962 86979 +11019 480403 +79947 830521 +31479 715650 +25064 716384 +71507 487376 +78969 133588 +4120 517103 +49678 676381 +78954 905022 +51854 149736 +8272 794188 +40205 286627 +28033 104228 +83532 623900 +9469 226072 +52611 148268 +67271 613624 +6266 660967 +43280 84777 +75328 402966 +25364 620964 +75767 92851 +3084 805565 +26185 337640 +44157 648122 +63665 15414 +57887 586833 +44925 557106 +195 422417 +36768 109733 +6911 186436 +56806 793087 +79653 110834 +73586 457649 +97807 78905 +17961 505726 +10404 55784 +1086 325896 +48586 907224 +30485 416178 +55201 100191 +80101 117073 +28200 564446 +4429 216530 +93918 235614 +87803 403333 +56579 692896 +20790 496918 +60596 59821 +42320 533985 +20722 190840 +98515 348650 +75707 677849 +34627 164783 +23802 230843 +97645 616193 +23259 658765 +3132 276718 +60721 690327 +61025 446639 +80509 309381 +19398 707943 +78315 171389 +34000 513800 +92534 558574 +80540 457649 +58822 61289 +76537 726293 +14663 573254 +14494 426454 +74989 349384 +6839 822814 +64892 717485 +50561 900251 +44093 210291 +89776 625001 +30414 895480 +16637 850339 +23348 471962 +54833 766296 +28929 407003 +40880 877130 +39055 17983 +32538 316354 +4422 67528 +51035 164049 +19417 294334 +81939 192675 +35184 735101 +81097 109733 +70525 902453 +60364 721889 +73013 765195 +72203 877864 +61537 513066 +2209 152672 +8032 47710 +32096 685556 +13113 151938 +29938 909793 +15686 815841 +84382 746845 +99909 865019 +99440 445538 +96120 408838 +75000 358192 +74516 291031 +59923 474531 +3981 581328 +26886 306078 +56326 149369 +46995 605917 +52603 461686 +28481 481504 +92835 316721 +98882 427555 +33459 588668 +74993 713081 +48652 441501 +8543 506460 +49636 580961 +21873 269745 +47323 338374 +78442 572520 +85780 168820 +47161 8808 +64956 177628 +29365 356724 +19314 212126 +34329 491046 +19856 145332 +3882 800060 +99905 65693 +77617 574722 +48865 345347 +32123 216530 +4944 81841 +85119 542793 +52189 822080 +17640 481504 +70344 635277 +36220 725559 +3318 725559 +27783 747212 +47860 142763 +35591 789050 +44011 767030 +53016 718219 +28543 727761 +48271 81474 +3009 348283 +31100 637112 +38214 226439 +42952 508295 +3503 699135 +14954 819511 +17917 915298 +11870 25323 +23504 536187 +74330 494349 +13383 238183 +9353 311216 +32527 267910 +78756 725192 +2953 48811 +67423 128450 +43787 478201 +41880 701704 +78891 838962 +14687 406636 +68828 222035 +199 206988 +70818 798592 +73477 147167 +31564 288829 +6384 353054 +29723 252129 +32792 840797 +6143 113770 +31554 317822 +22381 906123 +64916 150103 +37111 531783 +11559 909426 +11434 327731 +62660 429757 +17563 212493 +49755 387552 +33527 890342 +27596 286627 +81178 441501 +69159 580961 +6021 860615 +64728 721889 +59463 789784 +22938 668674 +46058 828686 +908 470494 +94259 797124 +17344 31562 +22282 707943 +81458 113403 +90118 842632 +85625 905756 +61460 119275 +42217 223870 +96852 256900 +92923 728862 +38616 510864 +51362 423518 +17232 440033 +26124 162948 +87445 83309 +96239 523342 +59360 177628 +21266 661701 +18388 378744 +63949 523709 +15425 656196 +42776 834191 +34990 905756 +90846 222402 +57258 365532 +13262 844100 +57105 348650 +57032 81107 +84687 61656 +38644 59087 +5649 452878 +97318 75235 +70126 70097 +7864 328832 +46681 638947 +60980 275984 +86815 889608 +72190 295802 +94906 131753 +13615 17616 +79309 103127 +69450 85144 +56030 569951 +87867 790151 +58986 825383 +77519 436363 +70580 205887 +13384 570685 +30560 792720 +21175 104228 +22676 682620 +89437 393057 +42916 345347 +13014 906490 +72493 729229 +84084 654728 +25848 916766 +32707 140194 +42307 80740 +4115 726660 +84471 597476 +28618 678216 +22305 70097 +49664 248826 +49899 60188 +48657 601880 +53013 423885 +96281 572520 +79105 398195 +52074 516736 +92980 539123 +48270 881167 +5632 771801 +25634 520406 +52521 543527 +77598 282223 +36872 73767 +93321 805565 +28019 248459 +20518 732532 +12614 192308 +91357 62023 +88595 650691 +35671 469026 +21650 123679 +76426 378744 +91892 796390 +81218 203318 +42655 64959 +63902 493982 +96393 822447 +24971 502056 +56188 651425 +31566 132854 +12972 545362 +71161 385717 +40776 141662 +69695 230109 +31535 429757 +34415 371037 +40424 70097 +73078 91016 +25628 497652 +85575 255065 +98840 183867 +68184 32296 +50531 842999 +82607 293233 +2013 830888 +31939 325529 +5322 913830 +39228 562978 +24461 636745 +43488 310115 +11582 756020 +39195 23855 +51296 409205 +33420 166251 +63444 719687 +68707 422050 +26594 680785 +31227 100191 +42734 881534 +95297 52481 +18062 623166 +21378 502056 +50523 615826 +1053 516736 +55181 212860 +57152 542793 +94974 280021 +30418 241486 +12466 864285 +22740 140194 +25008 822080 +52431 157443 +37826 322226 +8328 829787 +13498 638213 +58226 315620 +98823 230476 +32554 688859 +69469 455447 +37425 171389 +74278 826851 +80501 757121 +31602 455814 +30699 632341 +14550 809969 +77128 565547 +60 37067 +54671 68262 +7225 502790 +5021 712347 +5220 498386 +38696 582429 +25665 507928 +95119 740606 +13724 819511 +43755 280388 +38588 433427 +4914 560042 +4158 171022 +40583 405902 +40963 49545 +98441 611055 +21171 583163 +45202 25690 +51621 23488 +30318 189739 +31753 40737 +63236 149369 +10832 73033 +51852 344613 +55452 150103 +45550 815107 +26235 445171 +49224 379845 +86772 447006 +8960 669408 +75346 643351 +59724 694364 +51820 184968 +34887 501322 +17393 262405 +84947 714182 +29366 304610 +2757 307179 +97918 745377 +83696 386451 +6865 409205 +90792 583897 +13757 809602 +19898 216530 +75310 702805 +46023 295435 +76900 645186 +71721 548298 +50149 66794 +95777 123312 +76834 349384 +95194 418747 +8009 782077 +86767 683721 +36631 165517 +69187 913463 +67670 643718 +75159 601513 +52400 579860 +83115 333970 +95057 708310 +10054 336172 +75776 136157 +89556 359293 +45049 331034 +99453 778407 +1632 762626 +52264 11010 +98920 209924 +28202 460952 +98583 884470 +38997 74501 +63502 635644 +50931 481137 +66421 831989 +82152 743175 +93171 565547 +85158 80006 +48016 213961 +53862 820612 +91174 844100 +93087 494349 +13053 640048 +74380 84777 +23433 126615 +65773 708310 +30188 532517 +95609 888874 +97037 769232 +18479 711246 +44089 49912 +84510 72666 +15124 688125 +78124 73033 +23880 702805 +61675 256533 +51432 36333 +4972 414710 +66195 765929 +4657 439666 +58217 127349 +6814 731064 +50258 728862 +51558 331034 +1237 729596 +27534 413242 +48911 644452 +53267 902820 +45109 709044 +62174 834191 +67897 388286 +23225 160379 +45409 193409 +79562 193409 +43572 445905 +76115 270846 +41290 660233 +91860 101659 +8695 139460 +52928 904655 +50843 89548 +52122 622065 +43581 638580 +8810 873827 +5484 237816 +48439 718953 +80939 95420 +86482 85511 +4551 440400 +41176 298371 +78275 310482 +98843 913463 +29821 736936 +49806 507928 +49221 188638 +37904 649223 +38851 607752 +35363 835292 +47071 455447 +69143 697300 +64736 866487 +38735 165517 +39875 478201 +17391 851807 +63007 887406 +16044 813639 +21356 297637 +41976 653260 +47376 712347 +18198 864652 +40538 653260 +14784 539857 +20177 387552 +25083 76336 +99152 230476 +15306 706108 +76378 288829 +23791 365532 +18397 652159 +28232 462787 +80607 323694 +90471 499120 +21358 474898 +4054 899517 +75281 502790 +35084 727027 +82583 744276 +79564 704273 +4638 910894 +74688 568483 +19952 678216 +11623 220567 +69631 351219 +31507 10643 +74718 826851 +49140 418380 +71693 422784 +96145 121110 +18084 436363 +11866 149736 +33388 313051 +92288 471595 +46680 460952 +10364 132854 +18000 296169 +21502 380946 +97206 613991 +26245 827585 +53077 649590 +69320 338374 +52989 780609 +36153 581695 +24559 693263 +51682 175059 +33217 206621 +69246 51380 +13686 498019 +814 28993 +48106 524076 +49655 597843 +98471 40003 +13980 377276 +80040 146066 +79946 353054 +53749 411407 +95178 900985 +27492 524810 +499 96521 +12005 265708 +25557 909059 +83134 101292 +21293 610688 +24271 24956 +5354 215429 +70129 582429 +91083 533618 +49301 106797 +73456 463521 +25385 62390 +95848 513800 +12489 711246 +84309 754919 +32775 630873 +8262 854743 +23925 675280 +96390 342778 +13345 284425 +37748 707209 +43968 117807 +74577 680051 +60837 423518 +92147 136524 +99758 568116 +89597 729963 +28382 453245 +79295 890709 +23805 92851 +90688 822080 +42218 858046 +35294 817309 +29939 243688 +19488 290297 +12681 501689 +53527 767030 +8708 481137 +57618 125881 +82639 229742 +19546 741707 +56126 888874 +93880 508662 +61642 303509 +43982 834558 +76326 230109 +93894 98723 +14564 553436 +25502 625368 +76941 325162 +14330 149002 +42281 198914 +85475 197079 +78777 914564 +87705 491413 +34969 820979 +91267 828686 +66375 617661 +39822 820979 +4416 261304 +29842 322593 +50159 342411 +3766 617294 +37762 349017 +30273 890342 +6195 358926 +65255 633809 +517 642617 +27684 821713 +15114 328098 +55545 685189 +1760 705374 +74673 467558 +21173 814740 +75230 148635 +77144 349017 +56510 662435 +49185 439666 +59512 36333 +18384 600412 +15786 22754 +70761 909059 +32990 205153 +39734 488844 +38586 697667 +7586 751616 +21175 466090 +38664 26424 +23304 501322 +70364 765929 +63992 313051 +71090 681519 +89830 357458 +570 147901 +66532 59454 +6712 434161 +18097 297637 +70805 499120 +80889 416545 +43821 895480 +68366 829787 +63373 732899 +50381 63858 +7901 655462 +62619 341677 +91920 624634 +70764 784279 +2059 278186 +85468 673078 +12552 418013 +5896 325162 +62430 605917 +76992 535086 +45461 397461 +54993 913830 +43240 675647 +80385 522241 +83514 753084 +98309 754552 +86121 416545 +67246 125514 +30880 520773 +59703 750882 +36168 131753 +95970 443703 +89830 215062 +54619 139460 +68806 166251 +63838 774003 +57130 752350 +59916 269378 +47473 151571 +50161 189372 +74280 101659 +85325 139460 +60781 219099 +76559 200749 +52116 908692 +49622 296536 +21946 346448 +36096 283324 +79011 371404 +43283 71932 +98283 748313 +92302 372872 +59636 18717 +12685 213227 +46606 396727 +65778 766296 +40050 586833 +76545 800060 +91625 262772 +77062 657297 +55639 653994 +47508 401865 +47014 254331 +84852 901719 +85699 826484 +47801 697667 +21090 358559 +74500 729596 +26675 439299 +11529 563712 +64648 750515 +13294 650691 +56169 785380 +77477 122945 +13054 497652 +82488 407370 +88520 572520 +54807 824282 +92232 485541 +41350 183500 +4210 93585 +14633 571052 +42985 895113 +14554 219099 +59389 127716 +59939 515268 +80608 867588 +21159 506093 +89176 708677 +69493 248826 +22030 656563 +69861 135790 +84028 437097 +91440 539123 +93365 355990 +49137 758222 +3012 426087 +40656 380946 +93160 307179 +42650 716751 +42173 901719 +91991 254698 +16743 113403 +93022 689593 +69835 482605 +81294 240752 +4102 214695 +58249 689960 +82333 102026 +98766 82942 +59003 854009 +20720 794555 +82438 627937 +50737 824649 +34009 387185 +50934 688492 +38 193042 +49695 124046 +36011 148635 +75906 477467 +23208 106430 +75575 460585 +91908 876763 +90815 457649 +55440 286994 +81088 556739 +24449 670509 +27314 354155 +96561 674913 +7671 53215 +74957 275617 +40227 763360 +45323 259469 +65200 850339 +99897 100558 +29342 915665 +70436 281122 +72472 625001 +70108 707943 +56293 486642 +44553 548665 +53014 174692 +77604 282223 +20418 131386 +61989 263139 +1044 96154 +99689 481137 +1767 361862 +47639 354155 +21168 297637 +88123 107898 +49332 150103 +74121 757855 +81465 618395 +38206 32663 +97843 291031 +12189 321859 +86686 786481 +60674 277452 +93398 149369 +51253 655095 +10387 248459 +89718 342411 +80724 340576 +93197 916399 +37080 114871 +50843 198547 +89598 871625 +12312 414710 +55545 671977 +33926 24222 +28073 355256 +5458 117073 +74328 159645 +40783 694731 +43145 478935 +31814 485174 +13902 580227 +88724 500955 +38965 371037 +11459 367367 +15344 881901 +35528 239651 +55134 288462 +25542 742808 +69900 563712 +26731 109366 +63577 849972 +49508 693630 +84399 611789 +52416 840063 +93648 251028 +95476 872359 +3187 366633 +12248 460585 +34039 273048 +20703 817676 +24080 246991 +21147 766663 +42441 706475 +34442 227173 +98503 498019 +25370 48077 +63909 355256 +41844 649957 +87081 205887 +93003 291765 +65971 222769 +5588 187904 +29109 751616 +30206 773269 +74415 282223 +49666 142029 +12160 334337 +61391 612156 +16883 320758 +22904 701704 +17185 495083 +68605 911995 +45028 850339 +46525 702438 +7415 901719 +4949 13579 +93905 306078 +66836 177995 +61137 503157 +78526 78905 +83955 585365 +42234 303876 +2231 12845 +7371 435996 +11305 35232 +84680 894746 +17656 548298 +92680 561877 +76721 71198 +73502 351219 +11350 292132 +48803 216897 +23505 95787 +27161 205887 +61929 23488 +10102 657297 +68383 166985 +74986 355990 +14824 99824 +46769 305711 +38928 851440 +8275 475999 +29238 389754 +17321 507194 +24813 314886 +26684 131386 +87542 716384 +25068 602981 +16289 528480 +25034 177995 +87282 374707 +93233 12111 +75751 95787 +74971 578392 +15024 167719 +8575 90282 +43819 484440 +98201 480403 +26792 539490 +10120 576924 +91794 650324 +83080 458750 +7519 268277 +52499 556372 +53658 59821 +76769 801528 +9427 841531 +76653 680051 +64994 155975 +67442 85878 +40708 339475 +60764 561877 +11923 55784 +9259 430858 +55047 909793 +78164 55784 +71911 104962 +38774 473430 +35233 487009 +21308 248826 +94485 94319 +4136 433060 +31699 892177 +45627 826851 +76135 732532 +45069 837494 +32600 296169 +41570 397828 +27397 583163 +12874 564446 +13012 424252 +70901 97622 +2380 917133 +67070 42939 +8415 653994 +46885 607018 +24645 623166 +9128 663536 +61400 91383 +72496 772902 +21292 647021 +49539 42205 +59454 703539 +95124 598944 +25981 172490 +76874 88080 +34181 275250 +44294 721522 +90144 656196 +71947 761892 +65776 32296 +18777 473063 +48336 398195 +7449 537655 +98163 206988 +57248 187170 +60815 420215 +66631 656930 +87857 487009 +98344 660233 +10016 434161 +51143 609220 +524 129551 +70013 310849 +53381 319657 +14158 463521 +59224 30461 +20007 786481 +51377 493982 +73939 269745 +77267 801895 +54310 530315 +27397 485908 +9297 860615 +56736 684822 +3659 167719 +83904 334337 +1847 466457 +65951 688492 +53628 435996 +80153 635644 +19785 529214 +64117 841531 +85252 714916 +50684 611055 +12000 847770 +20243 135056 +6837 602614 +67661 221668 +34715 665738 +41067 565547 +9900 434895 +12020 854376 +6644 217264 +8177 873827 +76047 571052 +17721 380212 +29250 898049 +68348 759323 +18477 739138 +6079 654728 +68237 136157 +75640 211025 +86480 374707 +78267 347549 +1607 430858 +357 297270 +73347 378744 +61634 703172 +3591 637846 +48059 54683 +34595 843366 +58098 432326 +41236 420215 +42969 617661 +61465 699502 +89789 867955 +41884 679684 +7832 644085 +69157 703539 +5813 55784 +25753 909793 +84882 232311 +28236 792353 +66425 307179 +2867 126248 +31129 510497 +12334 481137 +61304 343145 +76689 696566 +92490 815107 +62682 829787 +31924 73400 +6453 217264 +82962 768131 +6502 908692 +88994 531783 +19614 77437 +27 778774 +32957 197079 +42307 901352 +98965 849238 +67907 93218 +24720 845568 +8135 531783 +85993 579860 +49595 798959 +19044 590136 +66428 464989 +96965 610688 +39167 422784 +14485 517470 +33322 292866 +56871 622432 +35593 187170 +71130 298738 +94548 31562 +89781 341310 +11698 841898 +33541 476733 +84401 208456 +23782 871992 +71776 150103 +89303 524810 +97012 59821 +34276 40370 +67799 633075 +48738 80373 +73587 75969 +80505 658398 +99460 243688 +16396 538756 +29282 255799 +76269 712347 +9079 838962 +90505 875662 +8527 843733 +97741 561143 +62909 58353 +93060 685556 +25098 82942 +33019 434161 +99158 521507 +20722 517103 +21072 32296 +76023 423518 +38953 587567 +22750 746845 +65705 419481 +6688 163315 +92015 565914 +1060 461686 +32277 192675 +40017 244422 +86073 401498 +45443 785747 +67915 350118 +20130 790151 +13588 441868 +45732 183500 +37586 690327 +95720 336539 +79270 795656 +15654 522241 +40442 166985 +28149 143864 +74227 125147 +37929 741340 +32564 819511 +88748 697667 +72932 667940 +34891 725192 +85724 344613 +5130 536187 +27184 384983 +3375 469760 +9147 913830 +27132 805565 +60156 914197 +19480 436363 +63085 118541 +95875 678216 +96386 473797 +30546 634910 +2901 522608 +84309 830888 +10913 880433 +52951 568116 +32186 407370 +71350 798592 +29969 495817 +54597 772902 +70674 617661 +21686 226072 +35620 373239 +28105 240385 +72430 546830 +6095 768131 +28032 113403 +56270 489578 +23400 894746 +4746 169554 +76656 698401 +35221 440400 +94976 549032 +3769 224971 +23568 309014 +94145 905389 +59191 684088 +89326 69363 +22744 817309 +10313 615826 +52897 803730 +5064 569217 +30828 354889 +20704 302041 +49244 622065 +35601 670876 +31530 126248 +35798 652159 +50917 133221 +45780 747946 +69649 495083 +77149 17249 +74561 210658 +27993 888140 +91518 127716 +92589 871258 +16146 13212 +31780 486275 +42676 142396 +45754 424986 +20541 23855 +28 658031 +63157 28259 +77586 383148 +96707 695832 +76473 162948 +58300 786481 +20447 760791 +13038 55784 +1823 732899 +56455 102760 +43847 598944 +28197 224604 +95753 538389 +77658 736936 +22300 244789 +30904 169187 +64264 774003 +24516 273782 +55622 415444 +90153 399663 +22516 728862 +22624 400764 +55010 444437 +82924 18717 +70743 564446 +72758 278553 +78699 313785 +24163 117073 +39335 492147 +57124 309748 +99084 509763 +97387 295802 +32194 816942 +43610 774737 +31068 205887 +39599 567382 +51053 818043 +97433 571419 +99402 525911 +20142 150470 +32195 513433 +65175 703539 +54938 186436 +66297 121477 +28273 891810 +47434 297270 +65237 477467 +49416 797124 +31312 105696 +10547 394892 +89521 915665 +60827 557840 +15 677849 +55502 314519 +91984 166985 +29946 561877 +43871 206988 +70548 47710 +24782 626102 +13642 523342 +57502 387185 +6224 866854 +98862 847770 +92233 60922 +30741 790518 +53965 303509 +69578 647755 +72056 431592 +78927 299472 +92924 277085 +28940 482972 +43668 827585 +52084 134322 +21674 881534 +2587 526645 +48418 16148 +71794 770333 +18615 532150 +82917 279287 +85208 114137 +73381 139093 +49805 231577 +98845 284058 +59964 797124 +74593 721155 +75721 789417 +82430 308280 +79182 468659 +37556 424986 +47980 588301 +26496 773636 +93251 824282 +86790 666472 +98458 429390 +46383 241119 +18715 499120 +1643 826117 +31313 361862 +53967 801161 +37791 758222 +89490 280755 +27636 574355 +78337 83676 +43324 188638 +38603 558941 +23628 742441 +56106 233779 +8093 723724 +41550 419114 +87109 524810 +33232 473797 +97029 819511 +18545 770333 +39937 201116 +77310 897315 +31291 520039 +4005 410306 +38057 384616 +62018 271947 +40666 719687 +59611 549032 +21189 492881 +82634 525911 +92735 873460 +90651 85511 +4708 340943 +12421 57619 +97722 533985 +27200 329199 +50462 662068 +85191 290664 +70601 631974 +49579 456915 +38894 208823 +6916 685556 +47648 62390 +22752 157076 +87996 420582 +91615 167352 +66420 189372 +73099 561877 +16210 423885 +27646 357825 +41077 8074 +82442 527746 +16816 714549 +25747 790151 +35284 623900 +20134 253964 +15887 560042 +83813 12478 +50283 241486 +67569 757121 +95705 683354 +64813 227540 +98810 628304 +40017 360761 +92262 667940 +42362 94686 +50513 26424 +88057 465723 +55000 567382 +98343 472696 +53524 780976 +83908 740973 +82788 711613 +20058 484073 +40941 895480 +76263 416912 +48122 661701 diff --git a/Algorithms Specialization/Part 3/knapsack/src/lib.rs b/Algorithms Specialization/Part 3/knapsack/src/lib.rs new file mode 100644 index 0000000..7c3cb17 --- /dev/null +++ b/Algorithms Specialization/Part 3/knapsack/src/lib.rs @@ -0,0 +1,61 @@ +pub struct Knapsack { + size: usize, + + items: Vec, +} + +struct Item { + value: u32, + weight: u32, +} + +pub type KnapsackSolution = Vec>; + +pub fn knapsack(problem: &Knapsack) -> KnapsackSolution { + let item_count = problem.items.len(); + let mut solution = vec![vec![0; problem.size + 1]; item_count + 1]; + + for i in 0..item_count + 1 { + for j in 0..problem.size + 1 { + if i == 0 || j == 0 { + solution[i][j] = 0; + } else if problem.items[i - 1].weight as usize <= j { + solution[i][j] = std::cmp::max( + problem.items[i - 1].value + + solution[i - 1][j - problem.items[i - 1].weight as usize], + solution[i - 1][j], + ); + } else { + solution[i][j] = solution[i - 1][j]; + } + } + } + + solution +} + +pub fn read_file(path: &str) -> Knapsack { + let mut file = std::fs::File::open(path).expect("file not found"); + let mut contents = String::new(); + std::io::Read::read_to_string(&mut file, &mut contents) + .expect("something went wrong reading the file"); + + let mut lines = contents.lines(); + let mut first_line = lines.next().unwrap().split_whitespace(); + let size = first_line.next().unwrap().parse::().unwrap(); + let item_count = first_line.next().unwrap().parse::().unwrap(); + let mut items = Vec::with_capacity(item_count); + + for line in lines { + let mut parts = line.split_whitespace(); + let value = parts.next().unwrap().parse::().unwrap(); + let weight = parts.next().unwrap().parse::().unwrap(); + items.push(Item { value, weight }); + } + + Knapsack { size, items } +} + +pub fn optimal_solution(solution: &KnapsackSolution) -> usize { + *solution.last().unwrap().last().unwrap() as usize +} diff --git a/Algorithms Specialization/Part 3/knapsack/src/main.rs b/Algorithms Specialization/Part 3/knapsack/src/main.rs new file mode 100644 index 0000000..f3808f2 --- /dev/null +++ b/Algorithms Specialization/Part 3/knapsack/src/main.rs @@ -0,0 +1,50 @@ +use knapsack::*; + +fn main() { + println!("Knapsack problem solution for: knapsack1.txt"); + println!("Reading File..."); + let problem = read_file("knapsack1.txt"); + println!("Solving..."); + let solution = knapsack(&problem); + println!("Optimal solution: {}", optimal_solution(&solution)); + + println!("Knapsack problem solution for: knapsack_big.txt"); + println!("Reading File..."); + let problem = read_file("knapsack_big.txt"); + println!("Solving..."); + let solution = knapsack(&problem); + println!("Optimal solution: {}", optimal_solution(&solution)); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_file() { + read_file("knapsack1.txt"); + } + + fn test_complete(path: &str, expected: usize) { + let data = read_file(path); + let solution = knapsack(&data); + let solution2 = knapsack_slick(&data); + assert_eq!(optimal_solution(&solution), expected); + assert_eq!(optimal_solution(&solution2), expected); + } + + #[test] + fn input_random_5() { + test_complete("input_random_5_10_10.txt", 14); + } + + #[test] + fn input_random_17() { + test_complete("input_random_17_100_1000.txt", 1993); + } + + #[test] + fn input_random_26() { + test_complete("input_random_26_1000_1000.txt", 18669); + } +} -- 2.51.2