Bin Packing is a mathematical way to deal with efficiently fitting
Elements into
Bins. Now, a Bin is something that can hold inside itself a certain amount (it's
Bin Height). Every Element is of a certain, non-zero, and positive value (
Element Height). The goal of every Bin Packing algorithm is to use the least amount of Bins to hold the required number of Elements.
Bin: A fixed-size container that can hold Elements.
Bin Height: The specified amount that each Bin can hold.
Element: An item that is to be placed in a Bin having a certain Element Height.
Element Height: The amount of Bin space the Element will take up if placed in that Bin.
Now, why is this useful? Several real-world problems
can be optimized and made to run more efficient by employing this
solution. Image for a moment that you have a package of blank CDs
that can hold 80 minutes of music each. You have 100 songs of
varying lengths. You want to use the least amount of blank CDs to
fit all of your songs on. This is a Bin Packing problem.
Bin: The blank CDs.
Bin Height: 80 (minutes) or 4,800 (seconds).
Element: One song.
Element Height: The length of each song in minutes or seconds.
Other examples include: Using the least amount of
boards to cut out small pieces for a construction project, fitting
large files onto small capacity hard drives, etc.
There is one hitch with a Bin Packing problem, that is a Bin Packing problem is classified as
NP-Complete. This basically means that their is no way of being
guaranteed the
best solution without checking
every
possible solution. This is not to say that a solution reached by
one of the following algorithms is not optimal, it may be. The
classic NP-Complete problem is the
Traveling Salesman Problem. The algorithms presented here do give reasonable, practical solutions however.
Library tutorials & articles
Bin Packing
By Mitch Dusina, published on 31 Mar 2006
Page 1 of 7
- Bin Packing, What is It?
- Next Fit Algorithm
- First Fit Algorithm
- Worst Fit Algorithm
- Best Fit Algorithm
- Decreasing Algorithms
- Displaying the Data
Bin Packing, What is It?
Related articles
Related discussion
-
An Introduction to VB.NET and Database Programming
by warmtc (18 replies)
-
Open and Read eml(Email) extension file from VB.NET
by nubllett (1 replies)
-
Creating a Windows Service in VB.NET
by davidvanr (108 replies)
-
Multithreading in VB.NET
by catchsyed (5 replies)
-
Watching Folder Activity in VB.NET
by emmaddai (17 replies)
Related podcasts
-
python411: Language Comparisons
Published 1 year ago, running time 0h31m
Comparing Python to Ruby, Perl, Java, C#, VB.Net, C, C++, JavaScript, PHP etc.
This thread is for discussions of Bin Packing.
Great article, I was looking for something exactly like this! How difficult would it be to modify the code to allow for varible size bin widths, and then pack each element either horizontal or vertial depending on height and width. If you can figure that out let me know. Thanks and keep up the good work.![Smiley Face [:)]](/emoticons/emotion-1a.gif)
Well as for variable sized bins, all you would need to do is have an array of Integers that holds the size for each Bin. Then in my code, where ever there is a reference to BinHeight, you would simply reference BinHeightArray(ThisBinNumber) instead. You could incorporate all this code into its own Class as it should be an make the array a property so you can do bounds checking, check for valid values, and all that good stuff.
As for 2-dimensional Bin Packing... I'd have to get back to you on that one. I understand what you mean but I don't think these algorithms are easily translatable into another dimension... Try to formulate an algorithm that starts filling in the lower left to the lower right, and then starts moving up. I can't vouch for the efficiency of this idea but its my only lead...
I have a quick question. Can there ever be more bins in a First Fit Algorithm than a Next Fit algorithm?
Hi,
Excellent article. Would you know how or have a PHP version of this problem?
Regards, Michael
Great article. Thanks.
Have you provided all the algorithms that are available to solve Bin Packing ?
I would also like to see a solution for the 0-1 Knapsack problem where each article(File) have a weight(MB) as well as a value(priority). The sack capacity let's say 700MB.
Thank you.
Hello,
I'm new here and maybe missing something. Everybody says 'Great article' - but where the article itself? Same for code - is there code example or algorithm available?
Thanks.
hey... grt job buddy...
can u plz send me a 'C' program code for best/first/worst fit algorithms....
i need it urgently.... i need to submit code as assignment..... by sunday...
plz help....
ritusmart2001@yahoo.com
can u plz send me a 'C' program code for best/first/worst fit algorithms....
i need it urgently.... i need to submit code as assignment......PLZ HELP
rrookwood_jm@yahoo.com
i am in the same situation can u plz send me a C or C++ code for best/first/worst fit algorithms....
i need it to complete my assignment
bion365@gmail.com
thanks
I believe that the First Fit algorithm will always be better than or equivalent to the Next Fit algorithm.
I first learned of the Bin Packing problem from an Algebra 3 class in high school. I implemented all of the algorithms the textbook talked about. Doing some quick online research, the only other algorithm I found a mention of was the "Almost Worse Fit". It simply places the object in the second emptiest bin (which is slightly better than Worse Fit apparently).
I cannot myself convert my code into other languages (I do not have the time or the motivation). But the concepts used in my code are not very language specific. It shouldn't take much time to do the conversion. If you do not know the target language well then you will simply have to search online for the syntax for that particular structure (Arrays, sorting, and drawing is all there really is to it, and I would think that drawing isn't that important). Plus, that way you'd actually be learning the language you are supposed to learn =)
can u plz send me a 'C++' or 'C' program code for first fit algorithms....
i need it urgently.... i need to submit code as my project by saturday 09/15/07...
example output:
enter no. of process to be loaded: 4
Job # Job size Arrival time
1 40K 0 msec
2 15K 7 msec
3 10K 5 msec
4 45K 10 msec
press any key to continue...
note: Job size and Arrival time will be inputted by the user and as you press enter in the Job size, "K" will be automatically displayed as well as the "msec" in the arrival time.
Hi,
i urgently need the codes too before 19/09/07. pls help me. could you send me the C++ and java version of the codes. Tankyou. send to nuranastacia@yahoo.com
Hello,
I really want to thank you for for this great article. However, I am currently working on my last year project, which is about 2 dimensional sheet cutting optimizer. Unfortunalty, I did not find any article that explains how to implement it by code.
Please can any one help me, this is very important because I just have about 2 weeks to finish it.
If any one has some helpful resources please send it to my email mishoco@hotmail.com
Michel
Hi Nimpo
thank you for this fine sourcecode, it helps me in understanding the problem of bin packing a bit, a porblem i just want to solve in my access database
but i have a question and something i did not found in your programm.
you mentioned the possibility of bins with different heights, but i did not find this in the sourcecode or how to enter it
and anothe question, do you think that your solution will work in combination with an existing access database ?
thanks
Andreas
keen to have a look the c++ code.
zxy901109@hotmail.com
cheers
!--removed tag-->can someone mail me code in Java for Bin packing my mail id is rkgkveni@gmail.com
!--removed tag-->Really amazing article, with a very nice resources, the project after i run it is awesome :D I loike way of programming structure too, thanks a lot.
!--removed tag-->