From 82cbb528b14ef9907e6f695dd734f47b87385e46 Mon Sep 17 00:00:00 2001 From: Felix Martin Date: Mon, 15 Feb 2021 18:55:09 -0500 Subject: [PATCH] Finish course 3 week 4 knapsack assignment --- data/c3a4_knapsack1.txt | 101 ++ data/c3a4_knapsack_big.txt | 2001 ++++++++++++++++++++++++++++++++++++ src/knapsack.rs | 33 + src/main.rs | 19 +- src/util.rs | 29 + 5 files changed, 2181 insertions(+), 2 deletions(-) create mode 100644 data/c3a4_knapsack1.txt create mode 100644 data/c3a4_knapsack_big.txt create mode 100644 src/knapsack.rs diff --git a/data/c3a4_knapsack1.txt b/data/c3a4_knapsack1.txt new file mode 100644 index 0000000..0e9ccca --- /dev/null +++ b/data/c3a4_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/data/c3a4_knapsack_big.txt b/data/c3a4_knapsack_big.txt new file mode 100644 index 0000000..20cce77 --- /dev/null +++ b/data/c3a4_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/src/knapsack.rs b/src/knapsack.rs new file mode 100644 index 0000000..244b16a --- /dev/null +++ b/src/knapsack.rs @@ -0,0 +1,33 @@ + +#[derive(Debug)] +pub struct Knapsack { + pub size: usize, + pub n_items: usize, + pub items: Vec, +} + +#[derive(Debug)] +pub struct Item { + pub value: usize, + pub weight: usize, +} + +pub fn knapsack(k: &Knapsack) -> usize { + let mut weight_to_value = vec![0; k.size]; + for item_index in 0..k.n_items { + let mut new_weight_to_value = weight_to_value.to_vec(); + let item = &k.items[item_index]; + for weight in 0..k.size { + if weight >= item.weight { + let current_value = weight_to_value[weight]; + let new_value = weight_to_value[weight - item.weight] + item.value; + if new_value > current_value { + new_weight_to_value[weight] = new_value; + } + } + } + weight_to_value = new_weight_to_value; + } + + weight_to_value.pop().unwrap() +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 9569690..6813a9c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,6 +12,7 @@ mod quick_sort; mod ssc; mod two_sum; mod util; +mod knapsack; use crate::dijkstra::dijkstra; use crate::heap::heap; @@ -25,6 +26,7 @@ use crate::quick_sort::quick_sort; use crate::ssc::ssc; use crate::two_sum::find_two_sums; use crate::mwis::mwis; +use crate::knapsack::knapsack; use std::cmp::min; #[allow(dead_code)] @@ -126,11 +128,23 @@ fn c3a3() { let s = util::read_max_weight_set("data/c3a3_mwis.txt").unwrap(); let r3 = mwis(&s); println!("r1 = {} r2 = {} r3 = {:?}", r.1, r.0, r3); + // r1 = 19 r2 = 9 r3 = [1, 0, 1, 0, 0, 1, 1, 0] } #[allow(dead_code)] fn c3a4() { - println!("continue here"); + let k1 = util::read_knapsack("data/c3a4_knapsack1.txt").unwrap(); + let r1 = knapsack::knapsack(&k1); + + let k2 = util::read_knapsack("data/c3a4_knapsack_big.txt").unwrap(); + let r2 = knapsack::knapsack(&k2); + println!("r1 = {} r2 = {}", r1, r2); + // r1 = 2493893 r2 = 4243395 +} + +#[allow(dead_code)] +fn c4a4() { + println!("Final course!"); } fn main() { @@ -143,6 +157,7 @@ fn main() { // c2a4(); // c3a1(); // c3a2(); - c3a3(); + // c3a3(); c3a4(); + c4a4(); } diff --git a/src/util.rs b/src/util.rs index 5d0ed5d..a3f78e9 100644 --- a/src/util.rs +++ b/src/util.rs @@ -6,6 +6,7 @@ use crate::min_cut; use crate::prims; use crate::ssc; use crate::mwis; +use crate::knapsack; use std::fs::File; use std::io; use std::io::{BufRead, BufReader, Error, ErrorKind}; @@ -281,3 +282,31 @@ pub fn read_max_weight_set(path: &str) -> Result Result { + let file = File::open(path)?; + let mut lines = BufReader::new(file).lines(); + let line = lines.next().unwrap().unwrap(); + let mut fields = line.split_whitespace(); + let knapsack_size = fields.next().unwrap().parse().unwrap(); + let number_of_items = fields.next().unwrap().parse().unwrap(); + let mut k = knapsack::Knapsack { + size: knapsack_size, + n_items: number_of_items, + items: Vec::new(), + }; + + for line in lines { + let line = line?; + let mut fields = line.split_whitespace(); + let value = fields.next().unwrap().parse().unwrap(); + let weight = fields.next().unwrap().parse().unwrap(); + let item = knapsack::Item { + value: value, + weight: weight, + }; + k.items.push(item); + } + + Ok(k) +}