Examine individual changes
Appearance
This page allows you to examine the variables generated by the Edit Filter for an individual change.
Variables generated for this change
Variable | Value |
---|---|
Edit count of the user (user_editcount ) | null |
Name of the user account (user_name ) | '132.70.66.13' |
Age of the user account (user_age ) | 0 |
Groups (including implicit) the user is in (user_groups ) | [
0 => '*'
] |
Rights that the user has (user_rights ) | [
0 => 'createaccount',
1 => 'read',
2 => 'edit',
3 => 'createtalk',
4 => 'writeapi',
5 => 'viewmyprivateinfo',
6 => 'editmyprivateinfo',
7 => 'editmyoptions',
8 => 'abusefilter-log-detail',
9 => 'urlshortener-create-url',
10 => 'centralauth-merge',
11 => 'abusefilter-view',
12 => 'abusefilter-log',
13 => 'vipsscaler-test'
] |
Whether or not a user is editing through the mobile interface (user_mobile ) | false |
Whether the user is editing from mobile app (user_app ) | false |
Page ID (page_id ) | 287015 |
Page namespace (page_namespace ) | 0 |
Page title without namespace (page_title ) | 'Bin packing problem' |
Full page title (page_prefixedtitle ) | 'Bin packing problem' |
Edit protection level of the page (page_restrictions_edit ) | [] |
Last ten users to contribute to the page (page_recent_contributors ) | [
0 => 'WikiCleanerBot',
1 => 'WhyNotHugo',
2 => 'WikiLinuz',
3 => 'Citation bot',
4 => 'Erel Segal',
5 => 'OAbot',
6 => '105.101.29.88',
7 => 'Jorgegv',
8 => 'Liz',
9 => '77.22.252.243'
] |
Page age in seconds (page_age ) | 659333151 |
Action (action ) | 'edit' |
Edit summary/reason (summary ) | '' |
Time since last page edit in seconds (page_last_edit_age ) | 468884 |
Old content model (old_content_model ) | 'wikitext' |
New content model (new_content_model ) | 'wikitext' |
Old page wikitext, before the edit (old_wikitext ) | '{{Short description|Mathematical and computational problem}}
{{Distinguish|bin picking}}
{{Covering/packing-problem pairs}}
The '''bin packing problem<ref>{{citation|last1=Martello|first1=Silvano|title=Knapsack Problems: Algorithms and Computer Implementations|url=https://archive.org/details/knapsackproblems0000mart|year=1990|chapter=Bin-packing problem|chapter-url=http://www.or.deis.unibo.it/kp/Chapter8.pdf|location=Chichester, UK|publisher=John Wiley and Sons|isbn=0471924202|last2=Toth|first2=Paolo|url-access=registration}}</ref><ref>{{cite book|last1=Korte|first1=Bernhard|title=Combinatorial Optimization: Theory and Algorithms|last2=Vygen|first2=Jens|publisher=Springer|year=2006|isbn=978-3-540-25684-7|series=Algorithms and Combinatorics 21|pages=426–441|chapter=Bin-Packing|doi=10.1007/3-540-29297-7_18|chapter-url=https://books.google.com/books?id=UnYwgPltSjwC&q=Bin-Packing&pg=PA449}}</ref><ref>{{cite web|last=Barrington|first=David Mix|year=2006|title=Bin Packing|url=https://people.cs.umass.edu/~barring/cs311/disc/11.html|url-status=dead|archive-url=https://web.archive.org/web/20190216134619/https://people.cs.umass.edu/~barring/cs311/disc/11.html|archive-date=2019-02-16|access-date=2016-02-27}}</ref><ref name=":0">{{Citation|last1=Coffman Jr.|first1=Edward G.|title=Bin Packing Approximation Algorithms: Survey and Classification|date=2013|url=https://doi.org/10.1007/978-1-4419-7997-1_35|work=Handbook of Combinatorial Optimization|pages=455–531|editor-last=Pardalos|editor-first=Panos M.|place=New York, NY|publisher=Springer|language=en|doi=10.1007/978-1-4419-7997-1_35|isbn=978-1-4419-7997-1|access-date=2021-08-08|last2=Csirik|first2=János|last3=Galambos|first3=Gábor|last4=Martello|first4=Silvano|last5=Vigo|first5=Daniele|editor2-last=Du|editor2-first=Ding-Zhu|editor3-last=Graham|editor3-first=Ronald L.}}</ref>''' is an [[optimization problem]], in which items of different sizes must be packed into a finite number of bins or containers, each of a fixed given capacity, in a way that minimizes the number of bins used. The problem has many applications, such as filling up containers, loading trucks with weight capacity constraints, creating file [[backup]]s in media, splitting a network prefix into multiple subnets,<ref>{{cite web |title=DHCPv6-PD - First steps |url=https://sha256.net/dhcpv6-pd-first-steps.html#orge8b6244 |access-date=12 June 2024}}</ref> and technology mapping in [[Field-programmable gate array|FPGA]] [[semiconductor chip]] design.
Computationally, the problem is [[NP-hard]], and the corresponding [[decision problem]], deciding if items can fit into a specified number of bins, is [[NP-complete]]. Despite its worst-case hardness, optimal solutions to very large instances of the problem can be produced with sophisticated algorithms. In addition, many [[approximation algorithms]] exist. For example, the [[First-fit bin packing|first fit]] algorithm provides a fast but often non-optimal solution, involving placing each item into the first bin in which it will fit. It requires ''[[Big O notation|Θ]]''(''n'' log ''n'') time, where ''n'' is the number of items to be packed. The algorithm can be made much more effective by first [[sorting]] the list of items into decreasing order (sometimes known as the first-fit decreasing algorithm), although this still does not guarantee an optimal solution and for longer lists may increase the running time of the algorithm. It is known, however, that there always exists at least one ordering of items that allows first-fit to produce an optimal solution.<ref>{{citation|last=Lewis|first=R.|title=A General-Purpose Hill-Climbing Method for Order Independent Minimum Grouping Problems: A Case Study in Graph Colouring and Bin Packing|url=http://orca.cf.ac.uk/11334/1/Lewis%2C_R_General_Purpose_Hill_Climbing.pdf|journal=Computers and Operations Research|volume=36|issue=7|pages=2295–2310|year=2009|doi=10.1016/j.cor.2008.09.004|s2cid=1577334 }}</ref>
There are many [[Packing problem|variations]] of this problem, such as 2D packing, linear packing, packing by weight, packing by cost, and so on. The bin packing problem can also be seen as a special case of the [[cutting stock problem]]. When the number of bins is restricted to 1 and each item is characterized by both a volume and a value, the problem of maximizing the value of items that can fit in the bin is known as the [[knapsack problem]].
A variant of bin packing that occurs in practice is when items can share space when packed into a bin. Specifically, a set of items could occupy less space when packed together than the sum of their individual sizes. This variant is known as VM packing<ref>{{citation|last1=Sindelar|first1=Michael|title=Sharing-Aware Algorithms for Virtual Machine Colocation|url=https://storage.googleapis.com/pub-tools-public-publication-data/pdf/37147.pdf|journal=Proceedings of 23rd ACM Symposium on Parallelism in Algorithms and Architectures (SPAA), San Jose, CA, June 2011|pages=367–378|year=2011|last2=Sitaraman|first2=Ramesh|last3=Shenoy|first3=Prashant|author-link2=Ramesh Sitaraman}}</ref> since when [[virtual machines]] (VMs) are packed in a server, their total [[Memory management|memory requirement]] could decrease due to [[Page (computer memory)|pages]] shared by the VMs that need only be stored once. If items can share space in arbitrary ways, the bin packing problem is hard to even approximate. However, if space sharing fits into a hierarchy, as is the case with memory sharing in virtual machines, the bin packing problem can be efficiently approximated.
Another variant of bin packing of interest in practice is the so-called [[Online algorithm|online]] bin packing. Here the items of different volume are supposed to arrive sequentially, and the decision maker has to decide whether to select and pack the currently observed item, or else to let it pass. Each decision is without recall. In contrast, offline bin packing allows rearranging the items in the hope of achieving a better packing once additional items arrive. This of course requires additional storage for holding the items to be rearranged.
==Formal statement==
In ''[[Computers and Intractability]]''<ref name="GareyJohnson2">{{cite book|last1=Garey|first1=M. R.|title=<!-- [[ -->Computers and Intractability: A Guide to the Theory of NP-Completeness<!-- ]] -->|last2=Johnson|first2=D. S.|publisher=W. H. Freeman and Co.|year=1979|isbn=0-7167-1045-5|editor=Victor Klee|editor-link=Victor Klee|series=A Series of Books in the Mathematical Sciences|location=San Francisco, Calif.|pages=[https://archive.org/details/computersintract0000gare/page/ x+338]|mr=519066|author-link1=Michael R. Garey|author-link2=David S. Johnson}}</ref>{{Rp|226}} Garey and Johnson list the bin packing problem under the reference [SR1]. They define its decision variant as follows.
Instance: Finite set <math>I</math> of items, a size <math>s(i) \in \mathbb{Z}^+</math> for each <math>i \in I</math>, a positive integer bin capacity <math>B</math>, and a positive integer <math>K</math>.
Question: Is there a partition of <math>I</math> into [[disjoint sets]] <math>I_1,\dots, I_K</math> such that the sum of the sizes of the items in each <math>I_j</math> is <math>B</math> or less?
Note that in the literature often an equivalent notation is used, where <math>B = 1</math> and <math>s(i) \in \mathbb{Q} \cap (0,1]</math> for each <math>i \in I</math>. Furthermore, research is mostly interested in the optimization variant, which asks for the smallest possible value of <math>K</math>. A solution is ''optimal'' if it has minimal <math>K</math>. The <math>K</math>-value for an optimal solution for a set of items <math>I</math> is denoted by <math>\mathrm{OPT}(I)</math> or just <math>\mathrm{OPT}</math> if the set of items is clear from the context.
A possible [[Integer programming|integer linear programming]] formulation of the problem is:
{|
| colspan="2" |minimize <math> K = \sum_{j=1}^n y_j</math>
|
|-
|subject to
|<math>K \geq 1,</math>
|-
|
|<math>\sum_{i \in I} s(i) x_{ij} \leq B y_j,</math>
|<math>\forall j \in \{1,\ldots,n\}</math>
|-
|
|<math>\sum_{j=1}^n x_{ij} = 1,</math>
|<math>\forall i \in I</math>
|-
|
|<math> y_j \in \{0,1\},</math>
|<math>\forall j \in \{1,\ldots,n\}</math>
|-
|
|<math> x_{ij} \in \{0,1\},</math>
|<math>\forall i \in I \, \forall j \in \{1,\ldots,n\}</math>
|}
where <math> y_j = 1</math> if bin <math>j</math> is used and <math> x_{ij} = 1</math> if item <math>i</math> is put into bin <math>j</math>.<ref name="Martello19902">{{harvnb|Martello|Toth|1990|p=221}}</ref>
== Hardness of bin packing ==
The bin packing problem is [[Strong NP-completeness|strongly NP-complete]]. This can be proven by reducing the strongly NP-complete [[3-partition problem]] to bin packing.<ref name="GareyJohnson2" />
Furthermore, there can be no [[approximation algorithm]] with absolute approximation ratio smaller than <math>\tfrac 3 2</math> unless <math>\mathsf{P} = \mathsf{NP}</math>. This can be proven by a reduction from the [[partition problem]]:<ref>{{cite book|last1=Vazirani|first1=Vijay V.|title=Approximation Algorithms|date=14 March 2013|publisher=Springer Berlin Heidelberg|isbn=978-3662045657|pages=74}}</ref> given an instance of Partition where the sum of all input numbers is <math>2T</math>, construct an instance of bin-packing in which the bin size is {{mvar|T}}. If there exists an equal partition of the inputs, then the optimal packing needs 2 bins; therefore, every algorithm with an approximation ratio smaller than {{sfrac|3|2}} must return less than 3 bins, which must be 2 bins. In contrast, if there is no equal partition of the inputs, then the optimal packing needs at least 3 bins.
On the other hand, bin packing is solvable in [[pseudo-polynomial time]] for any fixed number of bins {{mvar|K}}, and solvable in polynomial time for any fixed bin capacity {{mvar|B}}.<ref name="GareyJohnson2" />
== Approximation algorithms for bin packing ==
To measure the performance of an approximation algorithm there are two approximation ratios considered in the literature. For a given list of items <math>L</math> the number <math>A(L)</math> denotes the number of bins used when algorithm <math>A</math> is applied to list <math>L</math>, while <math>\mathrm{OPT}(L)</math> denotes the optimum number for this list. The absolute worst-case performance ratio <math>R_A</math> for an algorithm <math>A</math> is defined as
: <math>R_A \equiv \inf\{r \geq 1 : A(L)/\mathrm{OPT}(L) \leq r \text{ for all lists } L\}.</math>
On the other hand, the asymptotic worst-case ratio <math>R_A^{\infty}</math> is defined as
: <math>R_A^\infty \equiv \inf\{ r \geq 1: \exists N >0, A(L)/\mathrm{OPT}(L) \leq r \text{ for all lists } L \text{ with } \mathrm{OPT}(L) \geq N\}.</math>
Equivalently, <math>R_A^{\infty}</math> is the smallest number such that there exists some constant ''K,'' such that for all lists ''L:'''''<ref name=":0" />'''
: <math>A(L) \leq R^{\infty}_A \cdot \mathrm{OPT}(L) + K</math>.
Additionally, one can restrict the lists to those for which all items have a size of at most <math>\alpha</math>. For such lists, the bounded size performance ratios are denoted as <math>R_A(\text{size}\leq \alpha)</math> and <math>R_A^\infty(\text{size}\leq \alpha)</math>.
Approximation algorithms for bin packing can be classified into two categories:
# Online heuristics, that consider the items in a given order and place them one by one inside the bins. These heuristics are also applicable to the offline version of this problem.
# Offline heuristics, that modify the given list of items e.g. by sorting the items by size. These algorithms are no longer applicable to the online variant of this problem. However, they have an improved approximation guarantee while maintaining the advantage of their small time-complexity. A sub-category of offline heuristics is asymptotic approximation schemes. These algorithms have an approximation guarantee of the form <math>(1+\varepsilon)\mathrm{OPT}(L) + C</math> for some constant that may depend on <math>1/\varepsilon</math>. For an arbitrarily large <math>\mathrm{OPT}(L)</math> these algorithms get arbitrarily close to <math>\mathrm{OPT}(L)</math>. However, this comes at the cost of a (drastically) increased time complexity compared to the heuristical approaches.
== Online heuristics ==
In the [[Online algorithm|online]] version of the bin packing problem, the items arrive one after another and the (irreversible) decision where to place an item has to be made before knowing the next item or even if there will be another one. A diverse set of offline and online heuristics for bin-packing have been studied by [[David S. Johnson]] on his Ph.D. thesis.<ref name="johnson732">{{cite journal|last1=Johnson|first1=David S|date=1973|title=Near-optimal bin packing algorithms|url=https://dspace.mit.edu/bitstream/handle/1721.1/57819/17595570-MIT.pdf?sequence=2|journal=Massachusetts Institute of Technology}}</ref>
=== Single-class algorithms ===
There are many simple algorithms that use the following general scheme:
* For each item in the input list:
*# If the item fits into one of the currently open bins, then put it in one of these bins;
*# Otherwise, open a new bin and put the new item in it.
The algorithms differ in the criterion by which they choose the open bin for the new item in step 1 (see the linked pages for more information):
* [[Next-fit bin packing|'''Next Fit''']] '''(NF)''' always keeps a single open bin. When the new item does not fit into it, it closes the current bin and opens a new bin. Its advantage is that it is a bounded-space algorithm since it only needs to keep a single open bin in memory. Its disadvantage is that its asymptotic approximation ratio is 2. In particular, <math>NF(L) \leq 2 \cdot \mathrm{OPT}(L) -1 </math>, and for each <math>N \in \mathbb{N}</math> there exists a list {{mvar|L}} such that <math>\mathrm{OPT}(L) = N</math> and <math>NF(L) = 2 \cdot \mathrm{OPT}(L) -2</math>.<ref name="johnson732" /> Its asymptotic approximation ratio can be somewhat improved based on the item sizes: <math>R_{NF}^\infty(\text{size}\leq\alpha) \leq 2</math> for all <math>\alpha \geq 1/2</math> and <math>R_{NF}^\infty(\text{size}\leq\alpha) \leq 1/(1-\alpha)</math> for all <math>\alpha \leq 1/2</math>. For each algorithm {{mvar|A}} that is an AnyFit-algorithm it holds that <math>R_{A}^{\infty}(\text{size}\leq\alpha)\leq R_{NF}^{\infty}(\text{size}\leq\alpha)</math>.
* '''[[Next-fit bin packing|Next-k-Fit]]''' '''(NkF)''' is a variant of Next-Fit, but instead of keeping only one bin open, the algorithm keeps the last {{mvar|k}} bins open and chooses the first bin in which the item fits. Therefore, it is called a ''k-bounded space'' algorithm.<ref>{{cite book|last1=Gonzalez|first1=Teofilo F.|title=Handbook of approximation algorithms and metaheuristics. Volume 2 Contemporary and emerging applications|date=23 May 2018|publisher=Taylor & Francis Incorporated |isbn=9781498770156}}</ref> For <math>k\geq 2</math> the NkF delivers results that are improved compared to the results of NF, however, increasing {{mvar|k}} to constant values larger than {{mvar|2}} improves the algorithm no further in its worst-case behavior. If algorithm {{mvar|A}} is an AlmostAnyFit-algorithm and <math>m = \lfloor 1/\alpha\rfloor \geq 2</math> then <math>R_{A}^{\infty}(\text{size}\leq\alpha)\leq R_{N2F}^{\infty}(\text{size}\leq\alpha) = 1+1/m</math>.<ref name="johnson732" />
* '''[[First-fit bin packing|First-Fit]] (FF)''' keeps all bins open, in the order in which they were opened. It attempts to place each new item into the ''first'' bin in which it fits. Its approximation ratio is <math>FF(L) \leq \lfloor 1.7\mathrm{OPT}\rfloor</math>, and there is a family of input lists {{mvar|L}} for which <math>FF(L)</math> matches this bound.<ref name="DósaSgall2">{{cite journal|last1=Dósa|first1=György|last2=Sgall|first2=Jiri|date=2013|title=First Fit bin packing: A tight analysis|url=http://drops.dagstuhl.de/opus/volltexte/2013/3963|journal=30th International Symposium on Theoretical Aspects of Computer Science (STACS 2013)|publisher=Schloss Dagstuhl–Leibniz-Zentrum für Informatik|volume=20|pages=538–549|doi=10.4230/LIPIcs.STACS.2013.538}}</ref>
* [[Best-fit bin packing|'''Best-Fit''']] '''(BF)''', too, keeps all bins open, but attempts to place each new item into the bin with the ''maximum'' load in which it fits. Its approximation ratio is identical to that of FF, that is: <math>BF(L) \leq \lfloor 1.7\mathrm{OPT}\rfloor</math>, and there is a family of input lists {{mvar|L}} for which <math>BF(L)</math> matches this bound.<ref name="DósaSgall142">{{cite book|last1=György|first1=Dósa|last2=Sgall|first2=Jirí|title=Automata, Languages, and Programming |chapter=Optimal Analysis of Best Fit Bin Packing |date=2014|journal={Automata, Languages, and Programming – 41st International Colloquium (ICALP)}|series=Lecture Notes in Computer Science|volume=8572|pages=429–441|doi=10.1007/978-3-662-43948-7_36|isbn=978-3-662-43947-0}}</ref>
*'''Worst-Fit (WF)''' attempts to place each new item into the bin with the ''minimum'' load. It can behave as badly as Next-Fit, and will do so on the worst-case list for that <math>NF(L) = 2 \cdot \mathrm{OPT}(L) -2 </math>. Furthermore, it holds that <math>R_{WF}^{\infty}(\text{size}\leq \alpha) = R_{NF}^{\infty}(\text{size}\leq \alpha)</math>. Since WF is an AnyFit-algorithm, there exists an AnyFit-algorithm such that <math>R_{AF}^{\infty}(\alpha) = R_{NF}^{\infty}(\alpha)</math>.<ref name="johnson732" />
* '''Almost Worst-Fit (AWF)''' attempts to place each new item inside the ''second most empty'' open bin (or emptiest bin if there are two such bins). If it does not fit, it tries the most empty one. It has an asymptotic worst-case ratio of <math>\tfrac {17}{10}</math>.<ref name="johnson732" />
In order to generalize these results, Johnson introduced two classes of online heuristics called ''any-fit algorithm'' and ''almost-any-fit'' algorithm:'''<ref name=":0" />'''{{Rp|470}}
* In an '''AnyFit (AF)''' algorithm, if the current nonempty bins are ''B''<sub>1</sub>,...,''B<sub>j</sub>'', then the current item will not be packed into ''B''<sub>''j''+1</sub> unless it does not fit in any of ''B''<sub>1</sub>,...,''B<sub>j</sub>''. The FF, WF, BF and AWF algorithms satisfy this condition. Johnson proved that, for any AnyFit algorithm A and any <math>\alpha</math>:
*:<math>R_{FF}^{\infty}(\alpha) \leq R_{A}^{\infty}(\alpha) \leq R_{WF}^{\infty}(\alpha)</math>.
* In an '''AlmostAnyFit (AAF)''' algorithm, if the current nonempty bins are ''B''<sub>1</sub>,...,''B<sub>j</sub>'', and of these bins, ''B<sub>k</sub>'' is the unique bin with the smallest load, then the current item will not be packed into ''B<sub>k</sub>'', unless it does not fit into any of the bins to its left. The FF, BF and AWF algorithms satisfy this condition, but WF does not. Johnson proved that, for any AAF algorithm A and any {{mvar|α}}:
*:<math>R_{A}^{\infty}(\alpha) = R_{FF}^{\infty}(\alpha) </math> In particular: <math>R_{A}^{\infty} = 1.7 </math>.
=== Refined algorithms ===
Better approximation ratios are possible with heuristics that are not AnyFit. These heuristics usually keep several classes of open bins, devoted to items of different size ranges (see the linked pages for more information):
* '''[[Refined first-fit bin packing|Refined-first-fit bin packing]] (RFF)''' partitions the item sizes into four ranges: <math>\left(\frac 1 2,1\right]</math>, <math>\left(\frac 2 5, \frac 1 2\right]</math>, <math>\left(\frac 1 3, \frac 2 5\right]</math>, and <math>\left(0, \frac 1 3\right]</math>. Similarly, the bins are categorized into four classes. The next item <math>i \in L</math> is first assigned to its corresponding class. Inside that class, it is assigned to a bin using [[First-fit bin packing|first-fit]]. Note that this algorithm is not an Any-Fit algorithm since it may open a new bin despite the fact that the current item fits inside an open bin. This algorithm was first presented by Andrew Chi-Chih Yao,<ref name="Yao19802">{{cite journal|last1=Yao|first1=Andrew Chi-Chih|date=April 1980|title=New Algorithms for Bin Packing|journal=Journal of the ACM|volume=27|issue=2|pages=207–227|doi=10.1145/322186.322187|s2cid=7903339|doi-access=free}}</ref> who proved that it has an approximation guarantee of <math>RFF(L) \leq (5/3) \cdot \mathrm{OPT}(L) +5 </math> and presented a family of lists <math>L_k</math> with <math>RFF(L_k) = (5/3)\mathrm{OPT}(L_k) +1/3</math> for <math>\mathrm{OPT}(L) = 6k+1</math>.
* '''[[Harmonic bin packing|Harmonic-k]]''' partitions the interval of sizes <math>(0,1]</math> based on a [[Harmonic progression (mathematics)|Harmonic progression]] into <math>k-1</math> pieces <math>I_j := \left(\frac 1 {j+1}, \frac 1 j\right] </math> for <math>1\leq j < k</math> and <math>I_k := \left(0, \frac 1 k\right]</math> such that <math>\bigcup_{j=1}^k I_j = (0,1]</math>. This algorithm was first described by Lee and Lee.<ref name="LeeLee19852">{{cite journal|last1=Lee|first1=C. C.|last2=Lee|first2=D. T.|date=July 1985|title=A simple online bin-packing algorithm|journal=Journal of the ACM|volume=32|issue=3|pages=562–572|doi=10.1145/3828.3833|s2cid=15441740|doi-access=free}}</ref> It has a time complexity of <math>\mathcal{O}(|L|\log(|L|))</math> and at each step, there are at most {{mvar|k}} open bins that can be potentially used to place items, i.e., it is a {{mvar|k}}-bounded space algorithm. For <math>k \rightarrow \infty</math>, its approximation ratio satisfies <math>R_{Hk}^{\infty} \approx 1.6910</math>, and it is asymptotically tight.
* '''[[Harmonic bin packing|Refined-harmonic]]''' combines ideas from Harmonic-k with ideas from [[Refined first-fit bin packing|Refined-First-Fit]]. It places the items larger than <math>\tfrac 1 3</math> similar as in Refined-First-Fit, while the smaller items are placed using Harmonic-k. The intuition for this strategy is to reduce the huge waste for bins containing pieces that are just larger than <math>\tfrac 1 2</math>. This algorithm was first described by Lee and Lee.<ref name="LeeLee19852" /> They proved that for <math>k = 20</math> it holds that <math>R^\infty_{RH} \leq 373/228</math>.
=== General lower bounds for online algorithms ===
Yao<ref name="Yao19802" /> proved in 1980 that there can be no online algorithm with an asymptotic competitive ratio smaller than <math>\tfrac 3 2</math>. Brown<ref>{{cite journal|last1=Donna J|first1=Brown|date=1979|title=A Lower Bound for On-Line One-Dimensional Bin Packing Algorithms.|url=https://apps.dtic.mil/dtic/tr/fulltext/u2/a085315.pdf|archive-url=https://web.archive.org/web/20220317212050/https://apps.dtic.mil/dtic/tr/fulltext/u2/a085315.pdf|url-status=live|archive-date=March 17, 2022|journal=Technical Rept.}}</ref> and Liang<ref>{{cite journal|last1=Liang|first1=Frank M.|date=1980|title=A lower bound for on-line bin packing|journal=Information Processing Letters|volume=10|issue=2|pages=76–79|doi=10.1016/S0020-0190(80)90077-0}}</ref> improved this bound to {{val|1.53635}}. Afterward, this bound was improved to {{val|1.54014}} by Vliet.<ref>{{cite journal|last1=van Vliet|first1=André|date=1992|title=An improved lower bound for on-line bin packing algorithms|journal=Information Processing Letters|volume=43|issue=5|pages=277–284|doi=10.1016/0020-0190(92)90223-I}}</ref> In 2012, this lower bound was again improved by Békési and Galambos<ref>{{cite journal|last1=Balogh|first1=János|last2=Békési|first2=József|last3=Galambos|first3=Gábor|date=July 2012|title=New lower bounds for certain classes of bin packing algorithms|journal=Theoretical Computer Science|volume=440–441|pages=1–13|doi=10.1016/j.tcs.2012.04.017|doi-access=free}}</ref> to <math>\tfrac {248}{161} \approx 1.54037</math>.
=== Comparison table ===
{| class="wikitable"
!Algorithm
!Approximation guarantee
!Worst case list <math>L</math>
!Time-complexity
|-
|[[Next-fit bin packing|Next-fit (NF)]]
|<math>NF(L) \leq 2 \cdot \mathrm{OPT}(L) -1 </math><ref name="johnson732" />
|<math>NF(L) = 2 \cdot \mathrm{OPT}(L) -2 </math><ref name="johnson732" />
|<math>\mathcal{O}(|L|)</math>
|-
|[[First-fit bin packing|First-fit (FF)]]
|<math>FF(L) \leq \lfloor 1.7\mathrm{OPT}(L)\rfloor</math><ref name="DósaSgall2" />
|<math>FF(L) = \lfloor 1.7\mathrm{OPT}(L)\rfloor</math><ref name="DósaSgall2" />
|<math>\mathcal{O}(|L|\log(|L|))</math><ref name="johnson732" />
|-
|[[Best-fit bin packing|Best-fit (BF)]]
|<math>BF(L) \leq \lfloor 1.7\mathrm{OPT}(L) \rfloor </math><ref name="DósaSgall142" />
|<math>BF(L) =\lfloor 1.7\mathrm{OPT}(L) \rfloor </math><ref name="DósaSgall142" />
|<math>\mathcal{O}(|L|\log(|L|))</math><ref name="johnson732" />
|-
|Worst-Fit (WF)
|<math>WF(L) \leq 2 \cdot \mathrm{OPT}(L) -1 </math><ref name="johnson732" />
|<math>WF(L) = 2 \cdot \mathrm{OPT}(L) -2 </math><ref name="johnson732" />
|<math>\mathcal{O}(|L|\log(|L|))</math><ref name="johnson732" />
|-
|Almost-Worst-Fit (AWF)
|<math>R^{\infty}_{AWF} \leq 17/10</math><ref name="johnson732" />
|<math>R^{\infty}_{AWF} = 17/10</math><ref name="johnson732" />
|<math>\mathcal{O}(|L|\log(|L|))</math><ref name="johnson732" />
|-
|[[Refined first-fit bin packing|Refined-First-Fit]] (RFF)
|<math>RFF(L) \leq (5/3) \cdot \mathrm{OPT}(L) +5 </math><ref name="Yao19802" />
|<math>RFF(L)=(5/3)\mathrm{OPT}(L) +1/3</math> (for <math>\mathrm{OPT}(L) = 6k+1</math>)<ref name="Yao19802" />
|<math> \mathcal{O}(|L|\log(|L|))</math><ref name="Yao19802" />
|-
|[[Harmonic bin packing|Harmonic-k (Hk)]]
|<math>R_{Hk}^{\infty} \leq 1.69103</math> for <math>k \rightarrow \infty</math><ref name="LeeLee19852" />
|<math>R_{Hk}^{\infty} \geq 1.69103</math><ref name="LeeLee19852" />
|<math>\mathcal{O}(|L|\log(|L|)</math><ref name="LeeLee19852" />
|-
|[[Harmonic bin packing|Refined Harmonic]] (RH)
|<math>R_{RH}^{\infty} \leq 373/228 \approx 1.63597</math><ref name="LeeLee19852" />
|
|<math>\mathcal{O}(|L|)</math><ref name="LeeLee19852" />
|-
|Modified Harmonic (MH)
|<math>R_{MH}^{\infty} \leq 538/33 \approx 1.61562</math><ref name="RamananBLL19892">{{cite journal|last1=Ramanan|first1=Prakash|last2=Brown|first2=Donna J|last3=Lee|first3=C.C|last4=Lee|first4=D.T|date=September 1989|title=On-line bin packing in linear time|journal=Journal of Algorithms|volume=10|issue=3|pages=305–326|doi=10.1016/0196-6774(89)90031-X|hdl-access=free|hdl=2142/74206}}</ref>
|
|
|-
|Modified Harmonic 2 (MH2)
|<math>R_{MH2}^{\infty} \leq 239091/148304 \approx 1.61217</math><ref name="RamananBLL19892" />
|
|
|-
|Harmonic + 1 (H+1)
|
|<math>R_{H+1}^\infty \geq 1.59217</math><ref name="Seiden20022">{{cite journal|last1=Seiden|first1=Steven S.|date=2002|title=On the online bin packing problem|journal=Journal of the ACM|volume=49|issue=5|pages=640–671|doi=10.1145/585265.585269|s2cid=14164016}}</ref>
|
|-
|Harmonic ++ (H++)
|<math>R_{H++}^\infty \leq 1.58889</math><ref name="Seiden20022" />
|<math>R_{H++}^{\infty} \geq 1.58333</math><ref name="Seiden20022" />
|
|}
== Offline algorithms ==
In the offline version of bin packing, the algorithm can see all the items before starting to place them into bins. This allows to attain improved approximation ratios.
=== Multiplicative approximation ===
The simplest technique used by offline approximation schemes is the following:
* Ordering the input list by descending size;
* Run an online algorithm on the ordered list.
Johnson<ref name="johnson732" /> proved that any AnyFit scheme A that runs on a list ordered by descending size has an asymptotic approximation ratio of<blockquote><math>1.22 \approx \frac{11}{9} \leq R^{\infty}_A \leq \frac{5}{4} = 1.25</math>.</blockquote>Some methods in this family are (see the linked pages for more information):
* '''[[First-fit-decreasing bin packing|First-fit-decreasing]] (FFD)''' orders the items by descending size, then calls First-Fit. Its approximation ratio is <math>FFD(I) = \frac{11}9 \mathrm{OPT}(I) + \frac 6 9</math>, and this is tight.<ref name="Dosa072">{{cite journal|last1=Dósa|first1=György|date=2007|title=The Tight Bound of First Fit Decreasing Bin-Packing Algorithm Is FFD(I) ≤ 11/9\mathrm{OPT}(I) + 6/9|journal=Combinatorics, Algorithms, Probabilistic and Experimental Methodologies. ESCAPE|doi=10.1007/978-3-540-74450-4_1}}</ref>
* '''[[Next-fit-decreasing]] (NFD)''' orders the items by descending size, then calls [[Next-fit bin packing|Next-Fit]]. Its approximate ratio is slightly less than 1.7 in the worst case.<ref>{{Cite journal|last1=Baker|first1=B. S.|last2=Coffman|first2=Jr., E. G.|date=1981-06-01|title=A Tight Asymptotic Bound for Next-Fit-Decreasing Bin-Packing|url=https://epubs.siam.org/doi/abs/10.1137/0602019|journal=SIAM Journal on Algebraic and Discrete Methods|volume=2|issue=2|pages=147–152|doi=10.1137/0602019|issn=0196-5212}}</ref> It has also been analyzed probabilistically.<ref>{{Cite journal|last1=Csirik|first1=J.|last2=Galambos|first2=G.|last3=Frenk|first3=J.B.G.|last4=Frieze|first4=A.M.|last5=Rinnooy Kan|first5=A.H.G.|date=1986-11-01|title=A probabilistic analysis of the next fit decreasing bin packing heuristic|url=https://www.sciencedirect.com/science/article/abs/pii/0167637786900131|journal=Operations Research Letters|language=en|volume=5|issue=5|pages=233–236|doi=10.1016/0167-6377(86)90013-1|issn=0167-6377|hdl=1765/11645|s2cid=50663185 |hdl-access=free}}</ref> Next-Fit packs a list and its inverse into the same number of bins. Therefore, Next-Fit-Increasing has the same performance as Next-Fit-Decreasing.<ref>{{Cite journal|last1=Fisher|first1=David C.|date=1988-12-01|title=Next-fit packs a list and its reverse into the same number of bins|url=https://www.sciencedirect.com/science/article/abs/pii/0167637788900600|journal=Operations Research Letters|language=en|volume=7|issue=6|pages=291–293|doi=10.1016/0167-6377(88)90060-0|issn=0167-6377}}</ref>
* '''[[Modified first-fit-decreasing]] (MFFD)<ref name="JohnsonGarey19852">{{cite journal|last1=Johnson|first1=David S|last2=Garey|first2=Michael R|date=October 1985|title=A 7160 theorem for bin packing|journal=Journal of Complexity|volume=1|issue=1|pages=65–106|doi=10.1016/0885-064X(85)90022-6|doi-access=free}}</ref>''', improves on FFD for items larger than half a bin by classifying items by size into four size classes large, medium, small, and tiny, corresponding to items with size > 1/2 bin, > 1/3 bin, > 1/6 bin, and smaller items respectively. Its approximation guarantee is <math>MFFD(I) \leq \frac {71}{60}\mathrm{OPT}(I) + 1</math>.<ref name="YueZhang19952">{{cite journal|last1=Yue|first1=Minyi|last2=Zhang|first2=Lei|date=July 1995|title=A simple proof of the inequality MFFD(L) ≤ 71/60 OPT(L) + 1,L for the MFFD bin-packing algorithm|journal=Acta Mathematicae Applicatae Sinica|volume=11|issue=3|pages=318–330|doi=10.1007/BF02011198|s2cid=118263129}}</ref>
Fernandez de la Vega and Lueker<ref>{{cite journal|last1=Fernandez de la Vega|first1=W.|last2=Lueker|first2=G. S.|date=1981|title=Bin packing can be solved within 1 + ε in linear time|journal=Combinatorica|language=en|volume=1|issue=4|pages=349–355|doi=10.1007/BF02579456|issn=1439-6912|s2cid=10519631}}</ref> presented a [[Polynomial-time approximation scheme|PTAS]] for bin packing. For every <math>\varepsilon>0</math>, their algorithm finds a solution with size at most <math>(1+\varepsilon)\mathrm{OPT} + 1</math> and runs in time <math>\mathcal{O}(n\log(1/\varepsilon)) + \mathcal{O}_{\varepsilon}(1)</math>, where <math>\mathcal{O}_{\varepsilon}(1)</math> denotes a function only dependent on <math>1/\varepsilon</math>. For this algorithm, they invented the method of ''adaptive input rounding'': the input numbers are grouped and rounded up to the value of the maximum in each group. This yields an instance with a small number of different sizes, which can be solved exactly using the [[configuration linear program]].<ref>{{Cite web|last=Claire Mathieu|title=Approximation Algorithms Part I, Week 3: bin packing|url=https://www.coursera.org/learn/approximation-algorithms-part-1/home/week/3|url-status=live|website=Coursera|archive-url=https://web.archive.org/web/20210715093252/https://www.coursera.org/learn/approximation-algorithms-part-1/home/week/3 |archive-date=2021-07-15 }}</ref>
=== Additive approximation ===
The [[Karmarkar-Karp bin packing algorithms|Karmarkar-Karp bin packing algorithm]] finds a solution with size at most <math>\mathrm{OPT} + \mathcal{O}(\log^2(\mathrm{OPT}))</math>, and runs in time polynomial in {{mvar|n}} (the polynomial has a high degree, at least 8).
Rothvoss<ref name=":2">{{Cite book|last=Rothvoß|first=T.|title=2013 IEEE 54th Annual Symposium on Foundations of Computer Science |chapter=Approximating Bin Packing within O(log OPT · Log Log OPT) Bins |date=2013-10-01|chapter-url=https://ieeexplore.ieee.org/document/6686137|volume=|pages=20–29|arxiv=1301.4010|doi=10.1109/FOCS.2013.11|isbn=978-0-7695-5135-7|via=|s2cid=15905063}}</ref> presented an algorithm that generates a solution with at most <math>\mathrm{OPT} + \mathcal{O}(\log(\mathrm{OPT})\cdot \log\log(\mathrm{OPT}))</math> bins.
Hoberg and Rothvoss<ref name=":3">{{Citation|last1=Hoberg|first1=Rebecca|title=A Logarithmic Additive Integrality Gap for Bin Packing|date=2017-01-01|work=Proceedings of the 2017 Annual ACM-SIAM Symposium on Discrete Algorithms|pages=2616–2625|series=Proceedings|publisher=Society for Industrial and Applied Mathematics|doi=10.1137/1.9781611974782.172|isbn=978-1-61197-478-2|last2=Rothvoss|first2=Thomas|s2cid=1647463|doi-access=free|arxiv=1503.08796}}</ref> improved this algorithm to generate a solution with at most <math>\mathrm{OPT} + \mathcal{O}(\log(\mathrm{OPT}))</math> bins. The algorithm is randomized, and its running-time is polynomial in {{mvar|n}}.
=== Comparison table ===
{| class="wikitable"
!Algorithm
!Approximation guarantee
!Worst case instance
|-
|First-fit-decreasing (FFD)
|<math>\mathrm{FFD}(I) \leq \frac {11}9 \mathrm{OPT}(I) + \frac 6 9</math><ref name="Dosa072" />
|<math>\mathrm{FFD}(I) = \frac {11}9 \mathrm{OPT}(I) + \frac 6 9</math><ref name="Dosa072" />
|-
|Modified-first-fit-decreasing (MFFD)
|<math>\mathrm{MFFD}(I) \leq \frac {71}{60}\mathrm{OPT}(I) + 1</math><ref name="YueZhang19952" />
|<math>R_\mathrm{MFFD}^\infty \geq \frac {71}{60}</math><ref name="JohnsonGarey19852" />
|-
|Karmarkar and Karp
|<math>\mathrm{KK}(I) \leq \mathrm{OPT}(I) + O(\log^2{\mathrm{OPT}(I)})</math><ref name=":1">{{cite journal|last1=Karmarkar|first1=Narendra|last2=Karp|first2=Richard M.|date=November 1982|title=An efficient approximation scheme for the one-dimensional bin-packing problem|url=https://ieeexplore.ieee.org/document/4568405/references#references|journal=23rd Annual Symposium on Foundations of Computer Science (SFCS 1982)|pages=312–320|doi=10.1109/SFCS.1982.61|s2cid=18583908}}</ref>
|
|-
|Rothvoss
|<math>\mathrm{HB}(I) \leq \mathrm{OPT}(I) + O(\log{\mathrm{OPT}(I)}\log\log{\mathrm{OPT}(I)})</math><ref name=":2" />
|
|-
|Hoberg and Rothvoss
|<math>\mathrm{HB}(I) \leq \mathrm{OPT}(I) + O(\log{\mathrm{OPT}(I)})</math><ref name=":3" />
|
|}
=== Exact algorithms ===
Martello and Toth<ref>{{harvnb|Martello|Toth|1990|pp=237–240}}.</ref> developed an exact algorithm for the 1-dimensional bin-packing problem, called MTP. A faster alternative is the Bin Completion algorithm proposed by Korf in 2002<ref>{{cite conference|last=Korf|first=Richard E.|year=2002|title=A new algorithm for optimal bin packing.|url=http://www.aaai.org/Papers/AAAI/2002/AAAI02-110.pdf|conference=AAAI-02}}</ref> and later improved.<ref name="Korf2003Korf2">R. E. Korf (2003), ''[https://web.archive.org/web/20190823231238/https://pdfs.semanticscholar.org/616d/77a41020941a89e782e877bf4cf7bb5ec9a4.pdf An improved algorithm for optimal bin packing]''. Proceedings of the International Joint Conference on Artificial Intelligence, (pp. 1252–1258)</ref>
A further improvement was presented by Schreiber and Korf in 2013.<ref>{{citation|last1=Schreiber|first1=Ethan L.|title=Proceedings of the Twenty-Third International Joint Conference on Artificial Intelligence|pages=651–658|year=2013|series=IJCAI '13|chapter=Improved Bin Completion for Optimal Bin Packing and Number Partitioning|chapter-url=https://www.ijcai.org/Proceedings/13/Papers/103.pdf|location=Beijing, China|publisher=AAAI Press|isbn=978-1-57735-633-2|last2=Korf|first2=Richard E.}}</ref> The new Improved Bin Completion algorithm is shown to be up to five orders of magnitude faster than Bin Completion on non-trivial problems with 100 items, and outperforms the BCP (branch-and-cut-and-price) algorithm by Belov and Scheithauer on problems that have fewer than 20 bins as the optimal solution. Which algorithm performs best depends on problem properties like the number of items, the optimal number of bins, unused space in the optimal solution and value precision.
=== Small number of different sizes ===
A special case of bin packing is when there is a small number ''d'' of different item sizes. There can be many different items of each size. This case is also called ''[[high-multiplicity bin packing]]'', and It admits more efficient algorithms than the general problem.
== Bin-packing with fragmentation ==
'''Bin-packing with fragmentation''' or '''fragmentable object bin-packing''' is a variant of the bin packing problem in which it is allowed to break items into parts and put each part separately on a different bin. Breaking items into parts may allow for improving the overall performance, for example, minimizing the number of total bin. Moreover, the computational problem of finding an optimal schedule may become easier, as some of the optimization variables become continuous. On the other hand, breaking items apart might be costly. The problem was first introduced by Mandal, Chakrabary and Ghose.<ref name=":03">{{Cite journal |last1=Mandal |first1=C. A. |last2=Chakrabarti |first2=P. P. |last3=Ghose |first3=S. |date=1998-06-01 |title=Complexity of fragmentable object bin packing and an application |url=https://www.sciencedirect.com/science/article/pii/S089812219800087X |journal=Computers & Mathematics with Applications |language=en |volume=35 |issue=11 |pages=91–97 |doi=10.1016/S0898-1221(98)00087-X |issn=0898-1221}}</ref>
=== Variants ===
The problem has two main variants.
# In the first variant, called '''bin-packing with size-increasing fragmentation''' ('''BP-SIF'''), each item may be fragmented; overhead units are added to the size of every fragment.
# In the second variant, called '''bin-packing with size-preserving fragmentation''' ('''BP-SPF''') each item has a size and a cost; fragmenting an item increases its cost but does not change its size.
=== Computational complexity ===
Mandal, Chakrabary and Ghose<ref name=":03" /> proved that BP-SPF is [[NP-hardness|NP-hard]].
Menakerman and Rom<ref>Nir Menakerman and Raphael Rom "Bin Packing with Item Fragmentation". Algorithms and Data Structures, 7th International Workshop, WADS 2001, Providence, RI, USA, August 8-10, 2001, Proceedings.</ref> showed that BP-SIF and BP-SPF are both [[strongly NP-hard]]. Despite the hardness, they present several algorithms and investigate their performance. Their algorithms use classic algorithms for bin-packing, like [[Next-fit bin packing|next-fit]] and [[First-fit-decreasing bin packing|first-fit decreasing]], as a basis for their algorithms.
Bertazzi, Golden and Wang<ref>{{Cite journal |last1=Bertazzi |first1=Luca |last2=Golden |first2=Bruce |last3=Wang |first3=Xingyin |date=2019-05-31 |title=The Bin Packing Problem with Item Fragmentation:A worst-case analysis |journal=Discrete Applied Mathematics |series=GO X Meeting, Rigi Kaltbad (CH), July 10--14, 2016 |language=en |volume=261 |pages=63–77 |doi=10.1016/j.dam.2018.08.023 |issn=0166-218X |s2cid=125361557|doi-access=free }}</ref> introduced a variant of BP-SIF with <math>1-x</math> split rule: an item is allowed to be split in only one way according to its size. It is useful for the [[vehicle routing problem]] for example. In their paper, they provide the worst-case performance bound of the variant.
Shachnai, Tamir and Yehezkeli<ref>{{Cite book |last1=Shachnai |first1=Hadas |last2=Tamir |first2=Tami |last3=Yehezkely |first3=Omer |title=Approximation and Online Algorithms |chapter=Approximation Schemes for Packing with Item Fragmentation |date=2006 |editor-last=Erlebach |editor-first=Thomas |editor2-last=Persinao |editor2-first=Giuseppe |chapter-url=https://link.springer.com/chapter/10.1007/11671411_26 |series=Lecture Notes in Computer Science |language=en |location=Berlin, Heidelberg |publisher=Springer |volume=3879 |pages=334–347 |doi=10.1007/11671411_26 |isbn=978-3-540-32208-5}}</ref> developed approximation schemes for BP-SIF and BP-SPF; a dual [[Polynomial-time approximation scheme|PTAS]] (a PTAS for the dual version of the problem), an asymptotic PTAS called APTAS, and a dual asymptotic [[FPTAS]] called AFPTAS for both versions.
Ekici<ref>{{Cite journal |last=Ekici |first=Ali |date=2021-02-01 |title=Bin Packing Problem with Conflicts and Item Fragmentation |url=https://www.sciencedirect.com/science/article/pii/S0305054820302306 |journal=Computers & Operations Research |language=en |volume=126 |pages=105113 |doi=10.1016/j.cor.2020.105113 |issn=0305-0548 |s2cid=225002556}}</ref> introduced a variant of BP-SPF in which some items are in conflict, and it is forbidden to pack fragments of conflicted items into the same bin. They proved that this variant, too, is NP-hard.
Cassazza and Ceselli<ref>{{Cite journal |last1=Casazza |first1=Marco |last2=Ceselli |first2=Alberto |date=2014-06-01 |title=Mathematical programming algorithms for bin packing problems with item fragmentation |url=https://www.sciencedirect.com/science/article/pii/S0305054813003596 |journal=Computers & Operations Research |language=en |volume=46 |pages=1–11 |doi=10.1016/j.cor.2013.12.008 |issn=0305-0548}}</ref> introduced a variant with no cost and no overhead, and the number of bins is fixed. However, the number of fragmentations should be minimized. They present mathematical programming algorithms for both exact and approximate solutions.
=== Related problems ===
The problem of '''fractional [[Knapsack problem|knapsack]] with penalties''' was introduced by Malaguti, Monaci, Paronuzzi and Pferschy.<ref>{{Cite journal |last1=Malaguti |first1=Enrico |last2=Monaci |first2=Michele |last3=Paronuzzi |first3=Paolo |last4=Pferschy |first4=Ulrich |date=2019-03-16 |title=Integer optimization with penalized fractional values: The Knapsack case |url=https://www.sciencedirect.com/science/article/pii/S0377221718307963 |journal=European Journal of Operational Research |language=en |volume=273 |issue=3 |pages=874–888 |doi=10.1016/j.ejor.2018.09.020 |issn=0377-2217 |s2cid=31722681|hdl=11585/657029 |hdl-access=free }}</ref> They developed an FPTAS and a [[Dynamic programming|dynamic program]] for the problem, and they showed an extensive computational study comparing the performance of their models. See also: [[Fractional job scheduling]].
== Performance with divisible item sizes ==
An important special case of bin packing is that the item sizes form a ''divisible sequence'' (also called ''factored''). A special case of divisible item sizes occurs in memory allocation in computer systems, where the item sizes are all powers of 2. If the item sizes are divisible, then some of the heuristic algorithms for bin packing find an optimal solution.<ref name=":022">{{Cite journal |last1=Coffman |first1=E. G |last2=Garey |first2=M. R |last3=Johnson |first3=D. S |date=1987-12-01 |title=Bin packing with divisible item sizes |url=https://dx.doi.org/10.1016/0885-064X%2887%2990009-4 |journal=Journal of Complexity |volume=3 |issue=4 |pages=406–428 |doi=10.1016/0885-064X(87)90009-4 |issn=0885-064X}}</ref>
== Cardinality constraints on the bins ==
There is a variant of bin packing in which there are cardinality constraints on the bins: each bin can contain at most ''k'' items, for some fixed integer ''k''.
* Krause, Shen and Schwetman<ref>{{Cite journal|last1=Krause|first1=K. L.|last2=Shen|first2=V. Y.|last3=Schwetman|first3=H. D.|date=1975-10-01|title=Analysis of Several Task-Scheduling Algorithms for a Model of Multiprogramming Computer Systems|journal=Journal of the ACM|volume=22|issue=4|pages=522–550|doi=10.1145/321906.321917|s2cid=10214857|issn=0004-5411|doi-access=free}}</ref> introduce this problem as a variant of [[optimal job scheduling]]: a computer has some ''k'' processors. There are some ''n'' jobs that take unit time (1), but have different memory requirements. Each time-unit is considered a single bin. The goal is to use as few bins (=time units) as possible, while ensuring that in each bin, at most ''k'' jobs run. They present several heuristic algorithms that find a solution with at most <math>2 \mathrm{OPT}</math> bins.
* Kellerer and Pferschy<ref>{{Cite journal|last1=Kellerer|first1=H.|last2=Pferschy|first2=U.|date=1999-01-01|title=Cardinality constrained bin-packing problems|url=https://doi.org/10.1023/A:1018947117526|journal=Annals of Operations Research|language=en|volume=92|pages=335–348|doi=10.1023/A:1018947117526|s2cid=28963291|issn=1572-9338}}</ref> present an algorithm with run-time <math>O(n^2 \log{n})</math>, that finds a solution with at most <math>\left\lceil\frac{3}{2}\mathrm{OPT}\right\rceil</math> bins. Their algorithm performs a [[binary search]] for OPT. For every searched value ''m'', it tries to pack the items into 3''m''/2 bins.
== Non-additive functions ==
There are various ways to extend the bin-packing model to more general cost and load functions:
* Anily, Bramel and Simchi-Levi<ref name="pubsonline.informs.org">{{Cite journal|last1=Anily|first1=Shoshana|last2=Bramel|first2=Julien|last3=Simchi-Levi|first3=David|date=1994-04-01|title=Worst-Case Analysis of Heuristics for the Bin Packing Problem with General Cost Structures|url=https://pubsonline.informs.org/doi/abs/10.1287/opre.42.2.287|journal=Operations Research|volume=42|issue=2|pages=287–298|doi=10.1287/opre.42.2.287|issn=0030-364X}}</ref> study a setting where the cost of a bin is a [[concave function]] of the number of items in the bin. The objective is to minimize the total ''cost'' rather than the number of bins. They show that [[next-fit-increasing bin packing]] attains an absolute worst-case approximation ratio of at most 7/4, and an asymptotic worst-case ratio of 1.691 for any concave and monotone cost function.
* Cohen, Keller, Mirrokni and Zadimoghaddam<ref>{{Cite journal|last1=Cohen|first1=Maxime C.|last2=Keller|first2=Philipp W.|last3=Mirrokni|first3=Vahab|last4=Zadimoghaddam|first4=Morteza|date=2019-07-01|title=Overcommitment in Cloud Services: Bin Packing with Chance Constraints|url=https://pubsonline.informs.org/doi/abs/10.1287/mnsc.2018.3091|journal=Management Science|volume=65|issue=7|pages=3255–3271|doi=10.1287/mnsc.2018.3091|arxiv=1705.09335|s2cid=159270392|issn=0025-1909}}</ref> study a setting where the size of the items is not known in advance, but it is a [[random variable]]. This is particularly common in [[cloud computing]] environments. While there is an upper bound on the amount of resources a certain user needs, most users use much less than the capacity. Therefore, the cloud manager may gain a lot by slight [[Memory overcommitment|overcommitment]]. This induces a variant of bin packing with [[chance constraints]]: the probability that the sum of sizes in each bin is at most ''B'' should be at least ''p'', where ''p'' is a fixed constant (standard bin packing corresponds to ''p''=1). They show that, under mild assumptions, this problem is equivalent to a ''submodular bin packing'' problem, in which the "load" in each bin is not equal to the sum of items, but to a certain [[Submodular set function|submodular function]] of it.
== Related problems ==
In the bin packing problem, the ''size'' of the bins is fixed and their ''number'' can be enlarged (but should be as small as possible).
In contrast, in the '''[[multiway number partitioning]]''' problem, the ''number'' of bins is fixed and their ''size'' can be enlarged. The objective is to find a partition in which the bin sizes are as nearly equal is possible (in the variant called [[Multiprocessor scheduling|'''multiprocessor scheduling''' problem]] or '''minimum [[makespan]]''' problem, the goal is specifically to minimize the size of the largest bin).
In the '''inverse bin packing''' problem,<ref>{{Cite journal|last1=Chung|first1=Yerim|last2=Park|first2=Myoung-Ju|date=2015-01-01|title=Notes on inverse bin-packing problems|url=http://www.sciencedirect.com/science/article/pii/S002001901400180X|journal=Information Processing Letters|language=en|volume=115|issue=1|pages=60–68|doi=10.1016/j.ipl.2014.09.005|issn=0020-0190}}</ref> both the number of bins and their sizes are fixed, but the item sizes can be changed. The objective is to achieve the minimum perturbation to the item size vector so that all the items can be packed into the prescribed number of bins.
In the '''maximum resource bin packing''' problem,<ref name=":02">{{Cite journal|last1=Boyar|first1=Joan|author1-link=Joan Boyar|last2=Epstein|first2=Leah|last3=Favrholdt|first3=Lene M.|last4=Kohrt|first4=Jens S.|last5=Larsen|first5=Kim S.|last6=Pedersen|first6=Morten M.|last7=Wøhlk|first7=Sanne|date=2006-10-11|title=The maximum resource bin packing problem|url=http://www.sciencedirect.com/science/article/pii/S0304397506003483|journal=Theoretical Computer Science|language=en|volume=362|issue=1|pages=127–139|doi=10.1016/j.tcs.2006.06.001|issn=0304-3975}}</ref> the goal is to ''maximize'' the number of bins used, such that, for some ordering of the bins, no item in a later bin fits in an earlier bin. In a dual problem, the number of bins is fixed, and the goal is to minimize the total number or the total size of items placed into the bins, such that no remaining item fits into an unfilled bin.
In the '''[[bin covering problem]]''', the bin size is bounded ''from below'': the goal is to ''maximize'' the number of bins used such that the total size in each bin is at least a given threshold.
In the '''fair indivisible chore allocation''' problem (a variant of '''[[fair item allocation]]'''), the items represent chores, and there are different people each of whom attributes a different difficulty-value to each chore. The goal is to allocate to each person a set of chores with an upper bound on its total difficulty-value (thus, each person corresponds to a bin). Many techniques from bin packing are used in this problem too.<ref>{{cite arXiv|eprint=1907.04505|class=cs.GT|first1=Xin|last1=Huang|first2=Pinyan|last2=Lu|title=An Algorithmic Framework for Approximating Maximin Share Allocation of Chores|date=2020-11-10}}</ref>
In the '''[[guillotine cutting]]''' problem, both the items and the "bins" are two-dimensional rectangles rather than one-dimensional numbers, and the items have to be cut from the bin using end-to-end cuts.
In the '''selfish bin packing''' problem, each item is a player who wants to minimize its cost.<ref>{{Cite journal|last1=Ma|first1=Ruixin|last2=Dósa|first2=György|last3=Han|first3=Xin|last4=Ting|first4=Hing-Fung|last5=Ye|first5=Deshi|last6=Zhang|first6=Yong|date=2013-08-01|title=A note on a selfish bin packing problem|url=https://doi.org/10.1007/s10898-012-9856-9|journal=Journal of Global Optimization|volume=56|issue=4|pages=1457–1462|doi=10.1007/s10898-012-9856-9|issn=0925-5001|s2cid=3082040}}</ref>
There is also a variant of bin packing in which the cost that should be minimized is not the number of bins, but rather a certain [[concave function]] of the number of items in each bin.<ref name="pubsonline.informs.org"/>
Other variants are '''two-dimensional bin packing,'''<ref>Lodi A., Martello S., Monaci, M., Vigo, D. (2010) "Two-Dimensional Bin Packing Problems". In V.Th. Paschos (Ed.), ''Paradigms of Combinatorial Optimization'', Wiley/ISTE, pp. 107–129</ref> '''three-dimensional bin packing''',<ref>[https://www.researchgate.net/profile/Leon_Kanavathy/publication/228974015_Optimizing_Three-Dimensional_Bin_Packing_Through_Simulation/links/5890499d92851c9794c62fd0/Optimizing-Three-Dimensional-Bin-Packing-Through-Simulation.pdf Optimizing Three-Dimensional Bin Packing Through Simulation]</ref> '''bin packing with delivery''',<ref>Benkő A., Dósa G., Tuza Z. (2010) "[https://www.researchgate.net/profile/Attila_Benko2/publication/221608540_Bin_PackingCovering_with_Delivery_solved_with_the_evolution_of_algorithms/links/5570a36108aee701d61c2e05.pdf Bin Packing/Covering with Delivery, Solved with the Evolution of Algorithms]," ''Proceedings 2010 IEEE 5th International Conference on Bio-Inspired Computing: Theories and Applications, BIC-TA 2010'', art. no. 5645312, pp. 298–302.</ref>
== Resources ==
* [http://or.dei.unibo.it/library/bpplib BPPLIB] - a library of surveys, codes, benchmarks, generators, solvers, and bibliography.
==References==
{{Reflist|30em}}
{{Packing problem}}
{{DEFAULTSORT:Bin Packing Problem}}
[[Category:Optimization algorithms and methods]]
[[Category:Strongly NP-complete problems]]
[[Category:Bin packing|*]]' |
New page wikitext, after the edit (new_wikitext ) | '{{Short description|Mathematical and computational problem}}
{{Distinguish|bin picking}}
{{Covering/packing-problem pairs}}
The '''bin packing problem<ref>{{citation|last1=Martello|first1=Silvano|title=Knapsack Problems: Algorithms and Computer Implementations|url=https://archive.org/details/knapsackproblems0000mart|year=1990|chapter=Bin-packing problem|chapter-url=http://www.or.deis.unibo.it/kp/Chapter8.pdf|location=Chichester, UK|publisher=John Wiley and Sons|isbn=0471924202|last2=Toth|first2=Paolo|url-access=registration}}</ref><ref>{{cite book|last1=Korte|first1=Bernhard|title=Combinatorial Optimization: Theory and Algorithms|last2=Vygen|first2=Jens|publisher=Springer|year=2006|isbn=978-3-540-25684-7|series=Algorithms and Combinatorics 21|pages=426–441|chapter=Bin-Packing|doi=10.1007/3-540-29297-7_18|chapter-url=https://books.google.com/books?id=UnYwgPltSjwC&q=Bin-Packing&pg=PA449}}</ref><ref>{{cite web|last=Barrington|first=David Mix|year=2006|title=Bin Packing|url=https://people.cs.umass.edu/~barring/cs311/disc/11.html|url-status=dead|archive-url=https://web.archive.org/web/20190216134619/https://people.cs.umass.edu/~barring/cs311/disc/11.html|archive-date=2019-02-16|access-date=2016-02-27}}</ref><ref name=":0">{{Citation|last1=Coffman Jr.|first1=Edward G.|title=Bin Packing Approximation Algorithms: Survey and Classification|date=2013|url=https://doi.org/10.1007/978-1-4419-7997-1_35|work=Handbook of Combinatorial Optimization|pages=455–531|editor-last=Pardalos|editor-first=Panos M.|place=New York, NY|publisher=Springer|language=en|doi=10.1007/978-1-4419-7997-1_35|isbn=978-1-4419-7997-1|access-date=2021-08-08|last2=Csirik|first2=János|last3=Galambos|first3=Gábor|last4=Martello|first4=Silvano|last5=Vigo|first5=Daniele|editor2-last=Du|editor2-first=Ding-Zhu|editor3-last=Graham|editor3-first=Ronald L.}}</ref>''' is an [[optimization problem]], in which items of different sizes must be packed into a finite number of bins or containers, each of a fixed given capacity, in a way that minimizes the number of bins used. The problem has many applications, such as filling up containers, loading trucks with weight capacity constraints, creating file [[backup]]s in media, splitting a network prefix into multiple subnets,<ref>{{cite web |title=DHCPv6-PD - First steps |url=https://sha256.net/dhcpv6-pd-first-steps.html#orge8b6244 |access-date=12 June 2024}}</ref> and technology mapping in [[Field-programmable gate array|FPGA]] [[semiconductor chip]] design.
Computationally,Gal Ben Ami is stupid he needs haircut the problem is [[NP-hard]], and the corresponding [[decision problem]], deciding if items can fit into a specified number of bins, is [[NP-complete]]. Despite its worst-case hardness, optimal solutions to very large instances of the problem can be produced with sophisticated algorithms. In addition, many [[approximation algorithms]] exist. For example, the [[First-fit bin packing|first fit]] algorithm provides a fast but often non-optimal solution, involving placing each item into the first bin in which it will fit. It requires ''[[Big O notation|Θ]]''(''n'' log ''n'') time, where ''n'' is the number of items to be packed. The algorithm can be made much more effective by first [[sorting]] the list of items into decreasing order (sometimes known as the first-fit decreasing algorithm), although this still does not guarantee an optimal solution and for longer lists may increase the running time of the algorithm. It is known, however, that there always exists at least one ordering of items that allows first-fit to produce an optimal solution.<ref>{{citation|last=Lewis|first=R.|title=A General-Purpose Hill-Climbing Method for Order Independent Minimum Grouping Problems: A Case Study in Graph Colouring and Bin Packing|url=http://orca.cf.ac.uk/11334/1/Lewis%2C_R_General_Purpose_Hill_Climbing.pdf|journal=Computers and Operations Research|volume=36|issue=7|pages=2295–2310|year=2009|doi=10.1016/j.cor.2008.09.004|s2cid=1577334 }}</ref>
There are many [[Packing problem|variations]] of this problem, such as 2D packing, linear packing, packing by weight, packing by cost, and so on. The bin packing problem can also be seen as a special case of the [[cutting stock problem]]. When the number of bins is restricted to 1 and each item is characterized by both a volume and a value, the problem of maximizing the value of items that can fit in the bin is known as the [[knapsack problem]].
A variant of bin packing that occurs in practice is when items can share space when packed into a bin. Specifically, a set of items could occupy less space when packed together than the sum of their individual sizes. This variant is known as VM packing<ref>{{citation|last1=Sindelar|first1=Michael|title=Sharing-Aware Algorithms for Virtual Machine Colocation|url=https://storage.googleapis.com/pub-tools-public-publication-data/pdf/37147.pdf|journal=Proceedings of 23rd ACM Symposium on Parallelism in Algorithms and Architectures (SPAA), San Jose, CA, June 2011|pages=367–378|year=2011|last2=Sitaraman|first2=Ramesh|last3=Shenoy|first3=Prashant|author-link2=Ramesh Sitaraman}}</ref> since when [[virtual machines]] (VMs) are packed in a server, their total [[Memory management|memory requirement]] could decrease due to [[Page (computer memory)|pages]] shared by the VMs that need only be stored once. If items can share space in arbitrary ways, the bin packing problem is hard to even approximate. However, if space sharing fits into a hierarchy, as is the case with memory sharing in virtual machines, the bin packing problem can be efficiently approximated.
Another variant of bin packing of interest in practice is the so-called [[Online algorithm|online]] bin packing. Here the items of different volume are supposed to arrive sequentially, and the decision maker has to decide whether to select and pack the currently observed item, or else to let it pass. Each decision is without recall. In contrast, offline bin packing allows rearranging the items in the hope of achieving a better packing once additional items arrive. This of course requires additional storage for holding the items to be rearranged.
==Formal statement==
In ''[[Computers and Intractability]]''<ref name="GareyJohnson2">{{cite book|last1=Garey|first1=M. R.|title=<!-- [[ -->Computers and Intractability: A Guide to the Theory of NP-Completeness<!-- ]] -->|last2=Johnson|first2=D. S.|publisher=W. H. Freeman and Co.|year=1979|isbn=0-7167-1045-5|editor=Victor Klee|editor-link=Victor Klee|series=A Series of Books in the Mathematical Sciences|location=San Francisco, Calif.|pages=[https://archive.org/details/computersintract0000gare/page/ x+338]|mr=519066|author-link1=Michael R. Garey|author-link2=David S. Johnson}}</ref>{{Rp|226}} Garey and Johnson list the bin packing problem under the reference [SR1]. They define its decision variant as follows.
Instance: Finite set <math>I</math> of items, a size <math>s(i) \in \mathbb{Z}^+</math> for each <math>i \in I</math>, a positive integer bin capacity <math>B</math>, and a positive integer <math>K</math>.
Question: Is there a partition of <math>I</math> into [[disjoint sets]] <math>I_1,\dots, I_K</math> such that the sum of the sizes of the items in each <math>I_j</math> is <math>B</math> or less?
Note that in the literature often an equivalent notation is used, where <math>B = 1</math> and <math>s(i) \in \mathbb{Q} \cap (0,1]</math> for each <math>i \in I</math>. Furthermore, research is mostly interested in the optimization variant, which asks for the smallest possible value of <math>K</math>. A solution is ''optimal'' if it has minimal <math>K</math>. The <math>K</math>-value for an optimal solution for a set of items <math>I</math> is denoted by <math>\mathrm{OPT}(I)</math> or just <math>\mathrm{OPT}</math> if the set of items is clear from the context.
A possible [[Integer programming|integer linear programming]] formulation of the problem is:
{|
| colspan="2" |minimize <math> K = \sum_{j=1}^n y_j</math>
|
|-
|subject to
|<math>K \geq 1,</math>
|-
|
|<math>\sum_{i \in I} s(i) x_{ij} \leq B y_j,</math>
|<math>\forall j \in \{1,\ldots,n\}</math>
|-
|
|<math>\sum_{j=1}^n x_{ij} = 1,</math>
|<math>\forall i \in I</math>
|-
|
|<math> y_j \in \{0,1\},</math>
|<math>\forall j \in \{1,\ldots,n\}</math>
|-
|
|<math> x_{ij} \in \{0,1\},</math>
|<math>\forall i \in I \, \forall j \in \{1,\ldots,n\}</math>
|}
where <math> y_j = 1</math> if bin <math>j</math> is used and <math> x_{ij} = 1</math> if item <math>i</math> is put into bin <math>j</math>.<ref name="Martello19902">{{harvnb|Martello|Toth|1990|p=221}}</ref>
== Hardness of bin packing ==
The bin packing problem is [[Strong NP-completeness|strongly NP-complete]]. This can be proven by reducing the strongly NP-complete [[3-partition problem]] to bin packing.<ref name="GareyJohnson2" />
Furthermore, there can be no [[approximation algorithm]] with absolute approximation ratio smaller than <math>\tfrac 3 2</math> unless <math>\mathsf{P} = \mathsf{NP}</math>. This can be proven by a reduction from the [[partition problem]]:<ref>{{cite book|last1=Vazirani|first1=Vijay V.|title=Approximation Algorithms|date=14 March 2013|publisher=Springer Berlin Heidelberg|isbn=978-3662045657|pages=74}}</ref> given an instance of Partition where the sum of all input numbers is <math>2T</math>, construct an instance of bin-packing in which the bin size is {{mvar|T}}. If there exists an equal partition of the inputs, then the optimal packing needs 2 bins; therefore, every algorithm with an approximation ratio smaller than {{sfrac|3|2}} must return less than 3 bins, which must be 2 bins. In contrast, if there is no equal partition of the inputs, then the optimal packing needs at least 3 bins.
On the other hand, bin packing is solvable in [[pseudo-polynomial time]] for any fixed number of bins {{mvar|K}}, and solvable in polynomial time for any fixed bin capacity {{mvar|B}}.<ref name="GareyJohnson2" />
== Approximation algorithms for bin packing ==
To measure the performance of an approximation algorithm there are two approximation ratios considered in the literature. For a given list of items <math>L</math> the number <math>A(L)</math> denotes the number of bins used when algorithm <math>A</math> is applied to list <math>L</math>, while <math>\mathrm{OPT}(L)</math> denotes the optimum number for this list. The absolute worst-case performance ratio <math>R_A</math> for an algorithm <math>A</math> is defined as
: <math>R_A \equiv \inf\{r \geq 1 : A(L)/\mathrm{OPT}(L) \leq r \text{ for all lists } L\}.</math>
On the other hand, the asymptotic worst-case ratio <math>R_A^{\infty}</math> is defined as
: <math>R_A^\infty \equiv \inf\{ r \geq 1: \exists N >0, A(L)/\mathrm{OPT}(L) \leq r \text{ for all lists } L \text{ with } \mathrm{OPT}(L) \geq N\}.</math>
Equivalently, <math>R_A^{\infty}</math> is the smallest number such that there exists some constant ''K,'' such that for all lists ''L:'''''<ref name=":0" />'''
: <math>A(L) \leq R^{\infty}_A \cdot \mathrm{OPT}(L) + K</math>.
Additionally, one can restrict the lists to those for which all items have a size of at most <math>\alpha</math>. For such lists, the bounded size performance ratios are denoted as <math>R_A(\text{size}\leq \alpha)</math> and <math>R_A^\infty(\text{size}\leq \alpha)</math>.
Approximation algorithms for bin packing can be classified into two categories:
# Online heuristics, that consider the items in a given order and place them one by one inside the bins. These heuristics are also applicable to the offline version of this problem.
# Offline heuristics, that modify the given list of items e.g. by sorting the items by size. These algorithms are no longer applicable to the online variant of this problem. However, they have an improved approximation guarantee while maintaining the advantage of their small time-complexity. A sub-category of offline heuristics is asymptotic approximation schemes. These algorithms have an approximation guarantee of the form <math>(1+\varepsilon)\mathrm{OPT}(L) + C</math> for some constant that may depend on <math>1/\varepsilon</math>. For an arbitrarily large <math>\mathrm{OPT}(L)</math> these algorithms get arbitrarily close to <math>\mathrm{OPT}(L)</math>. However, this comes at the cost of a (drastically) increased time complexity compared to the heuristical approaches.
== Online heuristics ==
In the [[Online algorithm|online]] version of the bin packing problem, the items arrive one after another and the (irreversible) decision where to place an item has to be made before knowing the next item or even if there will be another one. A diverse set of offline and online heuristics for bin-packing have been studied by [[David S. Johnson]] on his Ph.D. thesis.<ref name="johnson732">{{cite journal|last1=Johnson|first1=David S|date=1973|title=Near-optimal bin packing algorithms|url=https://dspace.mit.edu/bitstream/handle/1721.1/57819/17595570-MIT.pdf?sequence=2|journal=Massachusetts Institute of Technology}}</ref>
=== Single-class algorithms ===
There are many simple algorithms that use the following general scheme:
* For each item in the input list:
*# If the item fits into one of the currently open bins, then put it in one of these bins;
*# Otherwise, open a new bin and put the new item in it.
The algorithms differ in the criterion by which they choose the open bin for the new item in step 1 (see the linked pages for more information):
* [[Next-fit bin packing|'''Next Fit''']] '''(NF)''' always keeps a single open bin. When the new item does not fit into it, it closes the current bin and opens a new bin. Its advantage is that it is a bounded-space algorithm since it only needs to keep a single open bin in memory. Its disadvantage is that its asymptotic approximation ratio is 2. In particular, <math>NF(L) \leq 2 \cdot \mathrm{OPT}(L) -1 </math>, and for each <math>N \in \mathbb{N}</math> there exists a list {{mvar|L}} such that <math>\mathrm{OPT}(L) = N</math> and <math>NF(L) = 2 \cdot \mathrm{OPT}(L) -2</math>.<ref name="johnson732" /> Its asymptotic approximation ratio can be somewhat improved based on the item sizes: <math>R_{NF}^\infty(\text{size}\leq\alpha) \leq 2</math> for all <math>\alpha \geq 1/2</math> and <math>R_{NF}^\infty(\text{size}\leq\alpha) \leq 1/(1-\alpha)</math> for all <math>\alpha \leq 1/2</math>. For each algorithm {{mvar|A}} that is an AnyFit-algorithm it holds that <math>R_{A}^{\infty}(\text{size}\leq\alpha)\leq R_{NF}^{\infty}(\text{size}\leq\alpha)</math>.
* '''[[Next-fit bin packing|Next-k-Fit]]''' '''(NkF)''' is a variant of Next-Fit, but instead of keeping only one bin open, the algorithm keeps the last {{mvar|k}} bins open and chooses the first bin in which the item fits. Therefore, it is called a ''k-bounded space'' algorithm.<ref>{{cite book|last1=Gonzalez|first1=Teofilo F.|title=Handbook of approximation algorithms and metaheuristics. Volume 2 Contemporary and emerging applications|date=23 May 2018|publisher=Taylor & Francis Incorporated |isbn=9781498770156}}</ref> For <math>k\geq 2</math> the NkF delivers results that are improved compared to the results of NF, however, increasing {{mvar|k}} to constant values larger than {{mvar|2}} improves the algorithm no further in its worst-case behavior. If algorithm {{mvar|A}} is an AlmostAnyFit-algorithm and <math>m = \lfloor 1/\alpha\rfloor \geq 2</math> then <math>R_{A}^{\infty}(\text{size}\leq\alpha)\leq R_{N2F}^{\infty}(\text{size}\leq\alpha) = 1+1/m</math>.<ref name="johnson732" />
* '''[[First-fit bin packing|First-Fit]] (FF)''' keeps all bins open, in the order in which they were opened. It attempts to place each new item into the ''first'' bin in which it fits. Its approximation ratio is <math>FF(L) \leq \lfloor 1.7\mathrm{OPT}\rfloor</math>, and there is a family of input lists {{mvar|L}} for which <math>FF(L)</math> matches this bound.<ref name="DósaSgall2">{{cite journal|last1=Dósa|first1=György|last2=Sgall|first2=Jiri|date=2013|title=First Fit bin packing: A tight analysis|url=http://drops.dagstuhl.de/opus/volltexte/2013/3963|journal=30th International Symposium on Theoretical Aspects of Computer Science (STACS 2013)|publisher=Schloss Dagstuhl–Leibniz-Zentrum für Informatik|volume=20|pages=538–549|doi=10.4230/LIPIcs.STACS.2013.538}}</ref>
* [[Best-fit bin packing|'''Best-Fit''']] '''(BF)''', too, keeps all bins open, but attempts to place each new item into the bin with the ''maximum'' load in which it fits. Its approximation ratio is identical to that of FF, that is: <math>BF(L) \leq \lfloor 1.7\mathrm{OPT}\rfloor</math>, and there is a family of input lists {{mvar|L}} for which <math>BF(L)</math> matches this bound.<ref name="DósaSgall142">{{cite book|last1=György|first1=Dósa|last2=Sgall|first2=Jirí|title=Automata, Languages, and Programming |chapter=Optimal Analysis of Best Fit Bin Packing |date=2014|journal={Automata, Languages, and Programming – 41st International Colloquium (ICALP)}|series=Lecture Notes in Computer Science|volume=8572|pages=429–441|doi=10.1007/978-3-662-43948-7_36|isbn=978-3-662-43947-0}}</ref>
*'''Worst-Fit (WF)''' attempts to place each new item into the bin with the ''minimum'' load. It can behave as badly as Next-Fit, and will do so on the worst-case list for that <math>NF(L) = 2 \cdot \mathrm{OPT}(L) -2 </math>. Furthermore, it holds that <math>R_{WF}^{\infty}(\text{size}\leq \alpha) = R_{NF}^{\infty}(\text{size}\leq \alpha)</math>. Since WF is an AnyFit-algorithm, there exists an AnyFit-algorithm such that <math>R_{AF}^{\infty}(\alpha) = R_{NF}^{\infty}(\alpha)</math>.<ref name="johnson732" />
* '''Almost Worst-Fit (AWF)''' attempts to place each new item inside the ''second most empty'' open bin (or emptiest bin if there are two such bins). If it does not fit, it tries the most empty one. It has an asymptotic worst-case ratio of <math>\tfrac {17}{10}</math>.<ref name="johnson732" />
In order to generalize these results, Johnson introduced two classes of online heuristics called ''any-fit algorithm'' and ''almost-any-fit'' algorithm:'''<ref name=":0" />'''{{Rp|470}}
* In an '''AnyFit (AF)''' algorithm, if the current nonempty bins are ''B''<sub>1</sub>,...,''B<sub>j</sub>'', then the current item will not be packed into ''B''<sub>''j''+1</sub> unless it does not fit in any of ''B''<sub>1</sub>,...,''B<sub>j</sub>''. The FF, WF, BF and AWF algorithms satisfy this condition. Johnson proved that, for any AnyFit algorithm A and any <math>\alpha</math>:
*:<math>R_{FF}^{\infty}(\alpha) \leq R_{A}^{\infty}(\alpha) \leq R_{WF}^{\infty}(\alpha)</math>.
* In an '''AlmostAnyFit (AAF)''' algorithm, if the current nonempty bins are ''B''<sub>1</sub>,...,''B<sub>j</sub>'', and of these bins, ''B<sub>k</sub>'' is the unique bin with the smallest load, then the current item will not be packed into ''B<sub>k</sub>'', unless it does not fit into any of the bins to its left. The FF, BF and AWF algorithms satisfy this condition, but WF does not. Johnson proved that, for any AAF algorithm A and any {{mvar|α}}:
*:<math>R_{A}^{\infty}(\alpha) = R_{FF}^{\infty}(\alpha) </math> In particular: <math>R_{A}^{\infty} = 1.7 </math>.
=== Refined algorithms ===
Better approximation ratios are possible with heuristics that are not AnyFit. These heuristics usually keep several classes of open bins, devoted to items of different size ranges (see the linked pages for more information):
* '''[[Refined first-fit bin packing|Refined-first-fit bin packing]] (RFF)''' partitions the item sizes into four ranges: <math>\left(\frac 1 2,1\right]</math>, <math>\left(\frac 2 5, \frac 1 2\right]</math>, <math>\left(\frac 1 3, \frac 2 5\right]</math>, and <math>\left(0, \frac 1 3\right]</math>. Similarly, the bins are categorized into four classes. The next item <math>i \in L</math> is first assigned to its corresponding class. Inside that class, it is assigned to a bin using [[First-fit bin packing|first-fit]]. Note that this algorithm is not an Any-Fit algorithm since it may open a new bin despite the fact that the current item fits inside an open bin. This algorithm was first presented by Andrew Chi-Chih Yao,<ref name="Yao19802">{{cite journal|last1=Yao|first1=Andrew Chi-Chih|date=April 1980|title=New Algorithms for Bin Packing|journal=Journal of the ACM|volume=27|issue=2|pages=207–227|doi=10.1145/322186.322187|s2cid=7903339|doi-access=free}}</ref> who proved that it has an approximation guarantee of <math>RFF(L) \leq (5/3) \cdot \mathrm{OPT}(L) +5 </math> and presented a family of lists <math>L_k</math> with <math>RFF(L_k) = (5/3)\mathrm{OPT}(L_k) +1/3</math> for <math>\mathrm{OPT}(L) = 6k+1</math>.
* '''[[Harmonic bin packing|Harmonic-k]]''' partitions the interval of sizes <math>(0,1]</math> based on a [[Harmonic progression (mathematics)|Harmonic progression]] into <math>k-1</math> pieces <math>I_j := \left(\frac 1 {j+1}, \frac 1 j\right] </math> for <math>1\leq j < k</math> and <math>I_k := \left(0, \frac 1 k\right]</math> such that <math>\bigcup_{j=1}^k I_j = (0,1]</math>. This algorithm was first described by Lee and Lee.<ref name="LeeLee19852">{{cite journal|last1=Lee|first1=C. C.|last2=Lee|first2=D. T.|date=July 1985|title=A simple online bin-packing algorithm|journal=Journal of the ACM|volume=32|issue=3|pages=562–572|doi=10.1145/3828.3833|s2cid=15441740|doi-access=free}}</ref> It has a time complexity of <math>\mathcal{O}(|L|\log(|L|))</math> and at each step, there are at most {{mvar|k}} open bins that can be potentially used to place items, i.e., it is a {{mvar|k}}-bounded space algorithm. For <math>k \rightarrow \infty</math>, its approximation ratio satisfies <math>R_{Hk}^{\infty} \approx 1.6910</math>, and it is asymptotically tight.
* '''[[Harmonic bin packing|Refined-harmonic]]''' combines ideas from Harmonic-k with ideas from [[Refined first-fit bin packing|Refined-First-Fit]]. It places the items larger than <math>\tfrac 1 3</math> similar as in Refined-First-Fit, while the smaller items are placed using Harmonic-k. The intuition for this strategy is to reduce the huge waste for bins containing pieces that are just larger than <math>\tfrac 1 2</math>. This algorithm was first described by Lee and Lee.<ref name="LeeLee19852" /> They proved that for <math>k = 20</math> it holds that <math>R^\infty_{RH} \leq 373/228</math>.
=== General lower bounds for online algorithms ===
Yao<ref name="Yao19802" /> proved in 1980 that there can be no online algorithm with an asymptotic competitive ratio smaller than <math>\tfrac 3 2</math>. Brown<ref>{{cite journal|last1=Donna J|first1=Brown|date=1979|title=A Lower Bound for On-Line One-Dimensional Bin Packing Algorithms.|url=https://apps.dtic.mil/dtic/tr/fulltext/u2/a085315.pdf|archive-url=https://web.archive.org/web/20220317212050/https://apps.dtic.mil/dtic/tr/fulltext/u2/a085315.pdf|url-status=live|archive-date=March 17, 2022|journal=Technical Rept.}}</ref> and Liang<ref>{{cite journal|last1=Liang|first1=Frank M.|date=1980|title=A lower bound for on-line bin packing|journal=Information Processing Letters|volume=10|issue=2|pages=76–79|doi=10.1016/S0020-0190(80)90077-0}}</ref> improved this bound to {{val|1.53635}}. Afterward, this bound was improved to {{val|1.54014}} by Vliet.<ref>{{cite journal|last1=van Vliet|first1=André|date=1992|title=An improved lower bound for on-line bin packing algorithms|journal=Information Processing Letters|volume=43|issue=5|pages=277–284|doi=10.1016/0020-0190(92)90223-I}}</ref> In 2012, this lower bound was again improved by Békési and Galambos<ref>{{cite journal|last1=Balogh|first1=János|last2=Békési|first2=József|last3=Galambos|first3=Gábor|date=July 2012|title=New lower bounds for certain classes of bin packing algorithms|journal=Theoretical Computer Science|volume=440–441|pages=1–13|doi=10.1016/j.tcs.2012.04.017|doi-access=free}}</ref> to <math>\tfrac {248}{161} \approx 1.54037</math>.
=== Comparison table ===
{| class="wikitable"
!Algorithm
!Approximation guarantee
!Worst case list <math>L</math>
!Time-complexity
|-
|[[Next-fit bin packing|Next-fit (NF)]]
|<math>NF(L) \leq 2 \cdot \mathrm{OPT}(L) -1 </math><ref name="johnson732" />
|<math>NF(L) = 2 \cdot \mathrm{OPT}(L) -2 </math><ref name="johnson732" />
|<math>\mathcal{O}(|L|)</math>
|-
|[[First-fit bin packing|First-fit (FF)]]
|<math>FF(L) \leq \lfloor 1.7\mathrm{OPT}(L)\rfloor</math><ref name="DósaSgall2" />
|<math>FF(L) = \lfloor 1.7\mathrm{OPT}(L)\rfloor</math><ref name="DósaSgall2" />
|<math>\mathcal{O}(|L|\log(|L|))</math><ref name="johnson732" />
|-
|[[Best-fit bin packing|Best-fit (BF)]]
|<math>BF(L) \leq \lfloor 1.7\mathrm{OPT}(L) \rfloor </math><ref name="DósaSgall142" />
|<math>BF(L) =\lfloor 1.7\mathrm{OPT}(L) \rfloor </math><ref name="DósaSgall142" />
|<math>\mathcal{O}(|L|\log(|L|))</math><ref name="johnson732" />
|-
|Worst-Fit (WF)
|<math>WF(L) \leq 2 \cdot \mathrm{OPT}(L) -1 </math><ref name="johnson732" />
|<math>WF(L) = 2 \cdot \mathrm{OPT}(L) -2 </math><ref name="johnson732" />
|<math>\mathcal{O}(|L|\log(|L|))</math><ref name="johnson732" />
|-
|Almost-Worst-Fit (AWF)
|<math>R^{\infty}_{AWF} \leq 17/10</math><ref name="johnson732" />
|<math>R^{\infty}_{AWF} = 17/10</math><ref name="johnson732" />
|<math>\mathcal{O}(|L|\log(|L|))</math><ref name="johnson732" />
|-
|[[Refined first-fit bin packing|Refined-First-Fit]] (RFF)
|<math>RFF(L) \leq (5/3) \cdot \mathrm{OPT}(L) +5 </math><ref name="Yao19802" />
|<math>RFF(L)=(5/3)\mathrm{OPT}(L) +1/3</math> (for <math>\mathrm{OPT}(L) = 6k+1</math>)<ref name="Yao19802" />
|<math> \mathcal{O}(|L|\log(|L|))</math><ref name="Yao19802" />
|-
|[[Harmonic bin packing|Harmonic-k (Hk)]]
|<math>R_{Hk}^{\infty} \leq 1.69103</math> for <math>k \rightarrow \infty</math><ref name="LeeLee19852" />
|<math>R_{Hk}^{\infty} \geq 1.69103</math><ref name="LeeLee19852" />
|<math>\mathcal{O}(|L|\log(|L|)</math><ref name="LeeLee19852" />
|-
|[[Harmonic bin packing|Refined Harmonic]] (RH)
|<math>R_{RH}^{\infty} \leq 373/228 \approx 1.63597</math><ref name="LeeLee19852" />
|
|<math>\mathcal{O}(|L|)</math><ref name="LeeLee19852" />
|-
|Modified Harmonic (MH)
|<math>R_{MH}^{\infty} \leq 538/33 \approx 1.61562</math><ref name="RamananBLL19892">{{cite journal|last1=Ramanan|first1=Prakash|last2=Brown|first2=Donna J|last3=Lee|first3=C.C|last4=Lee|first4=D.T|date=September 1989|title=On-line bin packing in linear time|journal=Journal of Algorithms|volume=10|issue=3|pages=305–326|doi=10.1016/0196-6774(89)90031-X|hdl-access=free|hdl=2142/74206}}</ref>
|
|
|-
|Modified Harmonic 2 (MH2)
|<math>R_{MH2}^{\infty} \leq 239091/148304 \approx 1.61217</math><ref name="RamananBLL19892" />
|
|
|-
|Harmonic + 1 (H+1)
|
|<math>R_{H+1}^\infty \geq 1.59217</math><ref name="Seiden20022">{{cite journal|last1=Seiden|first1=Steven S.|date=2002|title=On the online bin packing problem|journal=Journal of the ACM|volume=49|issue=5|pages=640–671|doi=10.1145/585265.585269|s2cid=14164016}}</ref>
|
|-
|Harmonic ++ (H++)
|<math>R_{H++}^\infty \leq 1.58889</math><ref name="Seiden20022" />
|<math>R_{H++}^{\infty} \geq 1.58333</math><ref name="Seiden20022" />
|
|}
== Offline algorithms ==
In the offline version of bin packing, the algorithm can see all the items before starting to place them into bins. This allows to attain improved approximation ratios.
=== Multiplicative approximation ===
The simplest technique used by offline approximation schemes is the following:
* Ordering the input list by descending size;
* Run an online algorithm on the ordered list.
Johnson<ref name="johnson732" /> proved that any AnyFit scheme A that runs on a list ordered by descending size has an asymptotic approximation ratio of<blockquote><math>1.22 \approx \frac{11}{9} \leq R^{\infty}_A \leq \frac{5}{4} = 1.25</math>.</blockquote>Some methods in this family are (see the linked pages for more information):
* '''[[First-fit-decreasing bin packing|First-fit-decreasing]] (FFD)''' orders the items by descending size, then calls First-Fit. Its approximation ratio is <math>FFD(I) = \frac{11}9 \mathrm{OPT}(I) + \frac 6 9</math>, and this is tight.<ref name="Dosa072">{{cite journal|last1=Dósa|first1=György|date=2007|title=The Tight Bound of First Fit Decreasing Bin-Packing Algorithm Is FFD(I) ≤ 11/9\mathrm{OPT}(I) + 6/9|journal=Combinatorics, Algorithms, Probabilistic and Experimental Methodologies. ESCAPE|doi=10.1007/978-3-540-74450-4_1}}</ref>
* '''[[Next-fit-decreasing]] (NFD)''' orders the items by descending size, then calls [[Next-fit bin packing|Next-Fit]]. Its approximate ratio is slightly less than 1.7 in the worst case.<ref>{{Cite journal|last1=Baker|first1=B. S.|last2=Coffman|first2=Jr., E. G.|date=1981-06-01|title=A Tight Asymptotic Bound for Next-Fit-Decreasing Bin-Packing|url=https://epubs.siam.org/doi/abs/10.1137/0602019|journal=SIAM Journal on Algebraic and Discrete Methods|volume=2|issue=2|pages=147–152|doi=10.1137/0602019|issn=0196-5212}}</ref> It has also been analyzed probabilistically.<ref>{{Cite journal|last1=Csirik|first1=J.|last2=Galambos|first2=G.|last3=Frenk|first3=J.B.G.|last4=Frieze|first4=A.M.|last5=Rinnooy Kan|first5=A.H.G.|date=1986-11-01|title=A probabilistic analysis of the next fit decreasing bin packing heuristic|url=https://www.sciencedirect.com/science/article/abs/pii/0167637786900131|journal=Operations Research Letters|language=en|volume=5|issue=5|pages=233–236|doi=10.1016/0167-6377(86)90013-1|issn=0167-6377|hdl=1765/11645|s2cid=50663185 |hdl-access=free}}</ref> Next-Fit packs a list and its inverse into the same number of bins. Therefore, Next-Fit-Increasing has the same performance as Next-Fit-Decreasing.<ref>{{Cite journal|last1=Fisher|first1=David C.|date=1988-12-01|title=Next-fit packs a list and its reverse into the same number of bins|url=https://www.sciencedirect.com/science/article/abs/pii/0167637788900600|journal=Operations Research Letters|language=en|volume=7|issue=6|pages=291–293|doi=10.1016/0167-6377(88)90060-0|issn=0167-6377}}</ref>
* '''[[Modified first-fit-decreasing]] (MFFD)<ref name="JohnsonGarey19852">{{cite journal|last1=Johnson|first1=David S|last2=Garey|first2=Michael R|date=October 1985|title=A 7160 theorem for bin packing|journal=Journal of Complexity|volume=1|issue=1|pages=65–106|doi=10.1016/0885-064X(85)90022-6|doi-access=free}}</ref>''', improves on FFD for items larger than half a bin by classifying items by size into four size classes large, medium, small, and tiny, corresponding to items with size > 1/2 bin, > 1/3 bin, > 1/6 bin, and smaller items respectively. Its approximation guarantee is <math>MFFD(I) \leq \frac {71}{60}\mathrm{OPT}(I) + 1</math>.<ref name="YueZhang19952">{{cite journal|last1=Yue|first1=Minyi|last2=Zhang|first2=Lei|date=July 1995|title=A simple proof of the inequality MFFD(L) ≤ 71/60 OPT(L) + 1,L for the MFFD bin-packing algorithm|journal=Acta Mathematicae Applicatae Sinica|volume=11|issue=3|pages=318–330|doi=10.1007/BF02011198|s2cid=118263129}}</ref>
Fernandez de la Vega and Lueker<ref>{{cite journal|last1=Fernandez de la Vega|first1=W.|last2=Lueker|first2=G. S.|date=1981|title=Bin packing can be solved within 1 + ε in linear time|journal=Combinatorica|language=en|volume=1|issue=4|pages=349–355|doi=10.1007/BF02579456|issn=1439-6912|s2cid=10519631}}</ref> presented a [[Polynomial-time approximation scheme|PTAS]] for bin packing. For every <math>\varepsilon>0</math>, their algorithm finds a solution with size at most <math>(1+\varepsilon)\mathrm{OPT} + 1</math> and runs in time <math>\mathcal{O}(n\log(1/\varepsilon)) + \mathcal{O}_{\varepsilon}(1)</math>, where <math>\mathcal{O}_{\varepsilon}(1)</math> denotes a function only dependent on <math>1/\varepsilon</math>. For this algorithm, they invented the method of ''adaptive input rounding'': the input numbers are grouped and rounded up to the value of the maximum in each group. This yields an instance with a small number of different sizes, which can be solved exactly using the [[configuration linear program]].<ref>{{Cite web|last=Claire Mathieu|title=Approximation Algorithms Part I, Week 3: bin packing|url=https://www.coursera.org/learn/approximation-algorithms-part-1/home/week/3|url-status=live|website=Coursera|archive-url=https://web.archive.org/web/20210715093252/https://www.coursera.org/learn/approximation-algorithms-part-1/home/week/3 |archive-date=2021-07-15 }}</ref>
=== Additive approximation ===
The [[Karmarkar-Karp bin packing algorithms|Karmarkar-Karp bin packing algorithm]] finds a solution with size at most <math>\mathrm{OPT} + \mathcal{O}(\log^2(\mathrm{OPT}))</math>, and runs in time polynomial in {{mvar|n}} (the polynomial has a high degree, at least 8).
Rothvoss<ref name=":2">{{Cite book|last=Rothvoß|first=T.|title=2013 IEEE 54th Annual Symposium on Foundations of Computer Science |chapter=Approximating Bin Packing within O(log OPT · Log Log OPT) Bins |date=2013-10-01|chapter-url=https://ieeexplore.ieee.org/document/6686137|volume=|pages=20–29|arxiv=1301.4010|doi=10.1109/FOCS.2013.11|isbn=978-0-7695-5135-7|via=|s2cid=15905063}}</ref> presented an algorithm that generates a solution with at most <math>\mathrm{OPT} + \mathcal{O}(\log(\mathrm{OPT})\cdot \log\log(\mathrm{OPT}))</math> bins.
Hoberg and Rothvoss<ref name=":3">{{Citation|last1=Hoberg|first1=Rebecca|title=A Logarithmic Additive Integrality Gap for Bin Packing|date=2017-01-01|work=Proceedings of the 2017 Annual ACM-SIAM Symposium on Discrete Algorithms|pages=2616–2625|series=Proceedings|publisher=Society for Industrial and Applied Mathematics|doi=10.1137/1.9781611974782.172|isbn=978-1-61197-478-2|last2=Rothvoss|first2=Thomas|s2cid=1647463|doi-access=free|arxiv=1503.08796}}</ref> improved this algorithm to generate a solution with at most <math>\mathrm{OPT} + \mathcal{O}(\log(\mathrm{OPT}))</math> bins. The algorithm is randomized, and its running-time is polynomial in {{mvar|n}}.
=== Comparison table ===
{| class="wikitable"
!Algorithm
!Approximation guarantee
!Worst case instance
|-
|First-fit-decreasing (FFD)
|<math>\mathrm{FFD}(I) \leq \frac {11}9 \mathrm{OPT}(I) + \frac 6 9</math><ref name="Dosa072" />
|<math>\mathrm{FFD}(I) = \frac {11}9 \mathrm{OPT}(I) + \frac 6 9</math><ref name="Dosa072" />
|-
|Modified-first-fit-decreasing (MFFD)
|<math>\mathrm{MFFD}(I) \leq \frac {71}{60}\mathrm{OPT}(I) + 1</math><ref name="YueZhang19952" />
|<math>R_\mathrm{MFFD}^\infty \geq \frac {71}{60}</math><ref name="JohnsonGarey19852" />
|-
|Karmarkar and Karp
|<math>\mathrm{KK}(I) \leq \mathrm{OPT}(I) + O(\log^2{\mathrm{OPT}(I)})</math><ref name=":1">{{cite journal|last1=Karmarkar|first1=Narendra|last2=Karp|first2=Richard M.|date=November 1982|title=An efficient approximation scheme for the one-dimensional bin-packing problem|url=https://ieeexplore.ieee.org/document/4568405/references#references|journal=23rd Annual Symposium on Foundations of Computer Science (SFCS 1982)|pages=312–320|doi=10.1109/SFCS.1982.61|s2cid=18583908}}</ref>
|
|-
|Rothvoss
|<math>\mathrm{HB}(I) \leq \mathrm{OPT}(I) + O(\log{\mathrm{OPT}(I)}\log\log{\mathrm{OPT}(I)})</math><ref name=":2" />
|
|-
|Hoberg and Rothvoss
|<math>\mathrm{HB}(I) \leq \mathrm{OPT}(I) + O(\log{\mathrm{OPT}(I)})</math><ref name=":3" />
|
|}
=== Exact algorithms ===
Martello and Toth<ref>{{harvnb|Martello|Toth|1990|pp=237–240}}.</ref> developed an exact algorithm for the 1-dimensional bin-packing problem, called MTP. A faster alternative is the Bin Completion algorithm proposed by Korf in 2002<ref>{{cite conference|last=Korf|first=Richard E.|year=2002|title=A new algorithm for optimal bin packing.|url=http://www.aaai.org/Papers/AAAI/2002/AAAI02-110.pdf|conference=AAAI-02}}</ref> and later improved.<ref name="Korf2003Korf2">R. E. Korf (2003), ''[https://web.archive.org/web/20190823231238/https://pdfs.semanticscholar.org/616d/77a41020941a89e782e877bf4cf7bb5ec9a4.pdf An improved algorithm for optimal bin packing]''. Proceedings of the International Joint Conference on Artificial Intelligence, (pp. 1252–1258)</ref>
A further improvement was presented by Schreiber and Korf in 2013.<ref>{{citation|last1=Schreiber|first1=Ethan L.|title=Proceedings of the Twenty-Third International Joint Conference on Artificial Intelligence|pages=651–658|year=2013|series=IJCAI '13|chapter=Improved Bin Completion for Optimal Bin Packing and Number Partitioning|chapter-url=https://www.ijcai.org/Proceedings/13/Papers/103.pdf|location=Beijing, China|publisher=AAAI Press|isbn=978-1-57735-633-2|last2=Korf|first2=Richard E.}}</ref> The new Improved Bin Completion algorithm is shown to be up to five orders of magnitude faster than Bin Completion on non-trivial problems with 100 items, and outperforms the BCP (branch-and-cut-and-price) algorithm by Belov and Scheithauer on problems that have fewer than 20 bins as the optimal solution. Which algorithm performs best depends on problem properties like the number of items, the optimal number of bins, unused space in the optimal solution and value precision.
=== Small number of different sizes ===
A special case of bin packing is when there is a small number ''d'' of different item sizes. There can be many different items of each size. This case is also called ''[[high-multiplicity bin packing]]'', and It admits more efficient algorithms than the general problem.
== Bin-packing with fragmentation ==
'''Bin-packing with fragmentation''' or '''fragmentable object bin-packing''' is a variant of the bin packing problem in which it is allowed to break items into parts and put each part separately on a different bin. Breaking items into parts may allow for improving the overall performance, for example, minimizing the number of total bin. Moreover, the computational problem of finding an optimal schedule may become easier, as some of the optimization variables become continuous. On the other hand, breaking items apart might be costly. The problem was first introduced by Mandal, Chakrabary and Ghose.<ref name=":03">{{Cite journal |last1=Mandal |first1=C. A. |last2=Chakrabarti |first2=P. P. |last3=Ghose |first3=S. |date=1998-06-01 |title=Complexity of fragmentable object bin packing and an application |url=https://www.sciencedirect.com/science/article/pii/S089812219800087X |journal=Computers & Mathematics with Applications |language=en |volume=35 |issue=11 |pages=91–97 |doi=10.1016/S0898-1221(98)00087-X |issn=0898-1221}}</ref>
=== Variants ===
The problem has two main variants.
# In the first variant, called '''bin-packing with size-increasing fragmentation''' ('''BP-SIF'''), each item may be fragmented; overhead units are added to the size of every fragment.
# In the second variant, called '''bin-packing with size-preserving fragmentation''' ('''BP-SPF''') each item has a size and a cost; fragmenting an item increases its cost but does not change its size.
=== Computational complexity ===
Mandal, Chakrabary and Ghose<ref name=":03" /> proved that BP-SPF is [[NP-hardness|NP-hard]].
Menakerman and Rom<ref>Nir Menakerman and Raphael Rom "Bin Packing with Item Fragmentation". Algorithms and Data Structures, 7th International Workshop, WADS 2001, Providence, RI, USA, August 8-10, 2001, Proceedings.</ref> showed that BP-SIF and BP-SPF are both [[strongly NP-hard]]. Despite the hardness, they present several algorithms and investigate their performance. Their algorithms use classic algorithms for bin-packing, like [[Next-fit bin packing|next-fit]] and [[First-fit-decreasing bin packing|first-fit decreasing]], as a basis for their algorithms.
Bertazzi, Golden and Wang<ref>{{Cite journal |last1=Bertazzi |first1=Luca |last2=Golden |first2=Bruce |last3=Wang |first3=Xingyin |date=2019-05-31 |title=The Bin Packing Problem with Item Fragmentation:A worst-case analysis |journal=Discrete Applied Mathematics |series=GO X Meeting, Rigi Kaltbad (CH), July 10--14, 2016 |language=en |volume=261 |pages=63–77 |doi=10.1016/j.dam.2018.08.023 |issn=0166-218X |s2cid=125361557|doi-access=free }}</ref> introduced a variant of BP-SIF with <math>1-x</math> split rule: an item is allowed to be split in only one way according to its size. It is useful for the [[vehicle routing problem]] for example. In their paper, they provide the worst-case performance bound of the variant.
Shachnai, Tamir and Yehezkeli<ref>{{Cite book |last1=Shachnai |first1=Hadas |last2=Tamir |first2=Tami |last3=Yehezkely |first3=Omer |title=Approximation and Online Algorithms |chapter=Approximation Schemes for Packing with Item Fragmentation |date=2006 |editor-last=Erlebach |editor-first=Thomas |editor2-last=Persinao |editor2-first=Giuseppe |chapter-url=https://link.springer.com/chapter/10.1007/11671411_26 |series=Lecture Notes in Computer Science |language=en |location=Berlin, Heidelberg |publisher=Springer |volume=3879 |pages=334–347 |doi=10.1007/11671411_26 |isbn=978-3-540-32208-5}}</ref> developed approximation schemes for BP-SIF and BP-SPF; a dual [[Polynomial-time approximation scheme|PTAS]] (a PTAS for the dual version of the problem), an asymptotic PTAS called APTAS, and a dual asymptotic [[FPTAS]] called AFPTAS for both versions.
Ekici<ref>{{Cite journal |last=Ekici |first=Ali |date=2021-02-01 |title=Bin Packing Problem with Conflicts and Item Fragmentation |url=https://www.sciencedirect.com/science/article/pii/S0305054820302306 |journal=Computers & Operations Research |language=en |volume=126 |pages=105113 |doi=10.1016/j.cor.2020.105113 |issn=0305-0548 |s2cid=225002556}}</ref> introduced a variant of BP-SPF in which some items are in conflict, and it is forbidden to pack fragments of conflicted items into the same bin. They proved that this variant, too, is NP-hard.
Cassazza and Ceselli<ref>{{Cite journal |last1=Casazza |first1=Marco |last2=Ceselli |first2=Alberto |date=2014-06-01 |title=Mathematical programming algorithms for bin packing problems with item fragmentation |url=https://www.sciencedirect.com/science/article/pii/S0305054813003596 |journal=Computers & Operations Research |language=en |volume=46 |pages=1–11 |doi=10.1016/j.cor.2013.12.008 |issn=0305-0548}}</ref> introduced a variant with no cost and no overhead, and the number of bins is fixed. However, the number of fragmentations should be minimized. They present mathematical programming algorithms for both exact and approximate solutions.
=== Related problems ===
The problem of '''fractional [[Knapsack problem|knapsack]] with penalties''' was introduced by Malaguti, Monaci, Paronuzzi and Pferschy.<ref>{{Cite journal |last1=Malaguti |first1=Enrico |last2=Monaci |first2=Michele |last3=Paronuzzi |first3=Paolo |last4=Pferschy |first4=Ulrich |date=2019-03-16 |title=Integer optimization with penalized fractional values: The Knapsack case |url=https://www.sciencedirect.com/science/article/pii/S0377221718307963 |journal=European Journal of Operational Research |language=en |volume=273 |issue=3 |pages=874–888 |doi=10.1016/j.ejor.2018.09.020 |issn=0377-2217 |s2cid=31722681|hdl=11585/657029 |hdl-access=free }}</ref> They developed an FPTAS and a [[Dynamic programming|dynamic program]] for the problem, and they showed an extensive computational study comparing the performance of their models. See also: [[Fractional job scheduling]].
== Performance with divisible item sizes ==
An important special case of bin packing is that the item sizes form a ''divisible sequence'' (also called ''factored''). A special case of divisible item sizes occurs in memory allocation in computer systems, where the item sizes are all powers of 2. If the item sizes are divisible, then some of the heuristic algorithms for bin packing find an optimal solution.<ref name=":022">{{Cite journal |last1=Coffman |first1=E. G |last2=Garey |first2=M. R |last3=Johnson |first3=D. S |date=1987-12-01 |title=Bin packing with divisible item sizes |url=https://dx.doi.org/10.1016/0885-064X%2887%2990009-4 |journal=Journal of Complexity |volume=3 |issue=4 |pages=406–428 |doi=10.1016/0885-064X(87)90009-4 |issn=0885-064X}}</ref>
== Cardinality constraints on the bins ==
There is a variant of bin packing in which there are cardinality constraints on the bins: each bin can contain at most ''k'' items, for some fixed integer ''k''.
* Krause, Shen and Schwetman<ref>{{Cite journal|last1=Krause|first1=K. L.|last2=Shen|first2=V. Y.|last3=Schwetman|first3=H. D.|date=1975-10-01|title=Analysis of Several Task-Scheduling Algorithms for a Model of Multiprogramming Computer Systems|journal=Journal of the ACM|volume=22|issue=4|pages=522–550|doi=10.1145/321906.321917|s2cid=10214857|issn=0004-5411|doi-access=free}}</ref> introduce this problem as a variant of [[optimal job scheduling]]: a computer has some ''k'' processors. There are some ''n'' jobs that take unit time (1), but have different memory requirements. Each time-unit is considered a single bin. The goal is to use as few bins (=time units) as possible, while ensuring that in each bin, at most ''k'' jobs run. They present several heuristic algorithms that find a solution with at most <math>2 \mathrm{OPT}</math> bins.
* Kellerer and Pferschy<ref>{{Cite journal|last1=Kellerer|first1=H.|last2=Pferschy|first2=U.|date=1999-01-01|title=Cardinality constrained bin-packing problems|url=https://doi.org/10.1023/A:1018947117526|journal=Annals of Operations Research|language=en|volume=92|pages=335–348|doi=10.1023/A:1018947117526|s2cid=28963291|issn=1572-9338}}</ref> present an algorithm with run-time <math>O(n^2 \log{n})</math>, that finds a solution with at most <math>\left\lceil\frac{3}{2}\mathrm{OPT}\right\rceil</math> bins. Their algorithm performs a [[binary search]] for OPT. For every searched value ''m'', it tries to pack the items into 3''m''/2 bins.
== Non-additive functions ==
There are various ways to extend the bin-packing model to more general cost and load functions:
* Anily, Bramel and Simchi-Levi<ref name="pubsonline.informs.org">{{Cite journal|last1=Anily|first1=Shoshana|last2=Bramel|first2=Julien|last3=Simchi-Levi|first3=David|date=1994-04-01|title=Worst-Case Analysis of Heuristics for the Bin Packing Problem with General Cost Structures|url=https://pubsonline.informs.org/doi/abs/10.1287/opre.42.2.287|journal=Operations Research|volume=42|issue=2|pages=287–298|doi=10.1287/opre.42.2.287|issn=0030-364X}}</ref> study a setting where the cost of a bin is a [[concave function]] of the number of items in the bin. The objective is to minimize the total ''cost'' rather than the number of bins. They show that [[next-fit-increasing bin packing]] attains an absolute worst-case approximation ratio of at most 7/4, and an asymptotic worst-case ratio of 1.691 for any concave and monotone cost function.
* Cohen, Keller, Mirrokni and Zadimoghaddam<ref>{{Cite journal|last1=Cohen|first1=Maxime C.|last2=Keller|first2=Philipp W.|last3=Mirrokni|first3=Vahab|last4=Zadimoghaddam|first4=Morteza|date=2019-07-01|title=Overcommitment in Cloud Services: Bin Packing with Chance Constraints|url=https://pubsonline.informs.org/doi/abs/10.1287/mnsc.2018.3091|journal=Management Science|volume=65|issue=7|pages=3255–3271|doi=10.1287/mnsc.2018.3091|arxiv=1705.09335|s2cid=159270392|issn=0025-1909}}</ref> study a setting where the size of the items is not known in advance, but it is a [[random variable]]. This is particularly common in [[cloud computing]] environments. While there is an upper bound on the amount of resources a certain user needs, most users use much less than the capacity. Therefore, the cloud manager may gain a lot by slight [[Memory overcommitment|overcommitment]]. This induces a variant of bin packing with [[chance constraints]]: the probability that the sum of sizes in each bin is at most ''B'' should be at least ''p'', where ''p'' is a fixed constant (standard bin packing corresponds to ''p''=1). They show that, under mild assumptions, this problem is equivalent to a ''submodular bin packing'' problem, in which the "load" in each bin is not equal to the sum of items, but to a certain [[Submodular set function|submodular function]] of it.
== Related problems ==
In the bin packing problem, the ''size'' of the bins is fixed and their ''number'' can be enlarged (but should be as small as possible).
In contrast, in the '''[[multiway number partitioning]]''' problem, the ''number'' of bins is fixed and their ''size'' can be enlarged. The objective is to find a partition in which the bin sizes are as nearly equal is possible (in the variant called [[Multiprocessor scheduling|'''multiprocessor scheduling''' problem]] or '''minimum [[makespan]]''' problem, the goal is specifically to minimize the size of the largest bin).
In the '''inverse bin packing''' problem,<ref>{{Cite journal|last1=Chung|first1=Yerim|last2=Park|first2=Myoung-Ju|date=2015-01-01|title=Notes on inverse bin-packing problems|url=http://www.sciencedirect.com/science/article/pii/S002001901400180X|journal=Information Processing Letters|language=en|volume=115|issue=1|pages=60–68|doi=10.1016/j.ipl.2014.09.005|issn=0020-0190}}</ref> both the number of bins and their sizes are fixed, but the item sizes can be changed. The objective is to achieve the minimum perturbation to the item size vector so that all the items can be packed into the prescribed number of bins.
In the '''maximum resource bin packing''' problem,<ref name=":02">{{Cite journal|last1=Boyar|first1=Joan|author1-link=Joan Boyar|last2=Epstein|first2=Leah|last3=Favrholdt|first3=Lene M.|last4=Kohrt|first4=Jens S.|last5=Larsen|first5=Kim S.|last6=Pedersen|first6=Morten M.|last7=Wøhlk|first7=Sanne|date=2006-10-11|title=The maximum resource bin packing problem|url=http://www.sciencedirect.com/science/article/pii/S0304397506003483|journal=Theoretical Computer Science|language=en|volume=362|issue=1|pages=127–139|doi=10.1016/j.tcs.2006.06.001|issn=0304-3975}}</ref> the goal is to ''maximize'' the number of bins used, such that, for some ordering of the bins, no item in a later bin fits in an earlier bin. In a dual problem, the number of bins is fixed, and the goal is to minimize the total number or the total size of items placed into the bins, such that no remaining item fits into an unfilled bin.
In the '''[[bin covering problem]]''', the bin size is bounded ''from below'': the goal is to ''maximize'' the number of bins used such that the total size in each bin is at least a given threshold.
In the '''fair indivisible chore allocation''' problem (a variant of '''[[fair item allocation]]'''), the items represent chores, and there are different people each of whom attributes a different difficulty-value to each chore. The goal is to allocate to each person a set of chores with an upper bound on its total difficulty-value (thus, each person corresponds to a bin). Many techniques from bin packing are used in this problem too.<ref>{{cite arXiv|eprint=1907.04505|class=cs.GT|first1=Xin|last1=Huang|first2=Pinyan|last2=Lu|title=An Algorithmic Framework for Approximating Maximin Share Allocation of Chores|date=2020-11-10}}</ref>
In the '''[[guillotine cutting]]''' problem, both the items and the "bins" are two-dimensional rectangles rather than one-dimensional numbers, and the items have to be cut from the bin using end-to-end cuts.
In the '''selfish bin packing''' problem, each item is a player who wants to minimize its cost.<ref>{{Cite journal|last1=Ma|first1=Ruixin|last2=Dósa|first2=György|last3=Han|first3=Xin|last4=Ting|first4=Hing-Fung|last5=Ye|first5=Deshi|last6=Zhang|first6=Yong|date=2013-08-01|title=A note on a selfish bin packing problem|url=https://doi.org/10.1007/s10898-012-9856-9|journal=Journal of Global Optimization|volume=56|issue=4|pages=1457–1462|doi=10.1007/s10898-012-9856-9|issn=0925-5001|s2cid=3082040}}</ref>
There is also a variant of bin packing in which the cost that should be minimized is not the number of bins, but rather a certain [[concave function]] of the number of items in each bin.<ref name="pubsonline.informs.org"/>
Other variants are '''two-dimensional bin packing,'''<ref>Lodi A., Martello S., Monaci, M., Vigo, D. (2010) "Two-Dimensional Bin Packing Problems". In V.Th. Paschos (Ed.), ''Paradigms of Combinatorial Optimization'', Wiley/ISTE, pp. 107–129</ref> '''three-dimensional bin packing''',<ref>[https://www.researchgate.net/profile/Leon_Kanavathy/publication/228974015_Optimizing_Three-Dimensional_Bin_Packing_Through_Simulation/links/5890499d92851c9794c62fd0/Optimizing-Three-Dimensional-Bin-Packing-Through-Simulation.pdf Optimizing Three-Dimensional Bin Packing Through Simulation]</ref> '''bin packing with delivery''',<ref>Benkő A., Dósa G., Tuza Z. (2010) "[https://www.researchgate.net/profile/Attila_Benko2/publication/221608540_Bin_PackingCovering_with_Delivery_solved_with_the_evolution_of_algorithms/links/5570a36108aee701d61c2e05.pdf Bin Packing/Covering with Delivery, Solved with the Evolution of Algorithms]," ''Proceedings 2010 IEEE 5th International Conference on Bio-Inspired Computing: Theories and Applications, BIC-TA 2010'', art. no. 5645312, pp. 298–302.</ref>
== Resources ==
* [http://or.dei.unibo.it/library/bpplib BPPLIB] - a library of surveys, codes, benchmarks, generators, solvers, and bibliography.
==References==
{{Reflist|30em}}
{{Packing problem}}
{{DEFAULTSORT:Bin Packing Problem}}
[[Category:Optimization algorithms and methods]]
[[Category:Strongly NP-complete problems]]
[[Category:Bin packing|*]]' |
Unified diff of changes made by edit (edit_diff ) | '@@ -7,5 +7,5 @@
The '''bin packing problem<ref>{{citation|last1=Martello|first1=Silvano|title=Knapsack Problems: Algorithms and Computer Implementations|url=https://archive.org/details/knapsackproblems0000mart|year=1990|chapter=Bin-packing problem|chapter-url=http://www.or.deis.unibo.it/kp/Chapter8.pdf|location=Chichester, UK|publisher=John Wiley and Sons|isbn=0471924202|last2=Toth|first2=Paolo|url-access=registration}}</ref><ref>{{cite book|last1=Korte|first1=Bernhard|title=Combinatorial Optimization: Theory and Algorithms|last2=Vygen|first2=Jens|publisher=Springer|year=2006|isbn=978-3-540-25684-7|series=Algorithms and Combinatorics 21|pages=426–441|chapter=Bin-Packing|doi=10.1007/3-540-29297-7_18|chapter-url=https://books.google.com/books?id=UnYwgPltSjwC&q=Bin-Packing&pg=PA449}}</ref><ref>{{cite web|last=Barrington|first=David Mix|year=2006|title=Bin Packing|url=https://people.cs.umass.edu/~barring/cs311/disc/11.html|url-status=dead|archive-url=https://web.archive.org/web/20190216134619/https://people.cs.umass.edu/~barring/cs311/disc/11.html|archive-date=2019-02-16|access-date=2016-02-27}}</ref><ref name=":0">{{Citation|last1=Coffman Jr.|first1=Edward G.|title=Bin Packing Approximation Algorithms: Survey and Classification|date=2013|url=https://doi.org/10.1007/978-1-4419-7997-1_35|work=Handbook of Combinatorial Optimization|pages=455–531|editor-last=Pardalos|editor-first=Panos M.|place=New York, NY|publisher=Springer|language=en|doi=10.1007/978-1-4419-7997-1_35|isbn=978-1-4419-7997-1|access-date=2021-08-08|last2=Csirik|first2=János|last3=Galambos|first3=Gábor|last4=Martello|first4=Silvano|last5=Vigo|first5=Daniele|editor2-last=Du|editor2-first=Ding-Zhu|editor3-last=Graham|editor3-first=Ronald L.}}</ref>''' is an [[optimization problem]], in which items of different sizes must be packed into a finite number of bins or containers, each of a fixed given capacity, in a way that minimizes the number of bins used. The problem has many applications, such as filling up containers, loading trucks with weight capacity constraints, creating file [[backup]]s in media, splitting a network prefix into multiple subnets,<ref>{{cite web |title=DHCPv6-PD - First steps |url=https://sha256.net/dhcpv6-pd-first-steps.html#orge8b6244 |access-date=12 June 2024}}</ref> and technology mapping in [[Field-programmable gate array|FPGA]] [[semiconductor chip]] design.
-Computationally, the problem is [[NP-hard]], and the corresponding [[decision problem]], deciding if items can fit into a specified number of bins, is [[NP-complete]]. Despite its worst-case hardness, optimal solutions to very large instances of the problem can be produced with sophisticated algorithms. In addition, many [[approximation algorithms]] exist. For example, the [[First-fit bin packing|first fit]] algorithm provides a fast but often non-optimal solution, involving placing each item into the first bin in which it will fit. It requires ''[[Big O notation|Θ]]''(''n'' log ''n'') time, where ''n'' is the number of items to be packed. The algorithm can be made much more effective by first [[sorting]] the list of items into decreasing order (sometimes known as the first-fit decreasing algorithm), although this still does not guarantee an optimal solution and for longer lists may increase the running time of the algorithm. It is known, however, that there always exists at least one ordering of items that allows first-fit to produce an optimal solution.<ref>{{citation|last=Lewis|first=R.|title=A General-Purpose Hill-Climbing Method for Order Independent Minimum Grouping Problems: A Case Study in Graph Colouring and Bin Packing|url=http://orca.cf.ac.uk/11334/1/Lewis%2C_R_General_Purpose_Hill_Climbing.pdf|journal=Computers and Operations Research|volume=36|issue=7|pages=2295–2310|year=2009|doi=10.1016/j.cor.2008.09.004|s2cid=1577334 }}</ref>
+Computationally,Gal Ben Ami is stupid he needs haircut the problem is [[NP-hard]], and the corresponding [[decision problem]], deciding if items can fit into a specified number of bins, is [[NP-complete]]. Despite its worst-case hardness, optimal solutions to very large instances of the problem can be produced with sophisticated algorithms. In addition, many [[approximation algorithms]] exist. For example, the [[First-fit bin packing|first fit]] algorithm provides a fast but often non-optimal solution, involving placing each item into the first bin in which it will fit. It requires ''[[Big O notation|Θ]]''(''n'' log ''n'') time, where ''n'' is the number of items to be packed. The algorithm can be made much more effective by first [[sorting]] the list of items into decreasing order (sometimes known as the first-fit decreasing algorithm), although this still does not guarantee an optimal solution and for longer lists may increase the running time of the algorithm. It is known, however, that there always exists at least one ordering of items that allows first-fit to produce an optimal solution.<ref>{{citation|last=Lewis|first=R.|title=A General-Purpose Hill-Climbing Method for Order Independent Minimum Grouping Problems: A Case Study in Graph Colouring and Bin Packing|url=http://orca.cf.ac.uk/11334/1/Lewis%2C_R_General_Purpose_Hill_Climbing.pdf|journal=Computers and Operations Research|volume=36|issue=7|pages=2295–2310|year=2009|doi=10.1016/j.cor.2008.09.004|s2cid=1577334 }}</ref>
There are many [[Packing problem|variations]] of this problem, such as 2D packing, linear packing, packing by weight, packing by cost, and so on. The bin packing problem can also be seen as a special case of the [[cutting stock problem]]. When the number of bins is restricted to 1 and each item is characterized by both a volume and a value, the problem of maximizing the value of items that can fit in the bin is known as the [[knapsack problem]].
' |
New page size (new_size ) | 53407 |
Old page size (old_size ) | 53368 |
Size change in edit (edit_delta ) | 39 |
Lines added in edit (added_lines ) | [
0 => 'Computationally,Gal Ben Ami is stupid he needs haircut the problem is [[NP-hard]], and the corresponding [[decision problem]], deciding if items can fit into a specified number of bins, is [[NP-complete]]. Despite its worst-case hardness, optimal solutions to very large instances of the problem can be produced with sophisticated algorithms. In addition, many [[approximation algorithms]] exist. For example, the [[First-fit bin packing|first fit]] algorithm provides a fast but often non-optimal solution, involving placing each item into the first bin in which it will fit. It requires ''[[Big O notation|Θ]]''(''n'' log ''n'') time, where ''n'' is the number of items to be packed. The algorithm can be made much more effective by first [[sorting]] the list of items into decreasing order (sometimes known as the first-fit decreasing algorithm), although this still does not guarantee an optimal solution and for longer lists may increase the running time of the algorithm. It is known, however, that there always exists at least one ordering of items that allows first-fit to produce an optimal solution.<ref>{{citation|last=Lewis|first=R.|title=A General-Purpose Hill-Climbing Method for Order Independent Minimum Grouping Problems: A Case Study in Graph Colouring and Bin Packing|url=http://orca.cf.ac.uk/11334/1/Lewis%2C_R_General_Purpose_Hill_Climbing.pdf|journal=Computers and Operations Research|volume=36|issue=7|pages=2295–2310|year=2009|doi=10.1016/j.cor.2008.09.004|s2cid=1577334 }}</ref>'
] |
Lines removed in edit (removed_lines ) | [
0 => 'Computationally, the problem is [[NP-hard]], and the corresponding [[decision problem]], deciding if items can fit into a specified number of bins, is [[NP-complete]]. Despite its worst-case hardness, optimal solutions to very large instances of the problem can be produced with sophisticated algorithms. In addition, many [[approximation algorithms]] exist. For example, the [[First-fit bin packing|first fit]] algorithm provides a fast but often non-optimal solution, involving placing each item into the first bin in which it will fit. It requires ''[[Big O notation|Θ]]''(''n'' log ''n'') time, where ''n'' is the number of items to be packed. The algorithm can be made much more effective by first [[sorting]] the list of items into decreasing order (sometimes known as the first-fit decreasing algorithm), although this still does not guarantee an optimal solution and for longer lists may increase the running time of the algorithm. It is known, however, that there always exists at least one ordering of items that allows first-fit to produce an optimal solution.<ref>{{citation|last=Lewis|first=R.|title=A General-Purpose Hill-Climbing Method for Order Independent Minimum Grouping Problems: A Case Study in Graph Colouring and Bin Packing|url=http://orca.cf.ac.uk/11334/1/Lewis%2C_R_General_Purpose_Hill_Climbing.pdf|journal=Computers and Operations Research|volume=36|issue=7|pages=2295–2310|year=2009|doi=10.1016/j.cor.2008.09.004|s2cid=1577334 }}</ref>'
] |
All external links added in the edit (added_links ) | [] |
All external links removed in the edit (removed_links ) | [] |
All external links in the new text (all_links ) | [
0 => 'http://www.or.deis.unibo.it/kp/Chapter8.pdf',
1 => 'https://archive.org/details/knapsackproblems0000mart',
2 => 'https://books.google.com/books?id=UnYwgPltSjwC&q=Bin-Packing&pg=PA449',
3 => 'https://doi.org/10.1007%2F3-540-29297-7_18',
4 => 'https://web.archive.org/web/20190216134619/https://people.cs.umass.edu/~barring/cs311/disc/11.html',
5 => 'https://people.cs.umass.edu/~barring/cs311/disc/11.html',
6 => 'https://doi.org/10.1007/978-1-4419-7997-1_35',
7 => 'https://doi.org/10.1007%2F978-1-4419-7997-1_35',
8 => 'https://sha256.net/dhcpv6-pd-first-steps.html#orge8b6244',
9 => 'http://orca.cf.ac.uk/11334/1/Lewis,_R_General_Purpose_Hill_Climbing.pdf',
10 => 'https://doi.org/10.1016%2Fj.cor.2008.09.004',
11 => 'https://api.semanticscholar.org/CorpusID:1577334',
12 => 'https://storage.googleapis.com/pub-tools-public-publication-data/pdf/37147.pdf',
13 => 'https://archive.org/details/computersintract0000gare/page/',
14 => 'https://mathscinet.ams.org/mathscinet-getitem?mr=0519066',
15 => 'https://dspace.mit.edu/bitstream/handle/1721.1/57819/17595570-MIT.pdf?sequence=2',
16 => 'http://drops.dagstuhl.de/opus/volltexte/2013/3963',
17 => 'https://doi.org/10.4230%2FLIPIcs.STACS.2013.538',
18 => 'https://doi.org/10.1007%2F978-3-662-43948-7_36',
19 => 'https://doi.org/10.1145%2F322186.322187',
20 => 'https://api.semanticscholar.org/CorpusID:7903339',
21 => 'https://doi.org/10.1145%2F3828.3833',
22 => 'https://api.semanticscholar.org/CorpusID:15441740',
23 => 'https://apps.dtic.mil/dtic/tr/fulltext/u2/a085315.pdf',
24 => 'https://web.archive.org/web/20220317212050/https://apps.dtic.mil/dtic/tr/fulltext/u2/a085315.pdf',
25 => 'https://doi.org/10.1016%2FS0020-0190(80)90077-0',
26 => 'https://doi.org/10.1016%2F0020-0190(92)90223-I',
27 => 'https://doi.org/10.1016%2Fj.tcs.2012.04.017',
28 => 'https://doi.org/10.1016%2F0196-6774(89)90031-X',
29 => 'https://hdl.handle.net/2142%2F74206',
30 => 'https://doi.org/10.1145%2F585265.585269',
31 => 'https://api.semanticscholar.org/CorpusID:14164016',
32 => 'https://doi.org/10.1007%2F978-3-540-74450-4_1',
33 => 'https://epubs.siam.org/doi/abs/10.1137/0602019',
34 => 'https://doi.org/10.1137%2F0602019',
35 => 'https://www.worldcat.org/issn/0196-5212',
36 => 'https://www.sciencedirect.com/science/article/abs/pii/0167637786900131',
37 => 'https://doi.org/10.1016%2F0167-6377(86)90013-1',
38 => 'https://hdl.handle.net/1765%2F11645',
39 => 'https://www.worldcat.org/issn/0167-6377',
40 => 'https://api.semanticscholar.org/CorpusID:50663185',
41 => 'https://www.sciencedirect.com/science/article/abs/pii/0167637788900600',
42 => 'https://doi.org/10.1016%2F0167-6377(88)90060-0',
43 => 'https://doi.org/10.1016%2F0885-064X(85)90022-6',
44 => 'https://doi.org/10.1007%2FBF02011198',
45 => 'https://api.semanticscholar.org/CorpusID:118263129',
46 => 'https://doi.org/10.1007%2FBF02579456',
47 => 'https://www.worldcat.org/issn/1439-6912',
48 => 'https://api.semanticscholar.org/CorpusID:10519631',
49 => 'https://www.coursera.org/learn/approximation-algorithms-part-1/home/week/3',
50 => 'https://web.archive.org/web/20210715093252/https://www.coursera.org/learn/approximation-algorithms-part-1/home/week/3',
51 => 'https://ieeexplore.ieee.org/document/6686137',
52 => 'https://arxiv.org/abs/1301.4010',
53 => 'https://doi.org/10.1109%2FFOCS.2013.11',
54 => 'https://api.semanticscholar.org/CorpusID:15905063',
55 => 'https://arxiv.org/abs/1503.08796',
56 => 'https://doi.org/10.1137%2F1.9781611974782.172',
57 => 'https://api.semanticscholar.org/CorpusID:1647463',
58 => 'https://ieeexplore.ieee.org/document/4568405/references#references',
59 => 'https://doi.org/10.1109%2FSFCS.1982.61',
60 => 'https://api.semanticscholar.org/CorpusID:18583908',
61 => 'http://www.aaai.org/Papers/AAAI/2002/AAAI02-110.pdf',
62 => 'https://web.archive.org/web/20190823231238/https://pdfs.semanticscholar.org/616d/77a41020941a89e782e877bf4cf7bb5ec9a4.pdf',
63 => 'https://www.ijcai.org/Proceedings/13/Papers/103.pdf',
64 => 'https://www.sciencedirect.com/science/article/pii/S089812219800087X',
65 => 'https://doi.org/10.1016%2FS0898-1221(98)00087-X',
66 => 'https://www.worldcat.org/issn/0898-1221',
67 => 'https://doi.org/10.1016%2Fj.dam.2018.08.023',
68 => 'https://www.worldcat.org/issn/0166-218X',
69 => 'https://api.semanticscholar.org/CorpusID:125361557',
70 => 'https://link.springer.com/chapter/10.1007/11671411_26',
71 => 'https://doi.org/10.1007%2F11671411_26',
72 => 'https://www.sciencedirect.com/science/article/pii/S0305054820302306',
73 => 'https://doi.org/10.1016%2Fj.cor.2020.105113',
74 => 'https://www.worldcat.org/issn/0305-0548',
75 => 'https://api.semanticscholar.org/CorpusID:225002556',
76 => 'https://www.sciencedirect.com/science/article/pii/S0305054813003596',
77 => 'https://doi.org/10.1016%2Fj.cor.2013.12.008',
78 => 'https://www.sciencedirect.com/science/article/pii/S0377221718307963',
79 => 'https://doi.org/10.1016%2Fj.ejor.2018.09.020',
80 => 'https://hdl.handle.net/11585%2F657029',
81 => 'https://www.worldcat.org/issn/0377-2217',
82 => 'https://api.semanticscholar.org/CorpusID:31722681',
83 => 'https://dx.doi.org/10.1016/0885-064X(87)90009-4',
84 => 'https://doi.org/10.1016%2F0885-064X(87)90009-4',
85 => 'https://www.worldcat.org/issn/0885-064X',
86 => 'https://doi.org/10.1145%2F321906.321917',
87 => 'https://www.worldcat.org/issn/0004-5411',
88 => 'https://api.semanticscholar.org/CorpusID:10214857',
89 => 'https://doi.org/10.1023/A:1018947117526',
90 => 'https://doi.org/10.1023%2FA:1018947117526',
91 => 'https://www.worldcat.org/issn/1572-9338',
92 => 'https://api.semanticscholar.org/CorpusID:28963291',
93 => 'https://pubsonline.informs.org/doi/abs/10.1287/opre.42.2.287',
94 => 'https://doi.org/10.1287%2Fopre.42.2.287',
95 => 'https://www.worldcat.org/issn/0030-364X',
96 => 'https://pubsonline.informs.org/doi/abs/10.1287/mnsc.2018.3091',
97 => 'https://arxiv.org/abs/1705.09335',
98 => 'https://doi.org/10.1287%2Fmnsc.2018.3091',
99 => 'https://www.worldcat.org/issn/0025-1909',
100 => 'https://api.semanticscholar.org/CorpusID:159270392',
101 => 'http://www.sciencedirect.com/science/article/pii/S002001901400180X',
102 => 'https://doi.org/10.1016%2Fj.ipl.2014.09.005',
103 => 'https://www.worldcat.org/issn/0020-0190',
104 => 'http://www.sciencedirect.com/science/article/pii/S0304397506003483',
105 => 'https://doi.org/10.1016%2Fj.tcs.2006.06.001',
106 => 'https://www.worldcat.org/issn/0304-3975',
107 => 'https://arxiv.org/abs/1907.04505',
108 => 'https://arxiv.org/archive/cs.GT',
109 => 'https://doi.org/10.1007/s10898-012-9856-9',
110 => 'https://doi.org/10.1007%2Fs10898-012-9856-9',
111 => 'https://www.worldcat.org/issn/0925-5001',
112 => 'https://api.semanticscholar.org/CorpusID:3082040',
113 => 'https://www.researchgate.net/profile/Leon_Kanavathy/publication/228974015_Optimizing_Three-Dimensional_Bin_Packing_Through_Simulation/links/5890499d92851c9794c62fd0/Optimizing-Three-Dimensional-Bin-Packing-Through-Simulation.pdf',
114 => 'https://www.researchgate.net/profile/Attila_Benko2/publication/221608540_Bin_PackingCovering_with_Delivery_solved_with_the_evolution_of_algorithms/links/5570a36108aee701d61c2e05.pdf',
115 => 'http://or.dei.unibo.it/library/bpplib'
] |
Links in the page, before the edit (old_links ) | [
0 => 'http://www.or.deis.unibo.it/kp/Chapter8.pdf',
1 => 'http://drops.dagstuhl.de/opus/volltexte/2013/3963',
2 => 'http://www.aaai.org/Papers/AAAI/2002/AAAI02-110.pdf',
3 => 'https://www.researchgate.net/profile/Attila_Benko2/publication/221608540_Bin_PackingCovering_with_Delivery_solved_with_the_evolution_of_algorithms/links/5570a36108aee701d61c2e05.pdf',
4 => 'https://archive.org/details/knapsackproblems0000mart',
5 => 'https://archive.org/details/computersintract0000gare/page/',
6 => 'https://apps.dtic.mil/dtic/tr/fulltext/u2/a085315.pdf',
7 => 'https://dspace.mit.edu/bitstream/handle/1721.1/57819/17595570-MIT.pdf?sequence=2',
8 => 'https://ieeexplore.ieee.org/document/4568405/references#references',
9 => 'https://storage.googleapis.com/pub-tools-public-publication-data/pdf/37147.pdf',
10 => 'https://api.semanticscholar.org/CorpusID:7903339',
11 => 'https://api.semanticscholar.org/CorpusID:15441740',
12 => 'https://api.semanticscholar.org/CorpusID:14164016',
13 => 'https://api.semanticscholar.org/CorpusID:10519631',
14 => 'https://api.semanticscholar.org/CorpusID:18583908',
15 => 'http://orca.cf.ac.uk/11334/1/Lewis,_R_General_Purpose_Hill_Climbing.pdf',
16 => 'https://www.researchgate.net/profile/Leon_Kanavathy/publication/228974015_Optimizing_Three-Dimensional_Bin_Packing_Through_Simulation/links/5890499d92851c9794c62fd0/Optimizing-Three-Dimensional-Bin-Packing-Through-Simulation.pdf',
17 => 'https://api.semanticscholar.org/CorpusID:118263129',
18 => 'http://www.sciencedirect.com/science/article/pii/S002001901400180X',
19 => 'http://www.sciencedirect.com/science/article/pii/S0304397506003483',
20 => 'https://ieeexplore.ieee.org/document/6686137',
21 => 'https://api.semanticscholar.org/CorpusID:15905063',
22 => 'https://api.semanticscholar.org/CorpusID:1647463',
23 => 'https://web.archive.org/web/20190823231238/https://pdfs.semanticscholar.org/616d/77a41020941a89e782e877bf4cf7bb5ec9a4.pdf',
24 => 'https://books.google.com/books?id=UnYwgPltSjwC&q=Bin-Packing&pg=PA449',
25 => 'https://web.archive.org/web/20190216134619/https://people.cs.umass.edu/~barring/cs311/disc/11.html',
26 => 'https://people.cs.umass.edu/~barring/cs311/disc/11.html',
27 => 'https://www.coursera.org/learn/approximation-algorithms-part-1/home/week/3',
28 => 'https://epubs.siam.org/doi/abs/10.1137/0602019',
29 => 'https://www.sciencedirect.com/science/article/abs/pii/0167637786900131',
30 => 'https://www.sciencedirect.com/science/article/abs/pii/0167637788900600',
31 => 'https://doi.org/10.1007/s10898-012-9856-9',
32 => 'https://pubsonline.informs.org/doi/abs/10.1287/opre.42.2.287',
33 => 'https://api.semanticscholar.org/CorpusID:3082040',
34 => 'https://doi.org/10.1007/978-1-4419-7997-1_35',
35 => 'https://doi.org/10.1023/A:1018947117526',
36 => 'https://api.semanticscholar.org/CorpusID:10214857',
37 => 'https://api.semanticscholar.org/CorpusID:28963291',
38 => 'https://www.ijcai.org/Proceedings/13/Papers/103.pdf',
39 => 'https://pubsonline.informs.org/doi/abs/10.1287/mnsc.2018.3091',
40 => 'https://api.semanticscholar.org/CorpusID:159270392',
41 => 'https://web.archive.org/web/20210715093252/https://www.coursera.org/learn/approximation-algorithms-part-1/home/week/3',
42 => 'http://or.dei.unibo.it/library/bpplib',
43 => 'https://web.archive.org/web/20220317212050/https://apps.dtic.mil/dtic/tr/fulltext/u2/a085315.pdf',
44 => 'https://doi.org/10.1007%2F3-540-29297-7_18',
45 => 'https://doi.org/10.1007%2F978-1-4419-7997-1_35',
46 => 'https://doi.org/10.1016%2Fj.cor.2008.09.004',
47 => 'https://mathscinet.ams.org/mathscinet-getitem?mr=0519066',
48 => 'https://doi.org/10.4230%2FLIPIcs.STACS.2013.538',
49 => 'https://doi.org/10.1007%2F978-3-662-43948-7_36',
50 => 'https://doi.org/10.1145%2F322186.322187',
51 => 'https://doi.org/10.1145%2F3828.3833',
52 => 'https://doi.org/10.1016%2FS0020-0190(80)90077-0',
53 => 'https://doi.org/10.1016%2F0020-0190(92)90223-I',
54 => 'https://doi.org/10.1016%2Fj.tcs.2012.04.017',
55 => 'https://doi.org/10.1016%2F0196-6774(89)90031-X',
56 => 'https://hdl.handle.net/2142%2F74206',
57 => 'https://doi.org/10.1145%2F585265.585269',
58 => 'https://doi.org/10.1007%2F978-3-540-74450-4_1',
59 => 'https://doi.org/10.1137%2F0602019',
60 => 'https://www.worldcat.org/issn/0196-5212',
61 => 'https://doi.org/10.1016%2F0167-6377(86)90013-1',
62 => 'https://hdl.handle.net/1765%2F11645',
63 => 'https://www.worldcat.org/issn/0167-6377',
64 => 'https://doi.org/10.1016%2F0167-6377(88)90060-0',
65 => 'https://doi.org/10.1016%2F0885-064X(85)90022-6',
66 => 'https://doi.org/10.1007%2FBF02011198',
67 => 'https://doi.org/10.1007%2FBF02579456',
68 => 'https://www.worldcat.org/issn/1439-6912',
69 => 'https://arxiv.org/abs/1301.4010',
70 => 'https://doi.org/10.1109%2FFOCS.2013.11',
71 => 'https://doi.org/10.1137%2F1.9781611974782.172',
72 => 'https://doi.org/10.1109%2FSFCS.1982.61',
73 => 'https://doi.org/10.1145%2F321906.321917',
74 => 'https://www.worldcat.org/issn/0004-5411',
75 => 'https://doi.org/10.1023%2FA:1018947117526',
76 => 'https://www.worldcat.org/issn/1572-9338',
77 => 'https://doi.org/10.1287%2Fopre.42.2.287',
78 => 'https://www.worldcat.org/issn/0030-364X',
79 => 'https://arxiv.org/abs/1705.09335',
80 => 'https://doi.org/10.1287%2Fmnsc.2018.3091',
81 => 'https://www.worldcat.org/issn/0025-1909',
82 => 'https://doi.org/10.1016%2Fj.ipl.2014.09.005',
83 => 'https://www.worldcat.org/issn/0020-0190',
84 => 'https://doi.org/10.1016%2Fj.tcs.2006.06.001',
85 => 'https://www.worldcat.org/issn/0304-3975',
86 => 'https://arxiv.org/abs/1907.04505',
87 => 'https://doi.org/10.1007%2Fs10898-012-9856-9',
88 => 'https://www.worldcat.org/issn/0925-5001',
89 => 'https://www.sciencedirect.com/science/article/pii/S089812219800087X',
90 => 'https://doi.org/10.1016%2FS0898-1221(98)00087-X',
91 => 'https://www.worldcat.org/issn/0898-1221',
92 => 'https://doi.org/10.1016%2Fj.dam.2018.08.023',
93 => 'https://www.worldcat.org/issn/0166-218X',
94 => 'https://api.semanticscholar.org/CorpusID:125361557',
95 => 'https://link.springer.com/chapter/10.1007/11671411_26',
96 => 'https://doi.org/10.1007%2F11671411_26',
97 => 'https://www.sciencedirect.com/science/article/pii/S0305054820302306',
98 => 'https://doi.org/10.1016%2Fj.cor.2020.105113',
99 => 'https://www.worldcat.org/issn/0305-0548',
100 => 'https://api.semanticscholar.org/CorpusID:225002556',
101 => 'https://www.sciencedirect.com/science/article/pii/S0305054813003596',
102 => 'https://doi.org/10.1016%2Fj.cor.2013.12.008',
103 => 'https://www.sciencedirect.com/science/article/pii/S0377221718307963',
104 => 'https://doi.org/10.1016%2Fj.ejor.2018.09.020',
105 => 'https://www.worldcat.org/issn/0377-2217',
106 => 'https://api.semanticscholar.org/CorpusID:31722681',
107 => 'https://arxiv.org/archive/cs.GT',
108 => 'https://api.semanticscholar.org/CorpusID:1577334',
109 => 'https://api.semanticscholar.org/CorpusID:50663185',
110 => 'https://arxiv.org/abs/1503.08796',
111 => 'https://hdl.handle.net/11585%2F657029',
112 => 'https://doi.org/10.1016%2F0885-064X(87)90009-4',
113 => 'https://www.worldcat.org/issn/0885-064X',
114 => 'https://dx.doi.org/10.1016/0885-064X(87)90009-4',
115 => 'https://sha256.net/dhcpv6-pd-first-steps.html#orge8b6244'
] |
Parsed HTML source of the new revision (new_html ) | '<div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Mathematical and computational problem</div>
<style data-mw-deduplicate="TemplateStyles:r1033289096">.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}</style><div role="note" class="hatnote navigation-not-searchable">Not to be confused with <a href="/enwiki/wiki/Bin_picking" title="Bin picking">bin picking</a>.</div>
<style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r1228898189">.mw-parser-output .sidebar{width:22em;float:right;clear:right;margin:0.5em 0 1em 1em;background:var(--background-color-neutral-subtle,#f8f9fa);border:1px solid #aaa;padding:0.2em;text-align:center;line-height:1.4em;font-size:88%;border-collapse:collapse;display:table}body.skin-minerva .mw-parser-output .sidebar{display:table!important;float:right!important;margin:0.5em 0 1em 1em!important}.mw-parser-output .sidebar-subgroup{width:100%;margin:0;border-spacing:0}.mw-parser-output .sidebar-left{float:left;clear:left;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-none{float:none;clear:both;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-outer-title{padding:0 0.4em 0.2em;font-size:125%;line-height:1.2em;font-weight:bold}.mw-parser-output .sidebar-top-image{padding:0.4em}.mw-parser-output .sidebar-top-caption,.mw-parser-output .sidebar-pretitle-with-top-image,.mw-parser-output .sidebar-caption{padding:0.2em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-pretitle{padding:0.4em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-title,.mw-parser-output .sidebar-title-with-pretitle{padding:0.2em 0.8em;font-size:145%;line-height:1.2em}.mw-parser-output .sidebar-title-with-pretitle{padding:0.1em 0.4em}.mw-parser-output .sidebar-image{padding:0.2em 0.4em 0.4em}.mw-parser-output .sidebar-heading{padding:0.1em 0.4em}.mw-parser-output .sidebar-content{padding:0 0.5em 0.4em}.mw-parser-output .sidebar-content-with-subgroup{padding:0.1em 0.4em 0.2em}.mw-parser-output .sidebar-above,.mw-parser-output .sidebar-below{padding:0.3em 0.8em;font-weight:bold}.mw-parser-output .sidebar-collapse .sidebar-above,.mw-parser-output .sidebar-collapse .sidebar-below{border-top:1px solid #aaa;border-bottom:1px solid #aaa}.mw-parser-output .sidebar-navbar{text-align:right;font-size:115%;padding:0 0.4em 0.4em}.mw-parser-output .sidebar-list-title{padding:0 0.4em;text-align:left;font-weight:bold;line-height:1.6em;font-size:105%}.mw-parser-output .sidebar-list-title-c{padding:0 0.4em;text-align:center;margin:0 3.3em}@media(max-width:720px){body.mediawiki .mw-parser-output .sidebar{width:100%!important;clear:both;float:none!important;margin-left:0!important;margin-right:0!important}}body.skin--responsive .mw-parser-output .sidebar a>img{max-width:none!important}html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}}</style><table class="sidebar nomobile nowraplinks"><tbody><tr><th class="sidebar-title" style="font-size:130%;"><a href="/enwiki/wiki/Linear_programming#Covering/packing_dualities" title="Linear programming">Covering/packing-problem pairs</a></th></tr><tr><td class="sidebar-content">
<table style="width:100%;border-collapse:collapse;border-spacing:0px 0px;border:none;display:block;margin-top:0.4em;"><tbody><tr style="vertical-align:top"><td style="font-weight:bold;background:#ddf;text-align:center;border:1px #fafafa solid;"> <a href="/enwiki/wiki/Covering_problems" title="Covering problems">Covering problems</a></td><td style="font-weight:bold;background:#ddf;text-align:center;border:1px #fafafa solid;"> <a href="/enwiki/wiki/Packing_problems" title="Packing problems">Packing problems</a></td></tr><tr style="vertical-align:top"><td style="padding-top:0.15em;"> <a href="/enwiki/wiki/Set_cover_problem" title="Set cover problem">Minimum set cover</a></td><td style="padding-top:0.15em;"> <a href="/enwiki/wiki/Set_packing" title="Set packing">Maximum set packing</a></td></tr><tr style="vertical-align:top"><td> <a href="/enwiki/wiki/Edge_cover" title="Edge cover">Minimum edge cover</a></td><td> <a href="/enwiki/wiki/Matching_(graph_theory)" title="Matching (graph theory)">Maximum matching</a></td></tr><tr style="vertical-align:top"><td> <a href="/enwiki/wiki/Vertex_cover" title="Vertex cover">Minimum vertex cover</a></td><td> <a href="/enwiki/wiki/Independent_set_(graph_theory)" title="Independent set (graph theory)">Maximum independent set</a></td></tr><tr style="vertical-align:top"><td> <a href="/enwiki/wiki/Bin_covering_problem" title="Bin covering problem">Bin covering</a></td><td> <a class="mw-selflink selflink">Bin packing</a></td></tr><tr style="vertical-align:top"><td> <a href="/enwiki/wiki/Polygon_covering" title="Polygon covering">Polygon covering</a></td><td> <a href="/enwiki/wiki/Rectangle_packing" title="Rectangle packing">Rectangle packing</a></td></tr></tbody></table></td>
</tr><tr><td class="sidebar-navbar"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1063604349">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}</style><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/enwiki/wiki/Template:Covering/packing-problem_pairs" title="Template:Covering/packing-problem pairs"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/enwiki/wiki/Template_talk:Covering/packing-problem_pairs" title="Template talk:Covering/packing-problem pairs"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/enwiki/wiki/Special:EditPage/Template:Covering/packing-problem_pairs" title="Special:EditPage/Template:Covering/packing-problem pairs"><abbr title="Edit this template">e</abbr></a></li></ul></div></td></tr></tbody></table>
<p>The <b>bin packing problem<sup id="cite_ref-1" class="reference"><a href="#cite_note-1">[1]</a></sup><sup id="cite_ref-2" class="reference"><a href="#cite_note-2">[2]</a></sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3">[3]</a></sup><sup id="cite_ref-:0_4-0" class="reference"><a href="#cite_note-:0-4">[4]</a></sup></b> is an <a href="/enwiki/wiki/Optimization_problem" title="Optimization problem">optimization problem</a>, in which items of different sizes must be packed into a finite number of bins or containers, each of a fixed given capacity, in a way that minimizes the number of bins used. The problem has many applications, such as filling up containers, loading trucks with weight capacity constraints, creating file <a href="/enwiki/wiki/Backup" title="Backup">backups</a> in media, splitting a network prefix into multiple subnets,<sup id="cite_ref-5" class="reference"><a href="#cite_note-5">[5]</a></sup> and technology mapping in <a href="/enwiki/wiki/Field-programmable_gate_array" title="Field-programmable gate array">FPGA</a> <a href="/enwiki/wiki/Semiconductor_chip" class="mw-redirect" title="Semiconductor chip">semiconductor chip</a> design.
</p><p>Computationally,Gal Ben Ami is stupid he needs haircut the problem is <a href="/enwiki/wiki/NP-hard" class="mw-redirect" title="NP-hard">NP-hard</a>, and the corresponding <a href="/enwiki/wiki/Decision_problem" title="Decision problem">decision problem</a>, deciding if items can fit into a specified number of bins, is <a href="/enwiki/wiki/NP-complete" class="mw-redirect" title="NP-complete">NP-complete</a>. Despite its worst-case hardness, optimal solutions to very large instances of the problem can be produced with sophisticated algorithms. In addition, many <a href="/enwiki/wiki/Approximation_algorithms" class="mw-redirect" title="Approximation algorithms">approximation algorithms</a> exist. For example, the <a href="/enwiki/wiki/First-fit_bin_packing" title="First-fit bin packing">first fit</a> algorithm provides a fast but often non-optimal solution, involving placing each item into the first bin in which it will fit. It requires <i><a href="/enwiki/wiki/Big_O_notation" title="Big O notation">Θ</a></i>(<i>n</i> log <i>n</i>) time, where <i>n</i> is the number of items to be packed. The algorithm can be made much more effective by first <a href="/enwiki/wiki/Sorting" title="Sorting">sorting</a> the list of items into decreasing order (sometimes known as the first-fit decreasing algorithm), although this still does not guarantee an optimal solution and for longer lists may increase the running time of the algorithm. It is known, however, that there always exists at least one ordering of items that allows first-fit to produce an optimal solution.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6">[6]</a></sup>
</p><p>There are many <a href="/enwiki/wiki/Packing_problem" class="mw-redirect" title="Packing problem">variations</a> of this problem, such as 2D packing, linear packing, packing by weight, packing by cost, and so on. The bin packing problem can also be seen as a special case of the <a href="/enwiki/wiki/Cutting_stock_problem" title="Cutting stock problem">cutting stock problem</a>. When the number of bins is restricted to 1 and each item is characterized by both a volume and a value, the problem of maximizing the value of items that can fit in the bin is known as the <a href="/enwiki/wiki/Knapsack_problem" title="Knapsack problem">knapsack problem</a>.
</p><p>A variant of bin packing that occurs in practice is when items can share space when packed into a bin. Specifically, a set of items could occupy less space when packed together than the sum of their individual sizes. This variant is known as VM packing<sup id="cite_ref-7" class="reference"><a href="#cite_note-7">[7]</a></sup> since when <a href="/enwiki/wiki/Virtual_machines" class="mw-redirect" title="Virtual machines">virtual machines</a> (VMs) are packed in a server, their total <a href="/enwiki/wiki/Memory_management" title="Memory management">memory requirement</a> could decrease due to <a href="/enwiki/wiki/Page_(computer_memory)" title="Page (computer memory)">pages</a> shared by the VMs that need only be stored once. If items can share space in arbitrary ways, the bin packing problem is hard to even approximate. However, if space sharing fits into a hierarchy, as is the case with memory sharing in virtual machines, the bin packing problem can be efficiently approximated.
</p><p>Another variant of bin packing of interest in practice is the so-called <a href="/enwiki/wiki/Online_algorithm" title="Online algorithm">online</a> bin packing. Here the items of different volume are supposed to arrive sequentially, and the decision maker has to decide whether to select and pack the currently observed item, or else to let it pass. Each decision is without recall. In contrast, offline bin packing allows rearranging the items in the hope of achieving a better packing once additional items arrive. This of course requires additional storage for holding the items to be rearranged.
</p>
<div id="toc" class="toc" role="navigation" aria-labelledby="mw-toc-heading"><input type="checkbox" role="button" id="toctogglecheckbox" class="toctogglecheckbox" style="display:none" /><div class="toctitle" lang="en" dir="ltr"><h2 id="mw-toc-heading">Contents</h2><span class="toctogglespan"><label class="toctogglelabel" for="toctogglecheckbox"></label></span></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Formal_statement"><span class="tocnumber">1</span> <span class="toctext">Formal statement</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#Hardness_of_bin_packing"><span class="tocnumber">2</span> <span class="toctext">Hardness of bin packing</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#Approximation_algorithms_for_bin_packing"><span class="tocnumber">3</span> <span class="toctext">Approximation algorithms for bin packing</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="#Online_heuristics"><span class="tocnumber">4</span> <span class="toctext">Online heuristics</span></a>
<ul>
<li class="toclevel-2 tocsection-5"><a href="#Single-class_algorithms"><span class="tocnumber">4.1</span> <span class="toctext">Single-class algorithms</span></a></li>
<li class="toclevel-2 tocsection-6"><a href="#Refined_algorithms"><span class="tocnumber">4.2</span> <span class="toctext">Refined algorithms</span></a></li>
<li class="toclevel-2 tocsection-7"><a href="#General_lower_bounds_for_online_algorithms"><span class="tocnumber">4.3</span> <span class="toctext">General lower bounds for online algorithms</span></a></li>
<li class="toclevel-2 tocsection-8"><a href="#Comparison_table"><span class="tocnumber">4.4</span> <span class="toctext">Comparison table</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-9"><a href="#Offline_algorithms"><span class="tocnumber">5</span> <span class="toctext">Offline algorithms</span></a>
<ul>
<li class="toclevel-2 tocsection-10"><a href="#Multiplicative_approximation"><span class="tocnumber">5.1</span> <span class="toctext">Multiplicative approximation</span></a></li>
<li class="toclevel-2 tocsection-11"><a href="#Additive_approximation"><span class="tocnumber">5.2</span> <span class="toctext">Additive approximation</span></a></li>
<li class="toclevel-2 tocsection-12"><a href="#Comparison_table_2"><span class="tocnumber">5.3</span> <span class="toctext">Comparison table</span></a></li>
<li class="toclevel-2 tocsection-13"><a href="#Exact_algorithms"><span class="tocnumber">5.4</span> <span class="toctext">Exact algorithms</span></a></li>
<li class="toclevel-2 tocsection-14"><a href="#Small_number_of_different_sizes"><span class="tocnumber">5.5</span> <span class="toctext">Small number of different sizes</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-15"><a href="#Bin-packing_with_fragmentation"><span class="tocnumber">6</span> <span class="toctext">Bin-packing with fragmentation</span></a>
<ul>
<li class="toclevel-2 tocsection-16"><a href="#Variants"><span class="tocnumber">6.1</span> <span class="toctext">Variants</span></a></li>
<li class="toclevel-2 tocsection-17"><a href="#Computational_complexity"><span class="tocnumber">6.2</span> <span class="toctext">Computational complexity</span></a></li>
<li class="toclevel-2 tocsection-18"><a href="#Related_problems"><span class="tocnumber">6.3</span> <span class="toctext">Related problems</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-19"><a href="#Performance_with_divisible_item_sizes"><span class="tocnumber">7</span> <span class="toctext">Performance with divisible item sizes</span></a></li>
<li class="toclevel-1 tocsection-20"><a href="#Cardinality_constraints_on_the_bins"><span class="tocnumber">8</span> <span class="toctext">Cardinality constraints on the bins</span></a></li>
<li class="toclevel-1 tocsection-21"><a href="#Non-additive_functions"><span class="tocnumber">9</span> <span class="toctext">Non-additive functions</span></a></li>
<li class="toclevel-1 tocsection-22"><a href="#Related_problems_2"><span class="tocnumber">10</span> <span class="toctext">Related problems</span></a></li>
<li class="toclevel-1 tocsection-23"><a href="#Resources"><span class="tocnumber">11</span> <span class="toctext">Resources</span></a></li>
<li class="toclevel-1 tocsection-24"><a href="#References"><span class="tocnumber">12</span> <span class="toctext">References</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="Formal_statement">Formal statement</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=1" title="Edit section: Formal statement"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2>
<p>In <i><a href="/enwiki/wiki/Computers_and_Intractability" title="Computers and Intractability">Computers and Intractability</a></i><sup id="cite_ref-GareyJohnson2_8-0" class="reference"><a href="#cite_note-GareyJohnson2-8">[8]</a></sup><sup class="reference nowrap"><span title="Page / location: 226">: 226 </span></sup> Garey and Johnson list the bin packing problem under the reference [SR1]. They define its decision variant as follows.
</p><p>Instance: Finite set <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle I}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>I</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle I}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/535ea7fc4134a31cbe2251d9d3511374bc41be9f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.172ex; height:2.176ex;" alt="{\displaystyle I}"></span> of items, a size <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle s(i)\in \mathbb {Z} ^{+}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>s</mi>
<mo stretchy="false">(</mo>
<mi>i</mi>
<mo stretchy="false">)</mo>
<mo>∈<!-- ∈ --></mo>
<msup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="double-struck">Z</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mo>+</mo>
</mrow>
</msup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle s(i)\in \mathbb {Z} ^{+}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/3aa77286f9a6b2c0637c92e98c322dd17a9c44eb" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:9.604ex; height:3.009ex;" alt="{\displaystyle s(i)\in \mathbb {Z} ^{+}}"></span> for each <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle i\in I}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>i</mi>
<mo>∈<!-- ∈ --></mo>
<mi>I</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle i\in I}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2d740fe587228ce31b71c9628e089d1a9b37c6be" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:4.815ex; height:2.176ex;" alt="{\displaystyle i\in I}"></span>, a positive integer bin capacity <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle B}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>B</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle B}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/47136aad860d145f75f3eed3022df827cee94d7a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.764ex; height:2.176ex;" alt="{\displaystyle B}"></span>, and a positive integer <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle K}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>K</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle K}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2b76fce82a62ed5461908f0dc8f037de4e3686b0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.066ex; height:2.176ex;" alt="{\displaystyle K}"></span>.
</p><p>Question: Is there a partition of <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle I}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>I</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle I}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/535ea7fc4134a31cbe2251d9d3511374bc41be9f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.172ex; height:2.176ex;" alt="{\displaystyle I}"></span> into <a href="/enwiki/wiki/Disjoint_sets" title="Disjoint sets">disjoint sets</a> <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle I_{1},\dots ,I_{K}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>I</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
<mo>,</mo>
<mo>…<!-- … --></mo>
<mo>,</mo>
<msub>
<mi>I</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>K</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle I_{1},\dots ,I_{K}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/84065f8f2bb6f8ddb2b605d566a6f372dd7c3fb5" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:9.972ex; height:2.509ex;" alt="{\displaystyle I_{1},\dots ,I_{K}}"></span> such that the sum of the sizes of the items in each <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle I_{j}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>I</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle I_{j}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/b7cb04680c2246f78082e43ec912f72afe7af266" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:1.933ex; height:2.843ex;" alt="{\displaystyle I_{j}}"></span> is <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle B}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>B</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle B}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/47136aad860d145f75f3eed3022df827cee94d7a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.764ex; height:2.176ex;" alt="{\displaystyle B}"></span> or less?
</p><p>Note that in the literature often an equivalent notation is used, where <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle B=1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>B</mi>
<mo>=</mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle B=1}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/3f9cd3a9b87af7f457ce808ce2020f4af99d543d" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:6.025ex; height:2.176ex;" alt="{\displaystyle B=1}"></span> and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle s(i)\in \mathbb {Q} \cap (0,1]}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>s</mi>
<mo stretchy="false">(</mo>
<mi>i</mi>
<mo stretchy="false">)</mo>
<mo>∈<!-- ∈ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="double-struck">Q</mi>
</mrow>
<mo>∩<!-- ∩ --></mo>
<mo stretchy="false">(</mo>
<mn>0</mn>
<mo>,</mo>
<mn>1</mn>
<mo stretchy="false">]</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle s(i)\in \mathbb {Q} \cap (0,1]}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/dac194c6467e255b1ac9ff64527b803086883ae1" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:15.844ex; height:2.843ex;" alt="{\displaystyle s(i)\in \mathbb {Q} \cap (0,1]}"></span> for each <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle i\in I}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>i</mi>
<mo>∈<!-- ∈ --></mo>
<mi>I</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle i\in I}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2d740fe587228ce31b71c9628e089d1a9b37c6be" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:4.815ex; height:2.176ex;" alt="{\displaystyle i\in I}"></span>. Furthermore, research is mostly interested in the optimization variant, which asks for the smallest possible value of <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle K}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>K</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle K}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2b76fce82a62ed5461908f0dc8f037de4e3686b0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.066ex; height:2.176ex;" alt="{\displaystyle K}"></span>. A solution is <i>optimal</i> if it has minimal <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle K}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>K</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle K}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2b76fce82a62ed5461908f0dc8f037de4e3686b0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.066ex; height:2.176ex;" alt="{\displaystyle K}"></span>. The <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle K}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>K</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle K}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2b76fce82a62ed5461908f0dc8f037de4e3686b0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.066ex; height:2.176ex;" alt="{\displaystyle K}"></span>-value for an optimal solution for a set of items <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle I}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>I</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle I}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/535ea7fc4134a31cbe2251d9d3511374bc41be9f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.172ex; height:2.176ex;" alt="{\displaystyle I}"></span> is denoted by <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {OPT} (I)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {OPT} (I)}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/52fcf7209ba799e761c11bc55891c7ae5a1d7f1d" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.05ex; height:2.843ex;" alt="{\displaystyle \mathrm {OPT} (I)}"></span> or just <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {OPT} }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {OPT} }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/d2205aed370bd5bfa869eb2cf5f2381075a7f36c" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:5.069ex; height:2.176ex;" alt="{\displaystyle \mathrm {OPT} }"></span> if the set of items is clear from the context.
</p><p>A possible <a href="/enwiki/wiki/Integer_programming" title="Integer programming">integer linear programming</a> formulation of the problem is:
</p>
<table>
<tbody><tr>
<td colspan="2">minimize <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle K=\sum _{j=1}^{n}y_{j}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>K</mi>
<mo>=</mo>
<munderover>
<mo>∑<!-- ∑ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>n</mi>
</mrow>
</munderover>
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle K=\sum _{j=1}^{n}y_{j}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/509fe5fee10817b50eec97f056dbde4fe2206c3c" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -3.338ex; width:10.955ex; height:7.176ex;" alt="{\displaystyle K=\sum _{j=1}^{n}y_{j}}"></span>
</td>
<td>
</td></tr>
<tr>
<td>subject to
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle K\geq 1,}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>K</mi>
<mo>≥<!-- ≥ --></mo>
<mn>1</mn>
<mo>,</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle K\geq 1,}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/992965c50db3fc9bac238d85379ed346ee30928f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:6.974ex; height:2.509ex;" alt="{\displaystyle K\geq 1,}"></span>
</td></tr>
<tr>
<td>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \sum _{i\in I}s(i)x_{ij}\leq By_{j},}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<munder>
<mo>∑<!-- ∑ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
<mo>∈<!-- ∈ --></mo>
<mi>I</mi>
</mrow>
</munder>
<mi>s</mi>
<mo stretchy="false">(</mo>
<mi>i</mi>
<mo stretchy="false">)</mo>
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
<mi>j</mi>
</mrow>
</msub>
<mo>≤<!-- ≤ --></mo>
<mi>B</mi>
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
<mo>,</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \sum _{i\in I}s(i)x_{ij}\leq By_{j},}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/194666228a83390b2e4799245ae6dc794ea4c1a3" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -3.171ex; width:17.809ex; height:5.676ex;" alt="{\displaystyle \sum _{i\in I}s(i)x_{ij}\leq By_{j},}"></span>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \forall j\in \{1,\ldots ,n\}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi mathvariant="normal">∀<!-- ∀ --></mi>
<mi>j</mi>
<mo>∈<!-- ∈ --></mo>
<mo fence="false" stretchy="false">{</mo>
<mn>1</mn>
<mo>,</mo>
<mo>…<!-- … --></mo>
<mo>,</mo>
<mi>n</mi>
<mo fence="false" stretchy="false">}</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \forall j\in \{1,\ldots ,n\}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/e9de92a5b218126bc64f37b96242d61976ee48a6" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:15.152ex; height:2.843ex;" alt="{\displaystyle \forall j\in \{1,\ldots ,n\}}"></span>
</td></tr>
<tr>
<td>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \sum _{j=1}^{n}x_{ij}=1,}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<munderover>
<mo>∑<!-- ∑ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>n</mi>
</mrow>
</munderover>
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
<mi>j</mi>
</mrow>
</msub>
<mo>=</mo>
<mn>1</mn>
<mo>,</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \sum _{j=1}^{n}x_{ij}=1,}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/8815370fd15c5c66a65262ee4d1005831686e651" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -3.338ex; width:11.457ex; height:7.176ex;" alt="{\displaystyle \sum _{j=1}^{n}x_{ij}=1,}"></span>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \forall i\in I}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi mathvariant="normal">∀<!-- ∀ --></mi>
<mi>i</mi>
<mo>∈<!-- ∈ --></mo>
<mi>I</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \forall i\in I}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/b84ad17f288861a28e817f3cb7ac052600f9a3e0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:6.107ex; height:2.176ex;" alt="{\displaystyle \forall i\in I}"></span>
</td></tr>
<tr>
<td>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle y_{j}\in \{0,1\},}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
<mo>∈<!-- ∈ --></mo>
<mo fence="false" stretchy="false">{</mo>
<mn>0</mn>
<mo>,</mo>
<mn>1</mn>
<mo fence="false" stretchy="false">}</mo>
<mo>,</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle y_{j}\in \{0,1\},}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/7b795ff7704c02efcbb02a28813607db31a1a1b0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:11.22ex; height:3.009ex;" alt="{\displaystyle y_{j}\in \{0,1\},}"></span>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \forall j\in \{1,\ldots ,n\}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi mathvariant="normal">∀<!-- ∀ --></mi>
<mi>j</mi>
<mo>∈<!-- ∈ --></mo>
<mo fence="false" stretchy="false">{</mo>
<mn>1</mn>
<mo>,</mo>
<mo>…<!-- … --></mo>
<mo>,</mo>
<mi>n</mi>
<mo fence="false" stretchy="false">}</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \forall j\in \{1,\ldots ,n\}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/e9de92a5b218126bc64f37b96242d61976ee48a6" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:15.152ex; height:2.843ex;" alt="{\displaystyle \forall j\in \{1,\ldots ,n\}}"></span>
</td></tr>
<tr>
<td>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x_{ij}\in \{0,1\},}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
<mi>j</mi>
</mrow>
</msub>
<mo>∈<!-- ∈ --></mo>
<mo fence="false" stretchy="false">{</mo>
<mn>0</mn>
<mo>,</mo>
<mn>1</mn>
<mo fence="false" stretchy="false">}</mo>
<mo>,</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle x_{ij}\in \{0,1\},}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/67be0d03fbded6bfe0175d15ead03681d5287e35" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:11.978ex; height:3.009ex;" alt="{\displaystyle x_{ij}\in \{0,1\},}"></span>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \forall i\in I\,\forall j\in \{1,\ldots ,n\}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi mathvariant="normal">∀<!-- ∀ --></mi>
<mi>i</mi>
<mo>∈<!-- ∈ --></mo>
<mi>I</mi>
<mspace width="thinmathspace" />
<mi mathvariant="normal">∀<!-- ∀ --></mi>
<mi>j</mi>
<mo>∈<!-- ∈ --></mo>
<mo fence="false" stretchy="false">{</mo>
<mn>1</mn>
<mo>,</mo>
<mo>…<!-- … --></mo>
<mo>,</mo>
<mi>n</mi>
<mo fence="false" stretchy="false">}</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \forall i\in I\,\forall j\in \{1,\ldots ,n\}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/b319e043b1db23f0b70d3bcda63f2a3579fb9ac9" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:21.646ex; height:2.843ex;" alt="{\displaystyle \forall i\in I\,\forall j\in \{1,\ldots ,n\}}"></span>
</td></tr></tbody></table>
<p>where <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle y_{j}=1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>y</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
<mo>=</mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle y_{j}=1}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/682c6cc5114b5e10c8a5b8025d73442599e0d7d5" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:6.31ex; height:2.843ex;" alt="{\displaystyle y_{j}=1}"></span> if bin <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle j}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>j</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle j}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2f461e54f5c093e92a55547b9764291390f0b5d0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; margin-left: -0.027ex; width:0.985ex; height:2.509ex;" alt="{\displaystyle j}"></span> is used and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x_{ij}=1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
<mi>j</mi>
</mrow>
</msub>
<mo>=</mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle x_{ij}=1}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/6981a579ea6c367da65acffecbe8445fe70ccba0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:7.068ex; height:2.843ex;" alt="{\displaystyle x_{ij}=1}"></span> if item <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle i}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>i</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle i}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/add78d8608ad86e54951b8c8bd6c8d8416533d20" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:0.802ex; height:2.176ex;" alt="{\displaystyle i}"></span> is put into bin <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle j}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>j</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle j}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2f461e54f5c093e92a55547b9764291390f0b5d0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; margin-left: -0.027ex; width:0.985ex; height:2.509ex;" alt="{\displaystyle j}"></span>.<sup id="cite_ref-Martello19902_9-0" class="reference"><a href="#cite_note-Martello19902-9">[9]</a></sup>
</p>
<h2><span class="mw-headline" id="Hardness_of_bin_packing">Hardness of bin packing</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=2" title="Edit section: Hardness of bin packing"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2>
<p>The bin packing problem is <a href="/enwiki/wiki/Strong_NP-completeness" title="Strong NP-completeness">strongly NP-complete</a>. This can be proven by reducing the strongly NP-complete <a href="/enwiki/wiki/3-partition_problem" title="3-partition problem">3-partition problem</a> to bin packing.<sup id="cite_ref-GareyJohnson2_8-1" class="reference"><a href="#cite_note-GareyJohnson2-8">[8]</a></sup>
</p><p>Furthermore, there can be no <a href="/enwiki/wiki/Approximation_algorithm" title="Approximation algorithm">approximation algorithm</a> with absolute approximation ratio smaller than <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\tfrac {3}{2}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mfrac>
<mn>3</mn>
<mn>2</mn>
</mfrac>
</mstyle>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\tfrac {3}{2}}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/631d66184353d37ebfe470a07a6a61487da227ac" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.171ex; width:1.658ex; height:3.509ex;" alt="{\displaystyle {\tfrac {3}{2}}}"></span> unless <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathsf {P}}={\mathsf {NP}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="sans-serif">P</mi>
</mrow>
</mrow>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="sans-serif">N</mi>
<mi mathvariant="sans-serif">P</mi>
</mrow>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathsf {P}}={\mathsf {NP}}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/67ed93d37c88308e4becd3c3576b7ea5395c0418" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:7.715ex; height:2.176ex;" alt="{\displaystyle {\mathsf {P}}={\mathsf {NP}}}"></span>. This can be proven by a reduction from the <a href="/enwiki/wiki/Partition_problem" title="Partition problem">partition problem</a>:<sup id="cite_ref-10" class="reference"><a href="#cite_note-10">[10]</a></sup> given an instance of Partition where the sum of all input numbers is <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 2T}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mn>2</mn>
<mi>T</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle 2T}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/dfa35bfda1f2223910d2d59ec206845be843bcf0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.799ex; height:2.176ex;" alt="{\displaystyle 2T}"></span>, construct an instance of bin-packing in which the bin size is <span class="texhtml mvar" style="font-style:italic;">T</span>. If there exists an equal partition of the inputs, then the optimal packing needs 2 bins; therefore, every algorithm with an approximation ratio smaller than <style data-mw-deduplicate="TemplateStyles:r1214402035">.mw-parser-output .sfrac{white-space:nowrap}.mw-parser-output .sfrac.tion,.mw-parser-output .sfrac .tion{display:inline-block;vertical-align:-0.5em;font-size:85%;text-align:center}.mw-parser-output .sfrac .num{display:block;line-height:1em;margin:0.0em 0.1em;border-bottom:1px solid}.mw-parser-output .sfrac .den{display:block;line-height:1em;margin:0.1em 0.1em}.mw-parser-output .sr-only{border:0;clip:rect(0,0,0,0);clip-path:polygon(0px 0px,0px 0px,0px 0px);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}</style><span class="sfrac"><span class="tion"><span class="num">3</span><span class="sr-only">/</span><span class="den">2</span></span></span> must return less than 3 bins, which must be 2 bins. In contrast, if there is no equal partition of the inputs, then the optimal packing needs at least 3 bins.
</p><p>On the other hand, bin packing is solvable in <a href="/enwiki/wiki/Pseudo-polynomial_time" title="Pseudo-polynomial time">pseudo-polynomial time</a> for any fixed number of bins <span class="texhtml mvar" style="font-style:italic;">K</span>, and solvable in polynomial time for any fixed bin capacity <span class="texhtml mvar" style="font-style:italic;">B</span>.<sup id="cite_ref-GareyJohnson2_8-2" class="reference"><a href="#cite_note-GareyJohnson2-8">[8]</a></sup>
</p>
<h2><span class="mw-headline" id="Approximation_algorithms_for_bin_packing">Approximation algorithms for bin packing</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=3" title="Edit section: Approximation algorithms for bin packing"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2>
<p>To measure the performance of an approximation algorithm there are two approximation ratios considered in the literature. For a given list of items <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle L}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>L</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle L}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/103168b86f781fe6e9a4a87b8ea1cebe0ad4ede8" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.583ex; height:2.176ex;" alt="{\displaystyle L}"></span> the number <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle A(L)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>A</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle A(L)}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/dab8e9f74919985a506a7342b6fe24232e04e13a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:5.135ex; height:2.843ex;" alt="{\displaystyle A(L)}"></span> denotes the number of bins used when algorithm <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle A}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>A</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle A}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/7daff47fa58cdfd29dc333def748ff5fa4c923e3" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.743ex; height:2.176ex;" alt="{\displaystyle A}"></span> is applied to list <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle L}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>L</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle L}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/103168b86f781fe6e9a4a87b8ea1cebe0ad4ede8" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.583ex; height:2.176ex;" alt="{\displaystyle L}"></span>, while <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {OPT} (L)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {OPT} (L)}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/579ae79a7d55de5e1095626c18c07d87cd63e3a5" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.461ex; height:2.843ex;" alt="{\displaystyle \mathrm {OPT} (L)}"></span> denotes the optimum number for this list. The absolute worst-case performance ratio <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{A}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{A}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/0b096f1c60d7fdc543f3bc583fe32601f1c2f0cf" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:3.229ex; height:2.509ex;" alt="{\displaystyle R_{A}}"></span> for an algorithm <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle A}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>A</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle A}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/7daff47fa58cdfd29dc333def748ff5fa4c923e3" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.743ex; height:2.176ex;" alt="{\displaystyle A}"></span> is defined as
</p>
<dl><dd><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{A}\equiv \inf\{r\geq 1:A(L)/\mathrm {OPT} (L)\leq r{\text{ for all lists }}L\}.}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
</msub>
<mo>≡<!-- ≡ --></mo>
<mo movablelimits="true" form="prefix">inf</mo>
<mo fence="false" stretchy="false">{</mo>
<mi>r</mi>
<mo>≥<!-- ≥ --></mo>
<mn>1</mn>
<mo>:</mo>
<mi>A</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mi>r</mi>
<mrow class="MJX-TeXAtom-ORD">
<mtext> for all lists </mtext>
</mrow>
<mi>L</mi>
<mo fence="false" stretchy="false">}</mo>
<mo>.</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{A}\equiv \inf\{r\geq 1:A(L)/\mathrm {OPT} (L)\leq r{\text{ for all lists }}L\}.}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/f5642fa2fef3a43c5c51c060efe44cb79b92de8a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:51.281ex; height:2.843ex;" alt="{\displaystyle R_{A}\equiv \inf\{r\geq 1:A(L)/\mathrm {OPT} (L)\leq r{\text{ for all lists }}L\}.}"></span></dd></dl>
<p>On the other hand, the asymptotic worst-case ratio <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{A}^{\infty }}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{A}^{\infty }}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/b90ef343c32c5c68c9e078d0402864306f40be14" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:3.639ex; height:2.843ex;" alt="{\displaystyle R_{A}^{\infty }}"></span> is defined as
</p>
<dl><dd><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{A}^{\infty }\equiv \inf\{r\geq 1:\exists N>0,A(L)/\mathrm {OPT} (L)\leq r{\text{ for all lists }}L{\text{ with }}\mathrm {OPT} (L)\geq N\}.}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≡<!-- ≡ --></mo>
<mo movablelimits="true" form="prefix">inf</mo>
<mo fence="false" stretchy="false">{</mo>
<mi>r</mi>
<mo>≥<!-- ≥ --></mo>
<mn>1</mn>
<mo>:</mo>
<mi mathvariant="normal">∃<!-- ∃ --></mi>
<mi>N</mi>
<mo>></mo>
<mn>0</mn>
<mo>,</mo>
<mi>A</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mi>r</mi>
<mrow class="MJX-TeXAtom-ORD">
<mtext> for all lists </mtext>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mtext> with </mtext>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≥<!-- ≥ --></mo>
<mi>N</mi>
<mo fence="false" stretchy="false">}</mo>
<mo>.</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{A}^{\infty }\equiv \inf\{r\geq 1:\exists N>0,A(L)/\mathrm {OPT} (L)\leq r{\text{ for all lists }}L{\text{ with }}\mathrm {OPT} (L)\geq N\}.}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/e3ee61d3cbdfdee4396999f8451035cba5dd31a7" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:79.65ex; height:3.009ex;" alt="{\displaystyle R_{A}^{\infty }\equiv \inf\{r\geq 1:\exists N>0,A(L)/\mathrm {OPT} (L)\leq r{\text{ for all lists }}L{\text{ with }}\mathrm {OPT} (L)\geq N\}.}"></span></dd></dl>
<p>Equivalently, <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{A}^{\infty }}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{A}^{\infty }}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/b90ef343c32c5c68c9e078d0402864306f40be14" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:3.639ex; height:2.843ex;" alt="{\displaystyle R_{A}^{\infty }}"></span> is the smallest number such that there exists some constant <i>K,</i> such that for all lists <i>L:</i><b><sup id="cite_ref-:0_4-1" class="reference"><a href="#cite_note-:0-4">[4]</a></sup></b>
</p>
<dl><dd><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle A(L)\leq R_{A}^{\infty }\cdot \mathrm {OPT} (L)+K}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>A</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>⋅<!-- ⋅ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>K</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle A(L)\leq R_{A}^{\infty }\cdot \mathrm {OPT} (L)+K}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/242244043396e746db90fb275f9ae13edc640b5e" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:26.92ex; height:3.009ex;" alt="{\displaystyle A(L)\leq R_{A}^{\infty }\cdot \mathrm {OPT} (L)+K}"></span>.</dd></dl>
<p>Additionally, one can restrict the lists to those for which all items have a size of at most <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \alpha }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>α<!-- α --></mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \alpha }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/b79333175c8b3f0840bfb4ec41b8072c83ea88d3" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.488ex; height:1.676ex;" alt="{\displaystyle \alpha }"></span>. For such lists, the bounded size performance ratios are denoted as <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{A}({\text{size}}\leq \alpha )}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mtext>size</mtext>
</mrow>
<mo>≤<!-- ≤ --></mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{A}({\text{size}}\leq \alpha )}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/79ce65729f29a5e8699851eaf9a3b69e3c047ee4" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:13.252ex; height:2.843ex;" alt="{\displaystyle R_{A}({\text{size}}\leq \alpha )}"></span> and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{A}^{\infty }({\text{size}}\leq \alpha )}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mtext>size</mtext>
</mrow>
<mo>≤<!-- ≤ --></mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{A}^{\infty }({\text{size}}\leq \alpha )}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/8b301d65ad36252c1255b2c1746d37153b29df68" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:13.663ex; height:3.009ex;" alt="{\displaystyle R_{A}^{\infty }({\text{size}}\leq \alpha )}"></span>.
</p><p>Approximation algorithms for bin packing can be classified into two categories:
</p>
<ol><li>Online heuristics, that consider the items in a given order and place them one by one inside the bins. These heuristics are also applicable to the offline version of this problem.</li>
<li>Offline heuristics, that modify the given list of items e.g. by sorting the items by size. These algorithms are no longer applicable to the online variant of this problem. However, they have an improved approximation guarantee while maintaining the advantage of their small time-complexity. A sub-category of offline heuristics is asymptotic approximation schemes. These algorithms have an approximation guarantee of the form <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle (1+\varepsilon )\mathrm {OPT} (L)+C}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>+</mo>
<mi>ε<!-- ε --></mi>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>C</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle (1+\varepsilon )\mathrm {OPT} (L)+C}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/ec39faec736099abbcdf167e1357f58210222979" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:19.964ex; height:2.843ex;" alt="{\displaystyle (1+\varepsilon )\mathrm {OPT} (L)+C}"></span> for some constant that may depend on <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 1/\varepsilon }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mn>1</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mi>ε<!-- ε --></mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle 1/\varepsilon }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/c8a61384fb438a8f4019445c369caa1e9ae12e0f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:3.408ex; height:2.843ex;" alt="{\displaystyle 1/\varepsilon }"></span>. For an arbitrarily large <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {OPT} (L)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {OPT} (L)}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/579ae79a7d55de5e1095626c18c07d87cd63e3a5" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.461ex; height:2.843ex;" alt="{\displaystyle \mathrm {OPT} (L)}"></span> these algorithms get arbitrarily close to <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {OPT} (L)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {OPT} (L)}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/579ae79a7d55de5e1095626c18c07d87cd63e3a5" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.461ex; height:2.843ex;" alt="{\displaystyle \mathrm {OPT} (L)}"></span>. However, this comes at the cost of a (drastically) increased time complexity compared to the heuristical approaches.</li></ol>
<h2><span class="mw-headline" id="Online_heuristics">Online heuristics</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=4" title="Edit section: Online heuristics"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2>
<p>In the <a href="/enwiki/wiki/Online_algorithm" title="Online algorithm">online</a> version of the bin packing problem, the items arrive one after another and the (irreversible) decision where to place an item has to be made before knowing the next item or even if there will be another one. A diverse set of offline and online heuristics for bin-packing have been studied by <a href="/enwiki/wiki/David_S._Johnson" title="David S. Johnson">David S. Johnson</a> on his Ph.D. thesis.<sup id="cite_ref-johnson732_11-0" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup>
</p>
<h3><span class="mw-headline" id="Single-class_algorithms">Single-class algorithms</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=5" title="Edit section: Single-class algorithms"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3>
<p>There are many simple algorithms that use the following general scheme:
</p>
<ul><li>For each item in the input list:
<ol><li>If the item fits into one of the currently open bins, then put it in one of these bins;</li>
<li>Otherwise, open a new bin and put the new item in it.</li></ol></li></ul>
<p>The algorithms differ in the criterion by which they choose the open bin for the new item in step 1 (see the linked pages for more information):
</p>
<ul><li><a href="/enwiki/wiki/Next-fit_bin_packing" title="Next-fit bin packing"><b>Next Fit</b></a> <b>(NF)</b> always keeps a single open bin. When the new item does not fit into it, it closes the current bin and opens a new bin. Its advantage is that it is a bounded-space algorithm since it only needs to keep a single open bin in memory. Its disadvantage is that its asymptotic approximation ratio is 2. In particular, <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle NF(L)\leq 2\cdot \mathrm {OPT} (L)-1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>N</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mn>2</mn>
<mo>⋅<!-- ⋅ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>−<!-- − --></mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle NF(L)\leq 2\cdot \mathrm {OPT} (L)-1}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/57939cf82572373f9ba75c8c6cf8e3fd6d05c7cc" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:25.601ex; height:2.843ex;" alt="{\displaystyle NF(L)\leq 2\cdot \mathrm {OPT} (L)-1}"></span>, and for each <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle N\in \mathbb {N} }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>N</mi>
<mo>∈<!-- ∈ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="double-struck">N</mi>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle N\in \mathbb {N} }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/8b985ba501f78cb9890f3ecda3e2e315cbd5cb26" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:6.582ex; height:2.176ex;" alt="{\displaystyle N\in \mathbb {N} }"></span> there exists a list <span class="texhtml mvar" style="font-style:italic;">L</span> such that <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {OPT} (L)=N}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>N</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {OPT} (L)=N}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/adf967c335e29670658a514d0d9a6a58059c8813" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:13.623ex; height:2.843ex;" alt="{\displaystyle \mathrm {OPT} (L)=N}"></span> and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle NF(L)=2\cdot \mathrm {OPT} (L)-2}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>N</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mn>2</mn>
<mo>⋅<!-- ⋅ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>−<!-- − --></mo>
<mn>2</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle NF(L)=2\cdot \mathrm {OPT} (L)-2}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2b2d6d882219628ed08a2d1da56f815a27da08f0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:25.601ex; height:2.843ex;" alt="{\displaystyle NF(L)=2\cdot \mathrm {OPT} (L)-2}"></span>.<sup id="cite_ref-johnson732_11-1" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup> Its asymptotic approximation ratio can be somewhat improved based on the item sizes: <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{NF}^{\infty }({\text{size}}\leq \alpha )\leq 2}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>N</mi>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mtext>size</mtext>
</mrow>
<mo>≤<!-- ≤ --></mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mn>2</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{NF}^{\infty }({\text{size}}\leq \alpha )\leq 2}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/3153db2720ddb7ad29555315a7b5f4e253849eeb" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:18.971ex; height:3.009ex;" alt="{\displaystyle R_{NF}^{\infty }({\text{size}}\leq \alpha )\leq 2}"></span> for all <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \alpha \geq 1/2}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>α<!-- α --></mi>
<mo>≥<!-- ≥ --></mo>
<mn>1</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>2</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \alpha \geq 1/2}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/a9da1acc2a7101826ae6220240d5f7b9f340f753" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.073ex; height:2.843ex;" alt="{\displaystyle \alpha \geq 1/2}"></span> and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{NF}^{\infty }({\text{size}}\leq \alpha )\leq 1/(1-\alpha )}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>N</mi>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mtext>size</mtext>
</mrow>
<mo>≤<!-- ≤ --></mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mn>1</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>−<!-- − --></mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{NF}^{\infty }({\text{size}}\leq \alpha )\leq 1/(1-\alpha )}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/9d9b4ee130a47e912170ffa72d1eeaaf0bbafaf4" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:27.433ex; height:3.009ex;" alt="{\displaystyle R_{NF}^{\infty }({\text{size}}\leq \alpha )\leq 1/(1-\alpha )}"></span> for all <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \alpha \leq 1/2}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>α<!-- α --></mi>
<mo>≤<!-- ≤ --></mo>
<mn>1</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>2</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \alpha \leq 1/2}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/b909978c78a865abb35a0915865156f8e7298bd7" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.073ex; height:2.843ex;" alt="{\displaystyle \alpha \leq 1/2}"></span>. For each algorithm <span class="texhtml mvar" style="font-style:italic;">A</span> that is an AnyFit-algorithm it holds that <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{A}^{\infty }({\text{size}}\leq \alpha )\leq R_{NF}^{\infty }({\text{size}}\leq \alpha )}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mtext>size</mtext>
</mrow>
<mo>≤<!-- ≤ --></mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>N</mi>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mtext>size</mtext>
</mrow>
<mo>≤<!-- ≤ --></mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{A}^{\infty }({\text{size}}\leq \alpha )\leq R_{NF}^{\infty }({\text{size}}\leq \alpha )}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/70038b37b3781df0049279a7874d3dd8e86906f6" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:31.471ex; height:3.009ex;" alt="{\displaystyle R_{A}^{\infty }({\text{size}}\leq \alpha )\leq R_{NF}^{\infty }({\text{size}}\leq \alpha )}"></span>.</li>
<li><b><a href="/enwiki/wiki/Next-fit_bin_packing" title="Next-fit bin packing">Next-k-Fit</a></b> <b>(NkF)</b> is a variant of Next-Fit, but instead of keeping only one bin open, the algorithm keeps the last <span class="texhtml mvar" style="font-style:italic;">k</span> bins open and chooses the first bin in which the item fits. Therefore, it is called a <i>k-bounded space</i> algorithm.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12">[12]</a></sup> For <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle k\geq 2}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>k</mi>
<mo>≥<!-- ≥ --></mo>
<mn>2</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle k\geq 2}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/c797a67c0a51167d373c013a9a020f4568a11754" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:5.472ex; height:2.343ex;" alt="{\displaystyle k\geq 2}"></span> the NkF delivers results that are improved compared to the results of NF, however, increasing <span class="texhtml mvar" style="font-style:italic;">k</span> to constant values larger than <span class="texhtml mvar" style="font-style:italic;">2</span> improves the algorithm no further in its worst-case behavior. If algorithm <span class="texhtml mvar" style="font-style:italic;">A</span> is an AlmostAnyFit-algorithm and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle m=\lfloor 1/\alpha \rfloor \geq 2}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>m</mi>
<mo>=</mo>
<mo fence="false" stretchy="false">⌊<!-- ⌊ --></mo>
<mn>1</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mi>α<!-- α --></mi>
<mo fence="false" stretchy="false">⌋<!-- ⌋ --></mo>
<mo>≥<!-- ≥ --></mo>
<mn>2</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle m=\lfloor 1/\alpha \rfloor \geq 2}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/31bbd62fc4ab3c17184d4522c6175590323813e7" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:15.277ex; height:2.843ex;" alt="{\displaystyle m=\lfloor 1/\alpha \rfloor \geq 2}"></span> then <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{A}^{\infty }({\text{size}}\leq \alpha )\leq R_{N2F}^{\infty }({\text{size}}\leq \alpha )=1+1/m}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mtext>size</mtext>
</mrow>
<mo>≤<!-- ≤ --></mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>N</mi>
<mn>2</mn>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mtext>size</mtext>
</mrow>
<mo>≤<!-- ≤ --></mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mn>1</mn>
<mo>+</mo>
<mn>1</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mi>m</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{A}^{\infty }({\text{size}}\leq \alpha )\leq R_{N2F}^{\infty }({\text{size}}\leq \alpha )=1+1/m}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/3fea16ced22deedad46c03fbe4e023c0237ce373" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:43.759ex; height:3.009ex;" alt="{\displaystyle R_{A}^{\infty }({\text{size}}\leq \alpha )\leq R_{N2F}^{\infty }({\text{size}}\leq \alpha )=1+1/m}"></span>.<sup id="cite_ref-johnson732_11-2" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup></li>
<li><b><a href="/enwiki/wiki/First-fit_bin_packing" title="First-fit bin packing">First-Fit</a> (FF)</b> keeps all bins open, in the order in which they were opened. It attempts to place each new item into the <i>first</i> bin in which it fits. Its approximation ratio is <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle FF(L)\leq \lfloor 1.7\mathrm {OPT} \rfloor }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>F</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mo fence="false" stretchy="false">⌊<!-- ⌊ --></mo>
<mn>1.7</mn>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo fence="false" stretchy="false">⌋<!-- ⌋ --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle FF(L)\leq \lfloor 1.7\mathrm {OPT} \rfloor }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/6a2cb96779fb14031f0ed38d9e97a2bad081af22" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:20.078ex; height:2.843ex;" alt="{\displaystyle FF(L)\leq \lfloor 1.7\mathrm {OPT} \rfloor }"></span>, and there is a family of input lists <span class="texhtml mvar" style="font-style:italic;">L</span> for which <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle FF(L)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>F</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle FF(L)}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/7554a4aa8c871672e7fdf7590c2aa5804c8172fd" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.874ex; height:2.843ex;" alt="{\displaystyle FF(L)}"></span> matches this bound.<sup id="cite_ref-DósaSgall2_13-0" class="reference"><a href="#cite_note-DósaSgall2-13">[13]</a></sup></li>
<li><a href="/enwiki/wiki/Best-fit_bin_packing" title="Best-fit bin packing"><b>Best-Fit</b></a> <b>(BF)</b>, too, keeps all bins open, but attempts to place each new item into the bin with the <i>maximum</i> load in which it fits. Its approximation ratio is identical to that of FF, that is: <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle BF(L)\leq \lfloor 1.7\mathrm {OPT} \rfloor }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>B</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mo fence="false" stretchy="false">⌊<!-- ⌊ --></mo>
<mn>1.7</mn>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo fence="false" stretchy="false">⌋<!-- ⌋ --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle BF(L)\leq \lfloor 1.7\mathrm {OPT} \rfloor }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/dfd1473e5f361aa3e81e80ccab0b1c79df3ef65e" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:20.101ex; height:2.843ex;" alt="{\displaystyle BF(L)\leq \lfloor 1.7\mathrm {OPT} \rfloor }"></span>, and there is a family of input lists <span class="texhtml mvar" style="font-style:italic;">L</span> for which <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle BF(L)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>B</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle BF(L)}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/bba6fb8e04a7051b49cdc452cc1358a94bad9966" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.897ex; height:2.843ex;" alt="{\displaystyle BF(L)}"></span> matches this bound.<sup id="cite_ref-DósaSgall142_14-0" class="reference"><a href="#cite_note-DósaSgall142-14">[14]</a></sup></li>
<li><b>Worst-Fit (WF)</b> attempts to place each new item into the bin with the <i>minimum</i> load. It can behave as badly as Next-Fit, and will do so on the worst-case list for that <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle NF(L)=2\cdot \mathrm {OPT} (L)-2}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>N</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mn>2</mn>
<mo>⋅<!-- ⋅ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>−<!-- − --></mo>
<mn>2</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle NF(L)=2\cdot \mathrm {OPT} (L)-2}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2b2d6d882219628ed08a2d1da56f815a27da08f0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:25.601ex; height:2.843ex;" alt="{\displaystyle NF(L)=2\cdot \mathrm {OPT} (L)-2}"></span>. Furthermore, it holds that <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{WF}^{\infty }({\text{size}}\leq \alpha )=R_{NF}^{\infty }({\text{size}}\leq \alpha )}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>W</mi>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mtext>size</mtext>
</mrow>
<mo>≤<!-- ≤ --></mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>N</mi>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mtext>size</mtext>
</mrow>
<mo>≤<!-- ≤ --></mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{WF}^{\infty }({\text{size}}\leq \alpha )=R_{NF}^{\infty }({\text{size}}\leq \alpha )}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/0d02ad4a5d1afb6c522a2210ca658ae679b83850" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:32.781ex; height:3.009ex;" alt="{\displaystyle R_{WF}^{\infty }({\text{size}}\leq \alpha )=R_{NF}^{\infty }({\text{size}}\leq \alpha )}"></span>. Since WF is an AnyFit-algorithm, there exists an AnyFit-algorithm such that <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{AF}^{\infty }(\alpha )=R_{NF}^{\infty }(\alpha )}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>N</mi>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{AF}^{\infty }(\alpha )=R_{NF}^{\infty }(\alpha )}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/f77ec8fb43f6da1b4503f217b7a541b97ce638ed" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:18.838ex; height:3.009ex;" alt="{\displaystyle R_{AF}^{\infty }(\alpha )=R_{NF}^{\infty }(\alpha )}"></span>.<sup id="cite_ref-johnson732_11-3" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup></li>
<li><b>Almost Worst-Fit (AWF)</b> attempts to place each new item inside the <i>second most empty</i> open bin (or emptiest bin if there are two such bins). If it does not fit, it tries the most empty one. It has an asymptotic worst-case ratio of <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\tfrac {17}{10}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mfrac>
<mn>17</mn>
<mn>10</mn>
</mfrac>
</mstyle>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\tfrac {17}{10}}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/db724cdda7e608c09c29852ff071f62804c3e21d" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:2.48ex; height:3.843ex;" alt="{\displaystyle {\tfrac {17}{10}}}"></span>.<sup id="cite_ref-johnson732_11-4" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup></li></ul>
<p>In order to generalize these results, Johnson introduced two classes of online heuristics called <i>any-fit algorithm</i> and <i>almost-any-fit</i> algorithm:<b><sup id="cite_ref-:0_4-2" class="reference"><a href="#cite_note-:0-4">[4]</a></sup></b><sup class="reference nowrap"><span title="Page / location: 470">: 470 </span></sup>
</p>
<ul><li>In an <b>AnyFit (AF)</b> algorithm, if the current nonempty bins are <i>B</i><sub>1</sub>,...,<i>B<sub>j</sub></i>, then the current item will not be packed into <i>B</i><sub><i>j</i>+1</sub> unless it does not fit in any of <i>B</i><sub>1</sub>,...,<i>B<sub>j</sub></i>. The FF, WF, BF and AWF algorithms satisfy this condition. Johnson proved that, for any AnyFit algorithm A and any <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \alpha }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>α<!-- α --></mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \alpha }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/b79333175c8b3f0840bfb4ec41b8072c83ea88d3" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.488ex; height:1.676ex;" alt="{\displaystyle \alpha }"></span>:
<dl><dd><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{FF}^{\infty }(\alpha )\leq R_{A}^{\infty }(\alpha )\leq R_{WF}^{\infty }(\alpha )}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>F</mi>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>W</mi>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{FF}^{\infty }(\alpha )\leq R_{A}^{\infty }(\alpha )\leq R_{WF}^{\infty }(\alpha )}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2b96f9782b084244ad843a92e03b3f7f04e843f6" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:29.134ex; height:3.009ex;" alt="{\displaystyle R_{FF}^{\infty }(\alpha )\leq R_{A}^{\infty }(\alpha )\leq R_{WF}^{\infty }(\alpha )}"></span>.</dd></dl></li>
<li>In an <b>AlmostAnyFit (AAF)</b> algorithm, if the current nonempty bins are <i>B</i><sub>1</sub>,...,<i>B<sub>j</sub></i>, and of these bins, <i>B<sub>k</sub></i> is the unique bin with the smallest load, then the current item will not be packed into <i>B<sub>k</sub></i>, unless it does not fit into any of the bins to its left. The FF, BF and AWF algorithms satisfy this condition, but WF does not. Johnson proved that, for any AAF algorithm A and any <span class="texhtml mvar" style="font-style:italic;">α</span>:
<dl><dd><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{A}^{\infty }(\alpha )=R_{FF}^{\infty }(\alpha )}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>F</mi>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo stretchy="false">(</mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{A}^{\infty }(\alpha )=R_{FF}^{\infty }(\alpha )}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/ca1f36366674dd1741a5a3dcd66180a34e4f4296" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:17.79ex; height:3.009ex;" alt="{\displaystyle R_{A}^{\infty }(\alpha )=R_{FF}^{\infty }(\alpha )}"></span> In particular: <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{A}^{\infty }=1.7}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>=</mo>
<mn>1.7</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{A}^{\infty }=1.7}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/4ac1a92bfdd32115ec2460461d09811e311f57af" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:9.71ex; height:2.843ex;" alt="{\displaystyle R_{A}^{\infty }=1.7}"></span>.</dd></dl></li></ul>
<h3><span class="mw-headline" id="Refined_algorithms">Refined algorithms</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=6" title="Edit section: Refined algorithms"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3>
<p>Better approximation ratios are possible with heuristics that are not AnyFit. These heuristics usually keep several classes of open bins, devoted to items of different size ranges (see the linked pages for more information):
</p>
<ul><li><b><a href="/enwiki/wiki/Refined_first-fit_bin_packing" class="mw-redirect" title="Refined first-fit bin packing">Refined-first-fit bin packing</a> (RFF)</b> partitions the item sizes into four ranges: <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \left({\frac {1}{2}},1\right]}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow>
<mo>(</mo>
<mrow>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mn>2</mn>
</mfrac>
</mrow>
<mo>,</mo>
<mn>1</mn>
</mrow>
<mo>]</mo>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \left({\frac {1}{2}},1\right]}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/63d745a9a95b5b7aed192d980fb320189156a305" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:7.133ex; height:6.176ex;" alt="{\displaystyle \left({\frac {1}{2}},1\right]}"></span>, <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \left({\frac {2}{5}},{\frac {1}{2}}\right]}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow>
<mo>(</mo>
<mrow>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>2</mn>
<mn>5</mn>
</mfrac>
</mrow>
<mo>,</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mn>2</mn>
</mfrac>
</mrow>
</mrow>
<mo>]</mo>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \left({\frac {2}{5}},{\frac {1}{2}}\right]}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/456c54f613fbf73f3a3546ca237ffd309a38516c" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:7.969ex; height:6.176ex;" alt="{\displaystyle \left({\frac {2}{5}},{\frac {1}{2}}\right]}"></span>, <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \left({\frac {1}{3}},{\frac {2}{5}}\right]}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow>
<mo>(</mo>
<mrow>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mn>3</mn>
</mfrac>
</mrow>
<mo>,</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>2</mn>
<mn>5</mn>
</mfrac>
</mrow>
</mrow>
<mo>]</mo>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \left({\frac {1}{3}},{\frac {2}{5}}\right]}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/91777e388a194dfd51986403cf0658e33aa2897d" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:7.969ex; height:6.176ex;" alt="{\displaystyle \left({\frac {1}{3}},{\frac {2}{5}}\right]}"></span>, and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \left(0,{\frac {1}{3}}\right]}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow>
<mo>(</mo>
<mrow>
<mn>0</mn>
<mo>,</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mn>3</mn>
</mfrac>
</mrow>
</mrow>
<mo>]</mo>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \left(0,{\frac {1}{3}}\right]}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/6408234dfa3968cd27e675edb545ed368f11d9fb" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:7.133ex; height:6.176ex;" alt="{\displaystyle \left(0,{\frac {1}{3}}\right]}"></span>. Similarly, the bins are categorized into four classes. The next item <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle i\in L}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>i</mi>
<mo>∈<!-- ∈ --></mo>
<mi>L</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle i\in L}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/d27090b608379e270aa514598840cead3c538c99" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:5.226ex; height:2.176ex;" alt="{\displaystyle i\in L}"></span> is first assigned to its corresponding class. Inside that class, it is assigned to a bin using <a href="/enwiki/wiki/First-fit_bin_packing" title="First-fit bin packing">first-fit</a>. Note that this algorithm is not an Any-Fit algorithm since it may open a new bin despite the fact that the current item fits inside an open bin. This algorithm was first presented by Andrew Chi-Chih Yao,<sup id="cite_ref-Yao19802_15-0" class="reference"><a href="#cite_note-Yao19802-15">[15]</a></sup> who proved that it has an approximation guarantee of <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle RFF(L)\leq (5/3)\cdot \mathrm {OPT} (L)+5}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>R</mi>
<mi>F</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mo stretchy="false">(</mo>
<mn>5</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>3</mn>
<mo stretchy="false">)</mo>
<mo>⋅<!-- ⋅ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mn>5</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle RFF(L)\leq (5/3)\cdot \mathrm {OPT} (L)+5}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/68f1a606a73fe962913aebbd8baef8ab6248b9bb" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:31.176ex; height:2.843ex;" alt="{\displaystyle RFF(L)\leq (5/3)\cdot \mathrm {OPT} (L)+5}"></span> and presented a family of lists <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle L_{k}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle L_{k}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/939365b07ac6bf3558837d0c457ca855dcb5e7d4" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.672ex; height:2.509ex;" alt="{\displaystyle L_{k}}"></span> with <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle RFF(L_{k})=(5/3)\mathrm {OPT} (L_{k})+1/3}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>R</mi>
<mi>F</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<msub>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mo stretchy="false">(</mo>
<mn>5</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>3</mn>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<msub>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mn>1</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>3</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle RFF(L_{k})=(5/3)\mathrm {OPT} (L_{k})+1/3}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/c1d95c0f268a8a0403384630a3afa19d2bd2f547" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:33.999ex; height:2.843ex;" alt="{\displaystyle RFF(L_{k})=(5/3)\mathrm {OPT} (L_{k})+1/3}"></span> for <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {OPT} (L)=6k+1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mn>6</mn>
<mi>k</mi>
<mo>+</mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {OPT} (L)=6k+1}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/0790afe5e60bd5700dc35bd120872c3c6914b4e7" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:17.936ex; height:2.843ex;" alt="{\displaystyle \mathrm {OPT} (L)=6k+1}"></span>.</li>
<li><b><a href="/enwiki/wiki/Harmonic_bin_packing" title="Harmonic bin packing">Harmonic-k</a></b> partitions the interval of sizes <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle (0,1]}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">(</mo>
<mn>0</mn>
<mo>,</mo>
<mn>1</mn>
<mo stretchy="false">]</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle (0,1]}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/7e70f9c241f9faa8e9fdda2e8b238e288807d7a4" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.91ex; height:2.843ex;" alt="{\displaystyle (0,1]}"></span> based on a <a href="/enwiki/wiki/Harmonic_progression_(mathematics)" title="Harmonic progression (mathematics)">Harmonic progression</a> into <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle k-1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>k</mi>
<mo>−<!-- − --></mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle k-1}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/21363ebd7038c93aae93127e7d910fc1b2e2c745" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:5.214ex; height:2.343ex;" alt="{\displaystyle k-1}"></span> pieces <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle I_{j}:=\left({\frac {1}{j+1}},{\frac {1}{j}}\right]}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>I</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
<mo>:=</mo>
<mrow>
<mo>(</mo>
<mrow>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mrow>
<mi>j</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mfrac>
</mrow>
<mo>,</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mi>j</mi>
</mfrac>
</mrow>
</mrow>
<mo>]</mo>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle I_{j}:=\left({\frac {1}{j+1}},{\frac {1}{j}}\right]}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/8ed417072ac07408d6a4dc0651abca0244de20f6" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:17.446ex; height:6.176ex;" alt="{\displaystyle I_{j}:=\left({\frac {1}{j+1}},{\frac {1}{j}}\right]}"></span> for <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 1\leq j<k}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mn>1</mn>
<mo>≤<!-- ≤ --></mo>
<mi>j</mi>
<mo><</mo>
<mi>k</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle 1\leq j<k}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/8003ec7af9e2d59fa3e016d97ee229823f56df7f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:9.529ex; height:2.509ex;" alt="{\displaystyle 1\leq j<k}"></span> and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle I_{k}:=\left(0,{\frac {1}{k}}\right]}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>I</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo>:=</mo>
<mrow>
<mo>(</mo>
<mrow>
<mn>0</mn>
<mo>,</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mi>k</mi>
</mfrac>
</mrow>
</mrow>
<mo>]</mo>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle I_{k}:=\left(0,{\frac {1}{k}}\right]}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/3e4355ca1a3689a9b4044fc5eda7dc9e38be26fd" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:13.039ex; height:6.176ex;" alt="{\displaystyle I_{k}:=\left(0,{\frac {1}{k}}\right]}"></span> such that <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \bigcup _{j=1}^{k}I_{j}=(0,1]}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<munderover>
<mo>⋃<!-- ⋃ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</munderover>
<msub>
<mi>I</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
<mo>=</mo>
<mo stretchy="false">(</mo>
<mn>0</mn>
<mo>,</mo>
<mn>1</mn>
<mo stretchy="false">]</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \bigcup _{j=1}^{k}I_{j}=(0,1]}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/82202aee1458710ed56d842032167a9135e6d0a5" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -3.338ex; margin-left: -0.019ex; width:13.126ex; height:7.676ex;" alt="{\displaystyle \bigcup _{j=1}^{k}I_{j}=(0,1]}"></span>. This algorithm was first described by Lee and Lee.<sup id="cite_ref-LeeLee19852_16-0" class="reference"><a href="#cite_note-LeeLee19852-16">[16]</a></sup> It has a time complexity of <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(|L|\log(|L|))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(|L|\log(|L|))}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/4f2fceb5936c21496c5940c5b39aeaa8064963be" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:14.58ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(|L|\log(|L|))}"></span> and at each step, there are at most <span class="texhtml mvar" style="font-style:italic;">k</span> open bins that can be potentially used to place items, i.e., it is a <span class="texhtml mvar" style="font-style:italic;">k</span>-bounded space algorithm. For <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle k\rightarrow \infty }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>k</mi>
<mo stretchy="false">→<!-- → --></mo>
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle k\rightarrow \infty }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/612a3ec99f1c9f12de1cfab011e306ae799858ce" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:7.149ex; height:2.176ex;" alt="{\displaystyle k\rightarrow \infty }"></span>, its approximation ratio satisfies <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{Hk}^{\infty }\approx 1.6910}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>H</mi>
<mi>k</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≈<!-- ≈ --></mo>
<mn>1.6910</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{Hk}^{\infty }\approx 1.6910}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/fad299c096346d6eea4938636547a2fc89e25352" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:13.87ex; height:2.843ex;" alt="{\displaystyle R_{Hk}^{\infty }\approx 1.6910}"></span>, and it is asymptotically tight.</li>
<li><b><a href="/enwiki/wiki/Harmonic_bin_packing" title="Harmonic bin packing">Refined-harmonic</a></b> combines ideas from Harmonic-k with ideas from <a href="/enwiki/wiki/Refined_first-fit_bin_packing" class="mw-redirect" title="Refined first-fit bin packing">Refined-First-Fit</a>. It places the items larger than <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\tfrac {1}{3}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mfrac>
<mn>1</mn>
<mn>3</mn>
</mfrac>
</mstyle>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\tfrac {1}{3}}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/9efc37d09854a3f8fb997e7de4331876bc49c2c0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:1.658ex; height:3.676ex;" alt="{\displaystyle {\tfrac {1}{3}}}"></span> similar as in Refined-First-Fit, while the smaller items are placed using Harmonic-k. The intuition for this strategy is to reduce the huge waste for bins containing pieces that are just larger than <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\tfrac {1}{2}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mfrac>
<mn>1</mn>
<mn>2</mn>
</mfrac>
</mstyle>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\tfrac {1}{2}}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/edef8290613648790a8ac1a95c2fb7c3972aea2f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.171ex; width:1.658ex; height:3.509ex;" alt="{\displaystyle {\tfrac {1}{2}}}"></span>. This algorithm was first described by Lee and Lee.<sup id="cite_ref-LeeLee19852_16-1" class="reference"><a href="#cite_note-LeeLee19852-16">[16]</a></sup> They proved that for <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle k=20}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>k</mi>
<mo>=</mo>
<mn>20</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle k=20}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/5884099ba393dd17c7372b9a1c6373a2e39ddc05" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:6.635ex; height:2.176ex;" alt="{\displaystyle k=20}"></span> it holds that <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{RH}^{\infty }\leq 373/228}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>R</mi>
<mi>H</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≤<!-- ≤ --></mo>
<mn>373</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>228</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{RH}^{\infty }\leq 373/228}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/650f827b48f5b8624dfab3f18594d28d4b157a61" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:15.938ex; height:3.009ex;" alt="{\displaystyle R_{RH}^{\infty }\leq 373/228}"></span>.</li></ul>
<h3><span class="mw-headline" id="General_lower_bounds_for_online_algorithms">General lower bounds for online algorithms</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=7" title="Edit section: General lower bounds for online algorithms"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3>
<p>Yao<sup id="cite_ref-Yao19802_15-1" class="reference"><a href="#cite_note-Yao19802-15">[15]</a></sup> proved in 1980 that there can be no online algorithm with an asymptotic competitive ratio smaller than <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\tfrac {3}{2}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mfrac>
<mn>3</mn>
<mn>2</mn>
</mfrac>
</mstyle>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\tfrac {3}{2}}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/631d66184353d37ebfe470a07a6a61487da227ac" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.171ex; width:1.658ex; height:3.509ex;" alt="{\displaystyle {\tfrac {3}{2}}}"></span>. Brown<sup id="cite_ref-17" class="reference"><a href="#cite_note-17">[17]</a></sup> and Liang<sup id="cite_ref-18" class="reference"><a href="#cite_note-18">[18]</a></sup> improved this bound to <span class="nowrap"><span data-sort-value="7000153635000000000♠"></span>1.536<span style="margin-left:.25em;">35</span></span>. Afterward, this bound was improved to <span class="nowrap"><span data-sort-value="7000154014000000000♠"></span>1.540<span style="margin-left:.25em;">14</span></span> by Vliet.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19">[19]</a></sup> In 2012, this lower bound was again improved by Békési and Galambos<sup id="cite_ref-20" class="reference"><a href="#cite_note-20">[20]</a></sup> to <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\tfrac {248}{161}}\approx 1.54037}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mfrac>
<mn>248</mn>
<mn>161</mn>
</mfrac>
</mstyle>
</mrow>
<mo>≈<!-- ≈ --></mo>
<mn>1.54037</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\tfrac {248}{161}}\approx 1.54037}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2aefb29b855d1d40c640f7dffae46d135fa0adf8" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:14.022ex; height:3.843ex;" alt="{\displaystyle {\tfrac {248}{161}}\approx 1.54037}"></span>.
</p>
<h3><span class="mw-headline" id="Comparison_table">Comparison table</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=8" title="Edit section: Comparison table"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3>
<table class="wikitable">
<tbody><tr>
<th>Algorithm
</th>
<th>Approximation guarantee
</th>
<th>Worst case list <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle L}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>L</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle L}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/103168b86f781fe6e9a4a87b8ea1cebe0ad4ede8" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.583ex; height:2.176ex;" alt="{\displaystyle L}"></span>
</th>
<th>Time-complexity
</th></tr>
<tr>
<td><a href="/enwiki/wiki/Next-fit_bin_packing" title="Next-fit bin packing">Next-fit (NF)</a>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle NF(L)\leq 2\cdot \mathrm {OPT} (L)-1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>N</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mn>2</mn>
<mo>⋅<!-- ⋅ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>−<!-- − --></mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle NF(L)\leq 2\cdot \mathrm {OPT} (L)-1}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/57939cf82572373f9ba75c8c6cf8e3fd6d05c7cc" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:25.601ex; height:2.843ex;" alt="{\displaystyle NF(L)\leq 2\cdot \mathrm {OPT} (L)-1}"></span><sup id="cite_ref-johnson732_11-5" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle NF(L)=2\cdot \mathrm {OPT} (L)-2}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>N</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mn>2</mn>
<mo>⋅<!-- ⋅ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>−<!-- − --></mo>
<mn>2</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle NF(L)=2\cdot \mathrm {OPT} (L)-2}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/2b2d6d882219628ed08a2d1da56f815a27da08f0" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:25.601ex; height:2.843ex;" alt="{\displaystyle NF(L)=2\cdot \mathrm {OPT} (L)-2}"></span><sup id="cite_ref-johnson732_11-6" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(|L|)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(|L|)}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/9aa11215afd11183550f4d1366a14fac6504f070" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.536ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(|L|)}"></span>
</td></tr>
<tr>
<td><a href="/enwiki/wiki/First-fit_bin_packing" title="First-fit bin packing">First-fit (FF)</a>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle FF(L)\leq \lfloor 1.7\mathrm {OPT} (L)\rfloor }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>F</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mo fence="false" stretchy="false">⌊<!-- ⌊ --></mo>
<mn>1.7</mn>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo fence="false" stretchy="false">⌋<!-- ⌋ --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle FF(L)\leq \lfloor 1.7\mathrm {OPT} (L)\rfloor }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/8c9a9ed6d6989ae435cb5ecf5cdef6186e050873" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:23.47ex; height:2.843ex;" alt="{\displaystyle FF(L)\leq \lfloor 1.7\mathrm {OPT} (L)\rfloor }"></span><sup id="cite_ref-DósaSgall2_13-1" class="reference"><a href="#cite_note-DósaSgall2-13">[13]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle FF(L)=\lfloor 1.7\mathrm {OPT} (L)\rfloor }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>F</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mo fence="false" stretchy="false">⌊<!-- ⌊ --></mo>
<mn>1.7</mn>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo fence="false" stretchy="false">⌋<!-- ⌋ --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle FF(L)=\lfloor 1.7\mathrm {OPT} (L)\rfloor }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/137dac8c4c6b5576ddca25419cd74d2aecdc0117" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:23.47ex; height:2.843ex;" alt="{\displaystyle FF(L)=\lfloor 1.7\mathrm {OPT} (L)\rfloor }"></span><sup id="cite_ref-DósaSgall2_13-2" class="reference"><a href="#cite_note-DósaSgall2-13">[13]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(|L|\log(|L|))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(|L|\log(|L|))}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/4f2fceb5936c21496c5940c5b39aeaa8064963be" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:14.58ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(|L|\log(|L|))}"></span><sup id="cite_ref-johnson732_11-7" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup>
</td></tr>
<tr>
<td><a href="/enwiki/wiki/Best-fit_bin_packing" title="Best-fit bin packing">Best-fit (BF)</a>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle BF(L)\leq \lfloor 1.7\mathrm {OPT} (L)\rfloor }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>B</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mo fence="false" stretchy="false">⌊<!-- ⌊ --></mo>
<mn>1.7</mn>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo fence="false" stretchy="false">⌋<!-- ⌋ --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle BF(L)\leq \lfloor 1.7\mathrm {OPT} (L)\rfloor }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/12ed57d56c5873e920278646ee348ca8927ef61d" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:23.493ex; height:2.843ex;" alt="{\displaystyle BF(L)\leq \lfloor 1.7\mathrm {OPT} (L)\rfloor }"></span><sup id="cite_ref-DósaSgall142_14-1" class="reference"><a href="#cite_note-DósaSgall142-14">[14]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle BF(L)=\lfloor 1.7\mathrm {OPT} (L)\rfloor }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>B</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mo fence="false" stretchy="false">⌊<!-- ⌊ --></mo>
<mn>1.7</mn>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo fence="false" stretchy="false">⌋<!-- ⌋ --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle BF(L)=\lfloor 1.7\mathrm {OPT} (L)\rfloor }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/a1eb3372eeaf4709cdc27282afcba8776ab75dab" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:23.493ex; height:2.843ex;" alt="{\displaystyle BF(L)=\lfloor 1.7\mathrm {OPT} (L)\rfloor }"></span><sup id="cite_ref-DósaSgall142_14-2" class="reference"><a href="#cite_note-DósaSgall142-14">[14]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(|L|\log(|L|))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(|L|\log(|L|))}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/4f2fceb5936c21496c5940c5b39aeaa8064963be" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:14.58ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(|L|\log(|L|))}"></span><sup id="cite_ref-johnson732_11-8" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup>
</td></tr>
<tr>
<td>Worst-Fit (WF)
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle WF(L)\leq 2\cdot \mathrm {OPT} (L)-1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>W</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mn>2</mn>
<mo>⋅<!-- ⋅ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>−<!-- − --></mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle WF(L)\leq 2\cdot \mathrm {OPT} (L)-1}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/c4e3baa7a185e6c8a26ca361b4fcaecdd2cb2836" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:25.972ex; height:2.843ex;" alt="{\displaystyle WF(L)\leq 2\cdot \mathrm {OPT} (L)-1}"></span><sup id="cite_ref-johnson732_11-9" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle WF(L)=2\cdot \mathrm {OPT} (L)-2}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>W</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mn>2</mn>
<mo>⋅<!-- ⋅ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>−<!-- − --></mo>
<mn>2</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle WF(L)=2\cdot \mathrm {OPT} (L)-2}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/fe03e34322dd24ba6f1d2293e6499df4d68dc49e" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:25.972ex; height:2.843ex;" alt="{\displaystyle WF(L)=2\cdot \mathrm {OPT} (L)-2}"></span><sup id="cite_ref-johnson732_11-10" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(|L|\log(|L|))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(|L|\log(|L|))}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/4f2fceb5936c21496c5940c5b39aeaa8064963be" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:14.58ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(|L|\log(|L|))}"></span><sup id="cite_ref-johnson732_11-11" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup>
</td></tr>
<tr>
<td>Almost-Worst-Fit (AWF)
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{AWF}^{\infty }\leq 17/10}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
<mi>W</mi>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≤<!-- ≤ --></mo>
<mn>17</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>10</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{AWF}^{\infty }\leq 17/10}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/fa60a95f69f110a2faf075546f3da510db8832e1" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.171ex; width:15.092ex; height:3.176ex;" alt="{\displaystyle R_{AWF}^{\infty }\leq 17/10}"></span><sup id="cite_ref-johnson732_11-12" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{AWF}^{\infty }=17/10}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
<mi>W</mi>
<mi>F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>=</mo>
<mn>17</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>10</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{AWF}^{\infty }=17/10}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/a480be10be0800054641d2787f153f734281c865" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.171ex; width:15.092ex; height:3.176ex;" alt="{\displaystyle R_{AWF}^{\infty }=17/10}"></span><sup id="cite_ref-johnson732_11-13" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(|L|\log(|L|))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(|L|\log(|L|))}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/4f2fceb5936c21496c5940c5b39aeaa8064963be" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:14.58ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(|L|\log(|L|))}"></span><sup id="cite_ref-johnson732_11-14" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup>
</td></tr>
<tr>
<td><a href="/enwiki/wiki/Refined_first-fit_bin_packing" class="mw-redirect" title="Refined first-fit bin packing">Refined-First-Fit</a> (RFF)
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle RFF(L)\leq (5/3)\cdot \mathrm {OPT} (L)+5}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>R</mi>
<mi>F</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mo stretchy="false">(</mo>
<mn>5</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>3</mn>
<mo stretchy="false">)</mo>
<mo>⋅<!-- ⋅ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mn>5</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle RFF(L)\leq (5/3)\cdot \mathrm {OPT} (L)+5}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/68f1a606a73fe962913aebbd8baef8ab6248b9bb" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:31.176ex; height:2.843ex;" alt="{\displaystyle RFF(L)\leq (5/3)\cdot \mathrm {OPT} (L)+5}"></span><sup id="cite_ref-Yao19802_15-2" class="reference"><a href="#cite_note-Yao19802-15">[15]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle RFF(L)=(5/3)\mathrm {OPT} (L)+1/3}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>R</mi>
<mi>F</mi>
<mi>F</mi>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mo stretchy="false">(</mo>
<mn>5</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>3</mn>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mn>1</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>3</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle RFF(L)=(5/3)\mathrm {OPT} (L)+1/3}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/807762129f4c56c204b6bae5544a96555bf61af3" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:31.822ex; height:2.843ex;" alt="{\displaystyle RFF(L)=(5/3)\mathrm {OPT} (L)+1/3}"></span> (for <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {OPT} (L)=6k+1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>L</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mn>6</mn>
<mi>k</mi>
<mo>+</mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {OPT} (L)=6k+1}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/0790afe5e60bd5700dc35bd120872c3c6914b4e7" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:17.936ex; height:2.843ex;" alt="{\displaystyle \mathrm {OPT} (L)=6k+1}"></span>)<sup id="cite_ref-Yao19802_15-3" class="reference"><a href="#cite_note-Yao19802-15">[15]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(|L|\log(|L|))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(|L|\log(|L|))}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/4f2fceb5936c21496c5940c5b39aeaa8064963be" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:14.58ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(|L|\log(|L|))}"></span><sup id="cite_ref-Yao19802_15-4" class="reference"><a href="#cite_note-Yao19802-15">[15]</a></sup>
</td></tr>
<tr>
<td><a href="/enwiki/wiki/Harmonic_bin_packing" title="Harmonic bin packing">Harmonic-k (Hk)</a>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{Hk}^{\infty }\leq 1.69103}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>H</mi>
<mi>k</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≤<!-- ≤ --></mo>
<mn>1.69103</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{Hk}^{\infty }\leq 1.69103}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/0a393eb53a40459bd59e1bdc97bab87182e6577b" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:15.032ex; height:2.843ex;" alt="{\displaystyle R_{Hk}^{\infty }\leq 1.69103}"></span> for <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle k\rightarrow \infty }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>k</mi>
<mo stretchy="false">→<!-- → --></mo>
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle k\rightarrow \infty }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/612a3ec99f1c9f12de1cfab011e306ae799858ce" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:7.149ex; height:2.176ex;" alt="{\displaystyle k\rightarrow \infty }"></span><sup id="cite_ref-LeeLee19852_16-2" class="reference"><a href="#cite_note-LeeLee19852-16">[16]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{Hk}^{\infty }\geq 1.69103}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>H</mi>
<mi>k</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≥<!-- ≥ --></mo>
<mn>1.69103</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{Hk}^{\infty }\geq 1.69103}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/4fd6f9085cf4923cf00793d695054a71100165df" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:15.032ex; height:2.843ex;" alt="{\displaystyle R_{Hk}^{\infty }\geq 1.69103}"></span><sup id="cite_ref-LeeLee19852_16-3" class="reference"><a href="#cite_note-LeeLee19852-16">[16]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(|L|\log(|L|)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(|L|\log(|L|)}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/5dd8f5cf27a4d63fd7ffea94144a0d3340f574ff" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:13.676ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(|L|\log(|L|)}"></span><sup id="cite_ref-LeeLee19852_16-4" class="reference"><a href="#cite_note-LeeLee19852-16">[16]</a></sup>
</td></tr>
<tr>
<td><a href="/enwiki/wiki/Harmonic_bin_packing" title="Harmonic bin packing">Refined Harmonic</a> (RH)
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{RH}^{\infty }\leq 373/228\approx 1.63597}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>R</mi>
<mi>H</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≤<!-- ≤ --></mo>
<mn>373</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>228</mn>
<mo>≈<!-- ≈ --></mo>
<mn>1.63597</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{RH}^{\infty }\leq 373/228\approx 1.63597}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/252a18c0af53e8537068773d11d6791b3d3fd70b" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:26.658ex; height:3.009ex;" alt="{\displaystyle R_{RH}^{\infty }\leq 373/228\approx 1.63597}"></span><sup id="cite_ref-LeeLee19852_16-5" class="reference"><a href="#cite_note-LeeLee19852-16">[16]</a></sup>
</td>
<td>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(|L|)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mi>L</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">|</mo>
</mrow>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(|L|)}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/9aa11215afd11183550f4d1366a14fac6504f070" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.536ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(|L|)}"></span><sup id="cite_ref-LeeLee19852_16-6" class="reference"><a href="#cite_note-LeeLee19852-16">[16]</a></sup>
</td></tr>
<tr>
<td>Modified Harmonic (MH)
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{MH}^{\infty }\leq 538/33\approx 1.61562}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>M</mi>
<mi>H</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≤<!-- ≤ --></mo>
<mn>538</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>33</mn>
<mo>≈<!-- ≈ --></mo>
<mn>1.61562</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{MH}^{\infty }\leq 538/33\approx 1.61562}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/a738fe8c45500a97a2e63c658e7a355ea337cfc7" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:25.976ex; height:3.009ex;" alt="{\displaystyle R_{MH}^{\infty }\leq 538/33\approx 1.61562}"></span><sup id="cite_ref-RamananBLL19892_21-0" class="reference"><a href="#cite_note-RamananBLL19892-21">[21]</a></sup>
</td>
<td>
</td>
<td>
</td></tr>
<tr>
<td>Modified Harmonic 2 (MH2)
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{MH2}^{\infty }\leq 239091/148304\approx 1.61217}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>M</mi>
<mi>H</mi>
<mn>2</mn>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≤<!-- ≤ --></mo>
<mn>239091</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mn>148304</mn>
<mo>≈<!-- ≈ --></mo>
<mn>1.61217</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{MH2}^{\infty }\leq 239091/148304\approx 1.61217}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/4ff9e1b3db3b57693c4f07e34a20461fb3f8e5be" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:34.935ex; height:3.009ex;" alt="{\displaystyle R_{MH2}^{\infty }\leq 239091/148304\approx 1.61217}"></span><sup id="cite_ref-RamananBLL19892_21-1" class="reference"><a href="#cite_note-RamananBLL19892-21">[21]</a></sup>
</td>
<td>
</td>
<td>
</td></tr>
<tr>
<td>Harmonic + 1 (H+1)
</td>
<td>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{H+1}^{\infty }\geq 1.59217}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>H</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≥<!-- ≥ --></mo>
<mn>1.59217</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{H+1}^{\infty }\geq 1.59217}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/4d315a867877e4755e4ff7d15cef432d3140cb64" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.171ex; width:16.276ex; height:3.009ex;" alt="{\displaystyle R_{H+1}^{\infty }\geq 1.59217}"></span><sup id="cite_ref-Seiden20022_22-0" class="reference"><a href="#cite_note-Seiden20022-22">[22]</a></sup>
</td>
<td>
</td></tr>
<tr>
<td>Harmonic ++ (H++)
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{H++}^{\infty }\leq 1.58889}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>H</mi>
<mo>+</mo>
<mo>+</mo>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≤<!-- ≤ --></mo>
<mn>1.58889</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{H++}^{\infty }\leq 1.58889}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/ef32050fbb814a05c678d363a91502584e824849" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.171ex; width:16.733ex; height:3.009ex;" alt="{\displaystyle R_{H++}^{\infty }\leq 1.58889}"></span><sup id="cite_ref-Seiden20022_22-1" class="reference"><a href="#cite_note-Seiden20022-22">[22]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{H++}^{\infty }\geq 1.58333}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>H</mi>
<mo>+</mo>
<mo>+</mo>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≥<!-- ≥ --></mo>
<mn>1.58333</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{H++}^{\infty }\geq 1.58333}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/8a5e0b7338c45677fcf8e52f63bea806eb90994e" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.171ex; width:16.733ex; height:3.009ex;" alt="{\displaystyle R_{H++}^{\infty }\geq 1.58333}"></span><sup id="cite_ref-Seiden20022_22-2" class="reference"><a href="#cite_note-Seiden20022-22">[22]</a></sup>
</td>
<td>
</td></tr></tbody></table>
<h2><span class="mw-headline" id="Offline_algorithms">Offline algorithms</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=9" title="Edit section: Offline algorithms"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2>
<p>In the offline version of bin packing, the algorithm can see all the items before starting to place them into bins. This allows to attain improved approximation ratios.
</p>
<h3><span class="mw-headline" id="Multiplicative_approximation">Multiplicative approximation</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=10" title="Edit section: Multiplicative approximation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3>
<p>The simplest technique used by offline approximation schemes is the following:
</p>
<ul><li>Ordering the input list by descending size;</li>
<li>Run an online algorithm on the ordered list.</li></ul><p>
Johnson<sup id="cite_ref-johnson732_11-15" class="reference"><a href="#cite_note-johnson732-11">[11]</a></sup> proved that any AnyFit scheme A that runs on a list ordered by descending size has an asymptotic approximation ratio of</p><blockquote><p><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 1.22\approx {\frac {11}{9}}\leq R_{A}^{\infty }\leq {\frac {5}{4}}=1.25}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mn>1.22</mn>
<mo>≈<!-- ≈ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>11</mn>
<mn>9</mn>
</mfrac>
</mrow>
<mo>≤<!-- ≤ --></mo>
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>A</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≤<!-- ≤ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>5</mn>
<mn>4</mn>
</mfrac>
</mrow>
<mo>=</mo>
<mn>1.25</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle 1.22\approx {\frac {11}{9}}\leq R_{A}^{\infty }\leq {\frac {5}{4}}=1.25}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/f9aee5f94aa237acfa0d29f35003b9b8436510f9" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:29.461ex; height:5.176ex;" alt="{\displaystyle 1.22\approx {\frac {11}{9}}\leq R_{A}^{\infty }\leq {\frac {5}{4}}=1.25}"></span>.</p></blockquote><p>Some methods in this family are (see the linked pages for more information):
</p><ul><li><b><a href="/enwiki/wiki/First-fit-decreasing_bin_packing" title="First-fit-decreasing bin packing">First-fit-decreasing</a> (FFD)</b> orders the items by descending size, then calls First-Fit. Its approximation ratio is <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle FFD(I)={\frac {11}{9}}\mathrm {OPT} (I)+{\frac {6}{9}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>F</mi>
<mi>F</mi>
<mi>D</mi>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>11</mn>
<mn>9</mn>
</mfrac>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>6</mn>
<mn>9</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle FFD(I)={\frac {11}{9}}\mathrm {OPT} (I)+{\frac {6}{9}}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/e92098a6f29e870667340acf63fa263899dfe4ee" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:27.535ex; height:5.176ex;" alt="{\displaystyle FFD(I)={\frac {11}{9}}\mathrm {OPT} (I)+{\frac {6}{9}}}"></span>, and this is tight.<sup id="cite_ref-Dosa072_23-0" class="reference"><a href="#cite_note-Dosa072-23">[23]</a></sup></li>
<li><b><a href="/enwiki/wiki/Next-fit-decreasing" class="mw-redirect" title="Next-fit-decreasing">Next-fit-decreasing</a> (NFD)</b> orders the items by descending size, then calls <a href="/enwiki/wiki/Next-fit_bin_packing" title="Next-fit bin packing">Next-Fit</a>. Its approximate ratio is slightly less than 1.7 in the worst case.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24">[24]</a></sup> It has also been analyzed probabilistically.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25">[25]</a></sup> Next-Fit packs a list and its inverse into the same number of bins. Therefore, Next-Fit-Increasing has the same performance as Next-Fit-Decreasing.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26">[26]</a></sup></li>
<li><b><a href="/enwiki/wiki/Modified_first-fit-decreasing" class="mw-redirect" title="Modified first-fit-decreasing">Modified first-fit-decreasing</a> (MFFD)<sup id="cite_ref-JohnsonGarey19852_27-0" class="reference"><a href="#cite_note-JohnsonGarey19852-27">[27]</a></sup></b>, improves on FFD for items larger than half a bin by classifying items by size into four size classes large, medium, small, and tiny, corresponding to items with size > 1/2 bin, > 1/3 bin, > 1/6 bin, and smaller items respectively. Its approximation guarantee is <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle MFFD(I)\leq {\frac {71}{60}}\mathrm {OPT} (I)+1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>M</mi>
<mi>F</mi>
<mi>F</mi>
<mi>D</mi>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>71</mn>
<mn>60</mn>
</mfrac>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle MFFD(I)\leq {\frac {71}{60}}\mathrm {OPT} (I)+1}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/b31208498d155948a1f8debae238a843bd3ae568" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:29.142ex; height:5.176ex;" alt="{\displaystyle MFFD(I)\leq {\frac {71}{60}}\mathrm {OPT} (I)+1}"></span>.<sup id="cite_ref-YueZhang19952_28-0" class="reference"><a href="#cite_note-YueZhang19952-28">[28]</a></sup></li></ul>
<p>Fernandez de la Vega and Lueker<sup id="cite_ref-29" class="reference"><a href="#cite_note-29">[29]</a></sup> presented a <a href="/enwiki/wiki/Polynomial-time_approximation_scheme" title="Polynomial-time approximation scheme">PTAS</a> for bin packing. For every <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \varepsilon >0}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>ε<!-- ε --></mi>
<mo>></mo>
<mn>0</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \varepsilon >0}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/e04ec3670b50384a3ce48aca42e7cc5131a06b12" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:5.344ex; height:2.176ex;" alt="{\displaystyle \varepsilon >0}"></span>, their algorithm finds a solution with size at most <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle (1+\varepsilon )\mathrm {OPT} +1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>+</mo>
<mi>ε<!-- ε --></mi>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo>+</mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle (1+\varepsilon )\mathrm {OPT} +1}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/525b44e0b26133bec69d73057f554d3d7a073de6" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:15.968ex; height:2.843ex;" alt="{\displaystyle (1+\varepsilon )\mathrm {OPT} +1}"></span> and runs in time <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(n\log(1/\varepsilon ))+{\mathcal {O}}_{\varepsilon }(1)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mi>ε<!-- ε --></mi>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
<mo>+</mo>
<msub>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>ε<!-- ε --></mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(n\log(1/\varepsilon ))+{\mathcal {O}}_{\varepsilon }(1)}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/0d16b4a89752bb06b099a83f997bf062b769a607" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:22.291ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(n\log(1/\varepsilon ))+{\mathcal {O}}_{\varepsilon }(1)}"></span>, where <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}_{\varepsilon }(1)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>ε<!-- ε --></mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}_{\varepsilon }(1)}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/8828a0a808e7eeeaa66f7fa2278cdd41aafa05ca" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:5.82ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}_{\varepsilon }(1)}"></span> denotes a function only dependent on <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 1/\varepsilon }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mn>1</mn>
<mrow class="MJX-TeXAtom-ORD">
<mo>/</mo>
</mrow>
<mi>ε<!-- ε --></mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle 1/\varepsilon }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/c8a61384fb438a8f4019445c369caa1e9ae12e0f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:3.408ex; height:2.843ex;" alt="{\displaystyle 1/\varepsilon }"></span>. For this algorithm, they invented the method of <i>adaptive input rounding</i>: the input numbers are grouped and rounded up to the value of the maximum in each group. This yields an instance with a small number of different sizes, which can be solved exactly using the <a href="/enwiki/wiki/Configuration_linear_program" title="Configuration linear program">configuration linear program</a>.<sup id="cite_ref-30" class="reference"><a href="#cite_note-30">[30]</a></sup>
</p>
<h3><span class="mw-headline" id="Additive_approximation">Additive approximation</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=11" title="Edit section: Additive approximation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3>
<p>The <a href="/enwiki/wiki/Karmarkar-Karp_bin_packing_algorithms" class="mw-redirect" title="Karmarkar-Karp bin packing algorithms">Karmarkar-Karp bin packing algorithm</a> finds a solution with size at most <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {OPT} +{\mathcal {O}}(\log ^{2}(\mathrm {OPT} ))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<msup>
<mi>log</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>⁡<!-- --></mo>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {OPT} +{\mathcal {O}}(\log ^{2}(\mathrm {OPT} ))}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/853b7cd2e76f1d30c8062a5b7c9f2118c0c5b82f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:22.473ex; height:3.176ex;" alt="{\displaystyle \mathrm {OPT} +{\mathcal {O}}(\log ^{2}(\mathrm {OPT} ))}"></span>, and runs in time polynomial in <span class="texhtml mvar" style="font-style:italic;">n</span> (the polynomial has a high degree, at least 8).
</p><p>Rothvoss<sup id="cite_ref-:2_31-0" class="reference"><a href="#cite_note-:2-31">[31]</a></sup> presented an algorithm that generates a solution with at most <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {OPT} +{\mathcal {O}}(\log(\mathrm {OPT} )\cdot \log \log(\mathrm {OPT} ))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">)</mo>
<mo>⋅<!-- ⋅ --></mo>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {OPT} +{\mathcal {O}}(\log(\mathrm {OPT} )\cdot \log \log(\mathrm {OPT} ))}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/95fa933e590ace509412b6bfe79ec06537a2457a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:36.307ex; height:2.843ex;" alt="{\displaystyle \mathrm {OPT} +{\mathcal {O}}(\log(\mathrm {OPT} )\cdot \log \log(\mathrm {OPT} ))}"></span> bins.
</p><p>Hoberg and Rothvoss<sup id="cite_ref-:3_32-0" class="reference"><a href="#cite_note-:3-32">[32]</a></sup> improved this algorithm to generate a solution with at most <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {OPT} +{\mathcal {O}}(\log(\mathrm {OPT} ))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mo stretchy="false">(</mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {OPT} +{\mathcal {O}}(\log(\mathrm {OPT} ))}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/48811762ce332e85fb8bac421f2a054db5c18b31" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:21.419ex; height:2.843ex;" alt="{\displaystyle \mathrm {OPT} +{\mathcal {O}}(\log(\mathrm {OPT} ))}"></span> bins. The algorithm is randomized, and its running-time is polynomial in <span class="texhtml mvar" style="font-style:italic;">n</span>.
</p>
<h3><span class="mw-headline" id="Comparison_table_2">Comparison table</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=12" title="Edit section: Comparison table"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3>
<table class="wikitable">
<tbody><tr>
<th>Algorithm
</th>
<th>Approximation guarantee
</th>
<th>Worst case instance
</th></tr>
<tr>
<td>First-fit-decreasing (FFD)
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {FFD} (I)\leq {\frac {11}{9}}\mathrm {OPT} (I)+{\frac {6}{9}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">F</mi>
<mi mathvariant="normal">F</mi>
<mi mathvariant="normal">D</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>11</mn>
<mn>9</mn>
</mfrac>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>6</mn>
<mn>9</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {FFD} (I)\leq {\frac {11}{9}}\mathrm {OPT} (I)+{\frac {6}{9}}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/a72209f3b12910b67469753bcf1b6f07da0c4c14" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:26.941ex; height:5.176ex;" alt="{\displaystyle \mathrm {FFD} (I)\leq {\frac {11}{9}}\mathrm {OPT} (I)+{\frac {6}{9}}}"></span><sup id="cite_ref-Dosa072_23-1" class="reference"><a href="#cite_note-Dosa072-23">[23]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {FFD} (I)={\frac {11}{9}}\mathrm {OPT} (I)+{\frac {6}{9}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">F</mi>
<mi mathvariant="normal">F</mi>
<mi mathvariant="normal">D</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>11</mn>
<mn>9</mn>
</mfrac>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>6</mn>
<mn>9</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {FFD} (I)={\frac {11}{9}}\mathrm {OPT} (I)+{\frac {6}{9}}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/59d039c3bb13a00cf013d2db854e8fe04c1b7299" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:26.941ex; height:5.176ex;" alt="{\displaystyle \mathrm {FFD} (I)={\frac {11}{9}}\mathrm {OPT} (I)+{\frac {6}{9}}}"></span><sup id="cite_ref-Dosa072_23-2" class="reference"><a href="#cite_note-Dosa072-23">[23]</a></sup>
</td></tr>
<tr>
<td>Modified-first-fit-decreasing (MFFD)
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {MFFD} (I)\leq {\frac {71}{60}}\mathrm {OPT} (I)+1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">M</mi>
<mi mathvariant="normal">F</mi>
<mi mathvariant="normal">F</mi>
<mi mathvariant="normal">D</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>71</mn>
<mn>60</mn>
</mfrac>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {MFFD} (I)\leq {\frac {71}{60}}\mathrm {OPT} (I)+1}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/0a7a50791577f358c5246deaa0847675b7e99efe" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:28.236ex; height:5.176ex;" alt="{\displaystyle \mathrm {MFFD} (I)\leq {\frac {71}{60}}\mathrm {OPT} (I)+1}"></span><sup id="cite_ref-YueZhang19952_28-1" class="reference"><a href="#cite_note-YueZhang19952-28">[28]</a></sup>
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle R_{\mathrm {MFFD} }^{\infty }\geq {\frac {71}{60}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msubsup>
<mi>R</mi>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">M</mi>
<mi mathvariant="normal">F</mi>
<mi mathvariant="normal">F</mi>
<mi mathvariant="normal">D</mi>
</mrow>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">∞<!-- ∞ --></mi>
</mrow>
</msubsup>
<mo>≥<!-- ≥ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>71</mn>
<mn>60</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle R_{\mathrm {MFFD} }^{\infty }\geq {\frac {71}{60}}}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/ab81e1a048fd60b7aa8b1a9091f88c36fa00bd7f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:13.165ex; height:5.176ex;" alt="{\displaystyle R_{\mathrm {MFFD} }^{\infty }\geq {\frac {71}{60}}}"></span><sup id="cite_ref-JohnsonGarey19852_27-1" class="reference"><a href="#cite_note-JohnsonGarey19852-27">[27]</a></sup>
</td></tr>
<tr>
<td>Karmarkar and Karp
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {KK} (I)\leq \mathrm {OPT} (I)+O(\log ^{2}{\mathrm {OPT} (I)})}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">K</mi>
<mi mathvariant="normal">K</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>O</mi>
<mo stretchy="false">(</mo>
<msup>
<mi>log</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo>⁡<!-- --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
</mrow>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {KK} (I)\leq \mathrm {OPT} (I)+O(\log ^{2}{\mathrm {OPT} (I)})}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/4f3d05d7f3d5f262d22996cee23f5d40e5f60d6f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:36.632ex; height:3.176ex;" alt="{\displaystyle \mathrm {KK} (I)\leq \mathrm {OPT} (I)+O(\log ^{2}{\mathrm {OPT} (I)})}"></span><sup id="cite_ref-:1_33-0" class="reference"><a href="#cite_note-:1-33">[33]</a></sup>
</td>
<td>
</td></tr>
<tr>
<td>Rothvoss
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {HB} (I)\leq \mathrm {OPT} (I)+O(\log {\mathrm {OPT} (I)}\log \log {\mathrm {OPT} (I)})}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">H</mi>
<mi mathvariant="normal">B</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>O</mi>
<mo stretchy="false">(</mo>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
</mrow>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
</mrow>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {HB} (I)\leq \mathrm {OPT} (I)+O(\log {\mathrm {OPT} (I)}\log \log {\mathrm {OPT} (I)})}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/f59fc88fb4c98e3c63c71bea982fb52dac404a9b" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:50.505ex; height:2.843ex;" alt="{\displaystyle \mathrm {HB} (I)\leq \mathrm {OPT} (I)+O(\log {\mathrm {OPT} (I)}\log \log {\mathrm {OPT} (I)})}"></span><sup id="cite_ref-:2_31-1" class="reference"><a href="#cite_note-:2-31">[31]</a></sup>
</td>
<td>
</td></tr>
<tr>
<td>Hoberg and Rothvoss
</td>
<td><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {HB} (I)\leq \mathrm {OPT} (I)+O(\log {\mathrm {OPT} (I)})}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">H</mi>
<mi mathvariant="normal">B</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>≤<!-- ≤ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>O</mi>
<mo stretchy="false">(</mo>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
<mo stretchy="false">(</mo>
<mi>I</mi>
<mo stretchy="false">)</mo>
</mrow>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathrm {HB} (I)\leq \mathrm {OPT} (I)+O(\log {\mathrm {OPT} (I)})}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/6294f2068026ca1a43169f6654416688e3b210ec" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:35.35ex; height:2.843ex;" alt="{\displaystyle \mathrm {HB} (I)\leq \mathrm {OPT} (I)+O(\log {\mathrm {OPT} (I)})}"></span><sup id="cite_ref-:3_32-1" class="reference"><a href="#cite_note-:3-32">[32]</a></sup>
</td>
<td>
</td></tr></tbody></table>
<h3><span class="mw-headline" id="Exact_algorithms">Exact algorithms</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=13" title="Edit section: Exact algorithms"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3>
<p>Martello and Toth<sup id="cite_ref-34" class="reference"><a href="#cite_note-34">[34]</a></sup> developed an exact algorithm for the 1-dimensional bin-packing problem, called MTP. A faster alternative is the Bin Completion algorithm proposed by Korf in 2002<sup id="cite_ref-35" class="reference"><a href="#cite_note-35">[35]</a></sup> and later improved.<sup id="cite_ref-Korf2003Korf2_36-0" class="reference"><a href="#cite_note-Korf2003Korf2-36">[36]</a></sup>
</p><p>A further improvement was presented by Schreiber and Korf in 2013.<sup id="cite_ref-37" class="reference"><a href="#cite_note-37">[37]</a></sup> The new Improved Bin Completion algorithm is shown to be up to five orders of magnitude faster than Bin Completion on non-trivial problems with 100 items, and outperforms the BCP (branch-and-cut-and-price) algorithm by Belov and Scheithauer on problems that have fewer than 20 bins as the optimal solution. Which algorithm performs best depends on problem properties like the number of items, the optimal number of bins, unused space in the optimal solution and value precision.
</p>
<h3><span class="mw-headline" id="Small_number_of_different_sizes">Small number of different sizes</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=14" title="Edit section: Small number of different sizes"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3>
<p>A special case of bin packing is when there is a small number <i>d</i> of different item sizes. There can be many different items of each size. This case is also called <i><a href="/enwiki/wiki/High-multiplicity_bin_packing" title="High-multiplicity bin packing">high-multiplicity bin packing</a></i>, and It admits more efficient algorithms than the general problem.
</p>
<h2><span class="mw-headline" id="Bin-packing_with_fragmentation">Bin-packing with fragmentation</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=15" title="Edit section: Bin-packing with fragmentation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2>
<p><b>Bin-packing with fragmentation</b> or <b>fragmentable object bin-packing</b> is a variant of the bin packing problem in which it is allowed to break items into parts and put each part separately on a different bin. Breaking items into parts may allow for improving the overall performance, for example, minimizing the number of total bin. Moreover, the computational problem of finding an optimal schedule may become easier, as some of the optimization variables become continuous. On the other hand, breaking items apart might be costly. The problem was first introduced by Mandal, Chakrabary and Ghose.<sup id="cite_ref-:03_38-0" class="reference"><a href="#cite_note-:03-38">[38]</a></sup>
</p>
<h3><span class="mw-headline" id="Variants">Variants</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=16" title="Edit section: Variants"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3>
<p>The problem has two main variants.
</p>
<ol><li>In the first variant, called <b>bin-packing with size-increasing fragmentation</b> (<b>BP-SIF</b>), each item may be fragmented; overhead units are added to the size of every fragment.</li>
<li>In the second variant, called <b>bin-packing with size-preserving fragmentation</b> (<b>BP-SPF</b>) each item has a size and a cost; fragmenting an item increases its cost but does not change its size.</li></ol>
<h3><span class="mw-headline" id="Computational_complexity">Computational complexity</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=17" title="Edit section: Computational complexity"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3>
<p>Mandal, Chakrabary and Ghose<sup id="cite_ref-:03_38-1" class="reference"><a href="#cite_note-:03-38">[38]</a></sup> proved that BP-SPF is <a href="/enwiki/wiki/NP-hardness" title="NP-hardness">NP-hard</a>.
</p><p>Menakerman and Rom<sup id="cite_ref-39" class="reference"><a href="#cite_note-39">[39]</a></sup> showed that BP-SIF and BP-SPF are both <a href="/enwiki/wiki/Strongly_NP-hard" class="mw-redirect" title="Strongly NP-hard">strongly NP-hard</a>. Despite the hardness, they present several algorithms and investigate their performance. Their algorithms use classic algorithms for bin-packing, like <a href="/enwiki/wiki/Next-fit_bin_packing" title="Next-fit bin packing">next-fit</a> and <a href="/enwiki/wiki/First-fit-decreasing_bin_packing" title="First-fit-decreasing bin packing">first-fit decreasing</a>, as a basis for their algorithms.
</p><p>Bertazzi, Golden and Wang<sup id="cite_ref-40" class="reference"><a href="#cite_note-40">[40]</a></sup> introduced a variant of BP-SIF with <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 1-x}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mn>1</mn>
<mo>−<!-- − --></mo>
<mi>x</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle 1-x}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/0ba56b3b25228e75d307b633671555b5f2777468" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:5.333ex; height:2.343ex;" alt="{\displaystyle 1-x}"></span> split rule: an item is allowed to be split in only one way according to its size. It is useful for the <a href="/enwiki/wiki/Vehicle_routing_problem" title="Vehicle routing problem">vehicle routing problem</a> for example. In their paper, they provide the worst-case performance bound of the variant.
</p><p>Shachnai, Tamir and Yehezkeli<sup id="cite_ref-41" class="reference"><a href="#cite_note-41">[41]</a></sup> developed approximation schemes for BP-SIF and BP-SPF; a dual <a href="/enwiki/wiki/Polynomial-time_approximation_scheme" title="Polynomial-time approximation scheme">PTAS</a> (a PTAS for the dual version of the problem), an asymptotic PTAS called APTAS, and a dual asymptotic <a href="/enwiki/wiki/FPTAS" class="mw-redirect" title="FPTAS">FPTAS</a> called AFPTAS for both versions.
</p><p>Ekici<sup id="cite_ref-42" class="reference"><a href="#cite_note-42">[42]</a></sup> introduced a variant of BP-SPF in which some items are in conflict, and it is forbidden to pack fragments of conflicted items into the same bin. They proved that this variant, too, is NP-hard.
</p><p>Cassazza and Ceselli<sup id="cite_ref-43" class="reference"><a href="#cite_note-43">[43]</a></sup> introduced a variant with no cost and no overhead, and the number of bins is fixed. However, the number of fragmentations should be minimized. They present mathematical programming algorithms for both exact and approximate solutions.
</p>
<h3><span class="mw-headline" id="Related_problems">Related problems</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=18" title="Edit section: Related problems"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h3>
<p>The problem of <b>fractional <a href="/enwiki/wiki/Knapsack_problem" title="Knapsack problem">knapsack</a> with penalties</b> was introduced by Malaguti, Monaci, Paronuzzi and Pferschy.<sup id="cite_ref-44" class="reference"><a href="#cite_note-44">[44]</a></sup> They developed an FPTAS and a <a href="/enwiki/wiki/Dynamic_programming" title="Dynamic programming">dynamic program</a> for the problem, and they showed an extensive computational study comparing the performance of their models. See also: <a href="/enwiki/wiki/Fractional_job_scheduling" title="Fractional job scheduling">Fractional job scheduling</a>.
</p>
<h2><span class="mw-headline" id="Performance_with_divisible_item_sizes">Performance with divisible item sizes</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=19" title="Edit section: Performance with divisible item sizes"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2>
<p>An important special case of bin packing is that the item sizes form a <i>divisible sequence</i> (also called <i>factored</i>). A special case of divisible item sizes occurs in memory allocation in computer systems, where the item sizes are all powers of 2. If the item sizes are divisible, then some of the heuristic algorithms for bin packing find an optimal solution.<sup id="cite_ref-:022_45-0" class="reference"><a href="#cite_note-:022-45">[45]</a></sup>
</p>
<h2><span class="mw-headline" id="Cardinality_constraints_on_the_bins">Cardinality constraints on the bins</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=20" title="Edit section: Cardinality constraints on the bins"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2>
<p>There is a variant of bin packing in which there are cardinality constraints on the bins: each bin can contain at most <i>k</i> items, for some fixed integer <i>k</i>.
</p>
<ul><li>Krause, Shen and Schwetman<sup id="cite_ref-46" class="reference"><a href="#cite_note-46">[46]</a></sup> introduce this problem as a variant of <a href="/enwiki/wiki/Optimal_job_scheduling" title="Optimal job scheduling">optimal job scheduling</a>: a computer has some <i>k</i> processors. There are some <i>n</i> jobs that take unit time (1), but have different memory requirements. Each time-unit is considered a single bin. The goal is to use as few bins (=time units) as possible, while ensuring that in each bin, at most <i>k</i> jobs run. They present several heuristic algorithms that find a solution with at most <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 2\mathrm {OPT} }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mn>2</mn>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle 2\mathrm {OPT} }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/dbdfc9ff2e7031db042f35eb6024f6dd047b54e1" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:6.232ex; height:2.176ex;" alt="{\displaystyle 2\mathrm {OPT} }"></span> bins.</li>
<li>Kellerer and Pferschy<sup id="cite_ref-47" class="reference"><a href="#cite_note-47">[47]</a></sup> present an algorithm with run-time <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n^{2}\log {n})}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>O</mi>
<mo stretchy="false">(</mo>
<msup>
<mi>n</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mi>log</mi>
<mo>⁡<!-- --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>n</mi>
</mrow>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle O(n^{2}\log {n})}</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/f68711304358e025537124f222f6558f01f7e7a1" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:11.172ex; height:3.176ex;" alt="{\displaystyle O(n^{2}\log {n})}"></span>, that finds a solution with at most <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \left\lceil {\frac {3}{2}}\mathrm {OPT} \right\rceil }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow>
<mo>⌈</mo>
<mrow>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>3</mn>
<mn>2</mn>
</mfrac>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">O</mi>
<mi mathvariant="normal">P</mi>
<mi mathvariant="normal">T</mi>
</mrow>
</mrow>
<mo>⌉</mo>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \left\lceil {\frac {3}{2}}\mathrm {OPT} \right\rceil }</annotation>
</semantics>
</math></span><img src="https://wikimedia.org/enwiki/api/rest_v1/media/math/render/svg/771e3056587e90e6a2c7fe4fd3c6ece7d46ebeb8" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:9.778ex; height:6.176ex;" alt="{\displaystyle \left\lceil {\frac {3}{2}}\mathrm {OPT} \right\rceil }"></span> bins. Their algorithm performs a <a href="/enwiki/wiki/Binary_search" title="Binary search">binary search</a> for OPT. For every searched value <i>m</i>, it tries to pack the items into 3<i>m</i>/2 bins.</li></ul>
<h2><span class="mw-headline" id="Non-additive_functions">Non-additive functions</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=21" title="Edit section: Non-additive functions"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2>
<p>There are various ways to extend the bin-packing model to more general cost and load functions:
</p>
<ul><li>Anily, Bramel and Simchi-Levi<sup id="cite_ref-pubsonline.informs.org_48-0" class="reference"><a href="#cite_note-pubsonline.informs.org-48">[48]</a></sup> study a setting where the cost of a bin is a <a href="/enwiki/wiki/Concave_function" title="Concave function">concave function</a> of the number of items in the bin. The objective is to minimize the total <i>cost</i> rather than the number of bins. They show that <a href="/enwiki/wiki/Next-fit-increasing_bin_packing" class="mw-redirect" title="Next-fit-increasing bin packing">next-fit-increasing bin packing</a> attains an absolute worst-case approximation ratio of at most 7/4, and an asymptotic worst-case ratio of 1.691 for any concave and monotone cost function.</li>
<li>Cohen, Keller, Mirrokni and Zadimoghaddam<sup id="cite_ref-49" class="reference"><a href="#cite_note-49">[49]</a></sup> study a setting where the size of the items is not known in advance, but it is a <a href="/enwiki/wiki/Random_variable" title="Random variable">random variable</a>. This is particularly common in <a href="/enwiki/wiki/Cloud_computing" title="Cloud computing">cloud computing</a> environments. While there is an upper bound on the amount of resources a certain user needs, most users use much less than the capacity. Therefore, the cloud manager may gain a lot by slight <a href="/enwiki/wiki/Memory_overcommitment" title="Memory overcommitment">overcommitment</a>. This induces a variant of bin packing with <a href="/enwiki/w/index.php?title=Chance_constraints&action=edit&redlink=1" class="new" title="Chance constraints (page does not exist)">chance constraints</a>: the probability that the sum of sizes in each bin is at most <i>B</i> should be at least <i>p</i>, where <i>p</i> is a fixed constant (standard bin packing corresponds to <i>p</i>=1). They show that, under mild assumptions, this problem is equivalent to a <i>submodular bin packing</i> problem, in which the "load" in each bin is not equal to the sum of items, but to a certain <a href="/enwiki/wiki/Submodular_set_function" title="Submodular set function">submodular function</a> of it.</li></ul>
<h2><span class="mw-headline" id="Related_problems_2">Related problems</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=22" title="Edit section: Related problems"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2>
<p>In the bin packing problem, the <i>size</i> of the bins is fixed and their <i>number</i> can be enlarged (but should be as small as possible).
</p><p>In contrast, in the <b><a href="/enwiki/wiki/Multiway_number_partitioning" title="Multiway number partitioning">multiway number partitioning</a></b> problem, the <i>number</i> of bins is fixed and their <i>size</i> can be enlarged. The objective is to find a partition in which the bin sizes are as nearly equal is possible (in the variant called <a href="/enwiki/wiki/Multiprocessor_scheduling" class="mw-redirect" title="Multiprocessor scheduling"><b>multiprocessor scheduling</b> problem</a> or <b>minimum <a href="/enwiki/wiki/Makespan" title="Makespan">makespan</a></b> problem, the goal is specifically to minimize the size of the largest bin).
</p><p>In the <b>inverse bin packing</b> problem,<sup id="cite_ref-50" class="reference"><a href="#cite_note-50">[50]</a></sup> both the number of bins and their sizes are fixed, but the item sizes can be changed. The objective is to achieve the minimum perturbation to the item size vector so that all the items can be packed into the prescribed number of bins.
</p><p>In the <b>maximum resource bin packing</b> problem,<sup id="cite_ref-:02_51-0" class="reference"><a href="#cite_note-:02-51">[51]</a></sup> the goal is to <i>maximize</i> the number of bins used, such that, for some ordering of the bins, no item in a later bin fits in an earlier bin. In a dual problem, the number of bins is fixed, and the goal is to minimize the total number or the total size of items placed into the bins, such that no remaining item fits into an unfilled bin.
</p><p>In the <b><a href="/enwiki/wiki/Bin_covering_problem" title="Bin covering problem">bin covering problem</a></b>, the bin size is bounded <i>from below</i>: the goal is to <i>maximize</i> the number of bins used such that the total size in each bin is at least a given threshold.
</p><p>In the <b>fair indivisible chore allocation</b> problem (a variant of <b><a href="/enwiki/wiki/Fair_item_allocation" title="Fair item allocation">fair item allocation</a></b>), the items represent chores, and there are different people each of whom attributes a different difficulty-value to each chore. The goal is to allocate to each person a set of chores with an upper bound on its total difficulty-value (thus, each person corresponds to a bin). Many techniques from bin packing are used in this problem too.<sup id="cite_ref-52" class="reference"><a href="#cite_note-52">[52]</a></sup>
</p><p>In the <b><a href="/enwiki/wiki/Guillotine_cutting" title="Guillotine cutting">guillotine cutting</a></b> problem, both the items and the "bins" are two-dimensional rectangles rather than one-dimensional numbers, and the items have to be cut from the bin using end-to-end cuts.
</p><p>In the <b>selfish bin packing</b> problem, each item is a player who wants to minimize its cost.<sup id="cite_ref-53" class="reference"><a href="#cite_note-53">[53]</a></sup>
</p><p>There is also a variant of bin packing in which the cost that should be minimized is not the number of bins, but rather a certain <a href="/enwiki/wiki/Concave_function" title="Concave function">concave function</a> of the number of items in each bin.<sup id="cite_ref-pubsonline.informs.org_48-1" class="reference"><a href="#cite_note-pubsonline.informs.org-48">[48]</a></sup>
</p><p>Other variants are <b>two-dimensional bin packing,</b><sup id="cite_ref-54" class="reference"><a href="#cite_note-54">[54]</a></sup> <b>three-dimensional bin packing</b>,<sup id="cite_ref-55" class="reference"><a href="#cite_note-55">[55]</a></sup> <b>bin packing with delivery</b>,<sup id="cite_ref-56" class="reference"><a href="#cite_note-56">[56]</a></sup>
</p>
<h2><span class="mw-headline" id="Resources">Resources</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=23" title="Edit section: Resources"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2>
<ul><li><a rel="nofollow" class="external text" href="http://or.dei.unibo.it/library/bpplib">BPPLIB</a> - a library of surveys, codes, benchmarks, generators, solvers, and bibliography.</li></ul>
<h2><span class="mw-headline" id="References">References</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/enwiki/w/index.php?title=Bin_packing_problem&action=edit&section=24" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></h2>
<style data-mw-deduplicate="TemplateStyles:r1217336898">.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1215172403">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("/upwiki/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a{background-size:contain}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("/upwiki/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a{background-size:contain}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("/upwiki/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a{background-size:contain}.mw-parser-output .cs1-ws-icon a{background:url("/upwiki/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#2C882D;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911F}html.skin-theme-clientpref-night .mw-parser-output .cs1-visible-error,html.skin-theme-clientpref-night .mw-parser-output .cs1-hidden-error{color:#f8a397}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-visible-error,html.skin-theme-clientpref-os .mw-parser-output .cs1-hidden-error{color:#f8a397}html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911F}}</style><cite id="CITEREFMartelloToth1990" class="citation cs2">Martello, Silvano; Toth, Paolo (1990), <a rel="nofollow" class="external text" href="http://www.or.deis.unibo.it/kp/Chapter8.pdf">"Bin-packing problem"</a> <span class="cs1-format">(PDF)</span>, <span class="id-lock-registration" title="Free registration required"><a rel="nofollow" class="external text" href="https://archive.org/details/knapsackproblems0000mart"><i>Knapsack Problems: Algorithms and Computer Implementations</i></a></span>, Chichester, UK: John Wiley and Sons, <a href="/enwiki/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/enwiki/wiki/Special:BookSources/0471924202" title="Special:BookSources/0471924202"><bdi>0471924202</bdi></a></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Bin-packing+problem&rft.btitle=Knapsack+Problems%3A+Algorithms+and+Computer+Implementations&rft.place=Chichester%2C+UK&rft.pub=John+Wiley+and+Sons&rft.date=1990&rft.isbn=0471924202&rft.aulast=Martello&rft.aufirst=Silvano&rft.au=Toth%2C+Paolo&rft_id=http%3A%2F%2Fwww.or.deis.unibo.it%2Fkp%2FChapter8.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFKorteVygen2006" class="citation book cs1">Korte, Bernhard; Vygen, Jens (2006). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=UnYwgPltSjwC&q=Bin-Packing&pg=PA449">"Bin-Packing"</a>. <i>Combinatorial Optimization: Theory and Algorithms</i>. Algorithms and Combinatorics 21. Springer. pp. 426–441. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F3-540-29297-7_18">10.1007/3-540-29297-7_18</a>. <a href="/enwiki/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/enwiki/wiki/Special:BookSources/978-3-540-25684-7" title="Special:BookSources/978-3-540-25684-7"><bdi>978-3-540-25684-7</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Bin-Packing&rft.btitle=Combinatorial+Optimization%3A+Theory+and+Algorithms&rft.series=Algorithms+and+Combinatorics+21&rft.pages=426-441&rft.pub=Springer&rft.date=2006&rft_id=info%3Adoi%2F10.1007%2F3-540-29297-7_18&rft.isbn=978-3-540-25684-7&rft.aulast=Korte&rft.aufirst=Bernhard&rft.au=Vygen%2C+Jens&rft_id=https%3A%2F%2Fbooks.google.com%2Fbooks%3Fid%3DUnYwgPltSjwC%26q%3DBin-Packing%26pg%3DPA449&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFBarrington2006" class="citation web cs1">Barrington, David Mix (2006). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20190216134619/https://people.cs.umass.edu/~barring/cs311/disc/11.html">"Bin Packing"</a>. Archived from <a rel="nofollow" class="external text" href="https://people.cs.umass.edu/~barring/cs311/disc/11.html">the original</a> on 2019-02-16<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-02-27</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Bin+Packing&rft.date=2006&rft.aulast=Barrington&rft.aufirst=David+Mix&rft_id=https%3A%2F%2Fpeople.cs.umass.edu%2F~barring%2Fcs311%2Fdisc%2F11.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-:0-4"><span class="mw-cite-backlink">^ <a href="#cite_ref-:0_4-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:0_4-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-:0_4-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFCoffman_Jr.CsirikGalambosMartello2013" class="citation cs2">Coffman Jr., Edward G.; Csirik, János; Galambos, Gábor; Martello, Silvano; Vigo, Daniele (2013), Pardalos, Panos M.; Du, Ding-Zhu; Graham, Ronald L. (eds.), <a rel="nofollow" class="external text" href="https://doi.org/10.1007/978-1-4419-7997-1_35">"Bin Packing Approximation Algorithms: Survey and Classification"</a>, <i>Handbook of Combinatorial Optimization</i>, New York, NY: Springer, pp. 455–531, <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F978-1-4419-7997-1_35">10.1007/978-1-4419-7997-1_35</a>, <a href="/enwiki/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/enwiki/wiki/Special:BookSources/978-1-4419-7997-1" title="Special:BookSources/978-1-4419-7997-1"><bdi>978-1-4419-7997-1</bdi></a><span class="reference-accessdate">, retrieved <span class="nowrap">2021-08-08</span></span></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Handbook+of+Combinatorial+Optimization&rft.atitle=Bin+Packing+Approximation+Algorithms%3A+Survey+and+Classification&rft.pages=455-531&rft.date=2013&rft_id=info%3Adoi%2F10.1007%2F978-1-4419-7997-1_35&rft.isbn=978-1-4419-7997-1&rft.aulast=Coffman+Jr.&rft.aufirst=Edward+G.&rft.au=Csirik%2C+J%C3%A1nos&rft.au=Galambos%2C+G%C3%A1bor&rft.au=Martello%2C+Silvano&rft.au=Vigo%2C+Daniele&rft_id=https%3A%2F%2Fdoi.org%2F10.1007%2F978-1-4419-7997-1_35&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://sha256.net/dhcpv6-pd-first-steps.html#orge8b6244">"DHCPv6-PD - First steps"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">12 June</span> 2024</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=DHCPv6-PD+-+First+steps&rft_id=https%3A%2F%2Fsha256.net%2Fdhcpv6-pd-first-steps.html%23orge8b6244&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFLewis2009" class="citation cs2">Lewis, R. (2009), <a rel="nofollow" class="external text" href="http://orca.cf.ac.uk/11334/1/Lewis%2C_R_General_Purpose_Hill_Climbing.pdf">"A General-Purpose Hill-Climbing Method for Order Independent Minimum Grouping Problems: A Case Study in Graph Colouring and Bin Packing"</a> <span class="cs1-format">(PDF)</span>, <i>Computers and Operations Research</i>, <b>36</b> (7): 2295–2310, <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.cor.2008.09.004">10.1016/j.cor.2008.09.004</a>, <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:1577334">1577334</a></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Computers+and+Operations+Research&rft.atitle=A+General-Purpose+Hill-Climbing+Method+for+Order+Independent+Minimum+Grouping+Problems%3A+A+Case+Study+in+Graph+Colouring+and+Bin+Packing&rft.volume=36&rft.issue=7&rft.pages=2295-2310&rft.date=2009&rft_id=info%3Adoi%2F10.1016%2Fj.cor.2008.09.004&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A1577334%23id-name%3DS2CID&rft.aulast=Lewis&rft.aufirst=R.&rft_id=http%3A%2F%2Forca.cf.ac.uk%2F11334%2F1%2FLewis%252C_R_General_Purpose_Hill_Climbing.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFSindelarSitaramanShenoy2011" class="citation cs2">Sindelar, Michael; <a href="/enwiki/wiki/Ramesh_Sitaraman" title="Ramesh Sitaraman">Sitaraman, Ramesh</a>; Shenoy, Prashant (2011), <a rel="nofollow" class="external text" href="https://storage.googleapis.com/pub-tools-public-publication-data/pdf/37147.pdf">"Sharing-Aware Algorithms for Virtual Machine Colocation"</a> <span class="cs1-format">(PDF)</span>, <i>Proceedings of 23rd ACM Symposium on Parallelism in Algorithms and Architectures (SPAA), San Jose, CA, June 2011</i>: 367–378</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Proceedings+of+23rd+ACM+Symposium+on+Parallelism+in+Algorithms+and+Architectures+%28SPAA%29%2C+San+Jose%2C+CA%2C+June+2011&rft.atitle=Sharing-Aware+Algorithms+for+Virtual+Machine+Colocation&rft.pages=367-378&rft.date=2011&rft.aulast=Sindelar&rft.aufirst=Michael&rft.au=Sitaraman%2C+Ramesh&rft.au=Shenoy%2C+Prashant&rft_id=https%3A%2F%2Fstorage.googleapis.com%2Fpub-tools-public-publication-data%2Fpdf%2F37147.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-GareyJohnson2-8"><span class="mw-cite-backlink">^ <a href="#cite_ref-GareyJohnson2_8-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-GareyJohnson2_8-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-GareyJohnson2_8-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFGareyJohnson1979" class="citation book cs1"><a href="/enwiki/wiki/Michael_R._Garey" class="mw-redirect" title="Michael R. Garey">Garey, M. R.</a>; <a href="/enwiki/wiki/David_S._Johnson" title="David S. Johnson">Johnson, D. S.</a> (1979). <a href="/enwiki/wiki/Victor_Klee" title="Victor Klee">Victor Klee</a> (ed.). <i>Computers and Intractability: A Guide to the Theory of NP-Completeness</i>. A Series of Books in the Mathematical Sciences. San Francisco, Calif.: W. H. Freeman and Co. pp. <a rel="nofollow" class="external text" href="https://archive.org/details/computersintract0000gare/page/">x+338</a>. <a href="/enwiki/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/enwiki/wiki/Special:BookSources/0-7167-1045-5" title="Special:BookSources/0-7167-1045-5"><bdi>0-7167-1045-5</bdi></a>. <a href="/enwiki/wiki/MR_(identifier)" class="mw-redirect" title="MR (identifier)">MR</a> <a rel="nofollow" class="external text" href="https://mathscinet.ams.org/mathscinet-getitem?mr=0519066">0519066</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Computers+and+Intractability%3A+A+Guide+to+the+Theory+of+NP-Completeness&rft.place=San+Francisco%2C+Calif.&rft.series=A+Series+of+Books+in+the+Mathematical+Sciences&rft.pages=x%2B338&rft.pub=W.+H.+Freeman+and+Co.&rft.date=1979&rft.isbn=0-7167-1045-5&rft_id=https%3A%2F%2Fmathscinet.ams.org%2Fmathscinet-getitem%3Fmr%3D519066%23id-name%3DMR&rft.aulast=Garey&rft.aufirst=M.+R.&rft.au=Johnson%2C+D.+S.&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-Martello19902-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-Martello19902_9-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFMartelloToth1990">Martello & Toth 1990</a>, p. 221</span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFVazirani2013" class="citation book cs1">Vazirani, Vijay V. (14 March 2013). <i>Approximation Algorithms</i>. Springer Berlin Heidelberg. p. 74. <a href="/enwiki/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/enwiki/wiki/Special:BookSources/978-3662045657" title="Special:BookSources/978-3662045657"><bdi>978-3662045657</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Approximation+Algorithms&rft.pages=74&rft.pub=Springer+Berlin+Heidelberg&rft.date=2013-03-14&rft.isbn=978-3662045657&rft.aulast=Vazirani&rft.aufirst=Vijay+V.&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-johnson732-11"><span class="mw-cite-backlink">^ <a href="#cite_ref-johnson732_11-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-johnson732_11-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-johnson732_11-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-johnson732_11-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-johnson732_11-4"><sup><i><b>e</b></i></sup></a> <a href="#cite_ref-johnson732_11-5"><sup><i><b>f</b></i></sup></a> <a href="#cite_ref-johnson732_11-6"><sup><i><b>g</b></i></sup></a> <a href="#cite_ref-johnson732_11-7"><sup><i><b>h</b></i></sup></a> <a href="#cite_ref-johnson732_11-8"><sup><i><b>i</b></i></sup></a> <a href="#cite_ref-johnson732_11-9"><sup><i><b>j</b></i></sup></a> <a href="#cite_ref-johnson732_11-10"><sup><i><b>k</b></i></sup></a> <a href="#cite_ref-johnson732_11-11"><sup><i><b>l</b></i></sup></a> <a href="#cite_ref-johnson732_11-12"><sup><i><b>m</b></i></sup></a> <a href="#cite_ref-johnson732_11-13"><sup><i><b>n</b></i></sup></a> <a href="#cite_ref-johnson732_11-14"><sup><i><b>o</b></i></sup></a> <a href="#cite_ref-johnson732_11-15"><sup><i><b>p</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFJohnson1973" class="citation journal cs1">Johnson, David S (1973). <a rel="nofollow" class="external text" href="https://dspace.mit.edu/bitstream/handle/1721.1/57819/17595570-MIT.pdf?sequence=2">"Near-optimal bin packing algorithms"</a> <span class="cs1-format">(PDF)</span>. <i>Massachusetts Institute of Technology</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Massachusetts+Institute+of+Technology&rft.atitle=Near-optimal+bin+packing+algorithms&rft.date=1973&rft.aulast=Johnson&rft.aufirst=David+S&rft_id=https%3A%2F%2Fdspace.mit.edu%2Fbitstream%2Fhandle%2F1721.1%2F57819%2F17595570-MIT.pdf%3Fsequence%3D2&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFGonzalez2018" class="citation book cs1">Gonzalez, Teofilo F. (23 May 2018). <i>Handbook of approximation algorithms and metaheuristics. Volume 2 Contemporary and emerging applications</i>. Taylor & Francis Incorporated. <a href="/enwiki/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/enwiki/wiki/Special:BookSources/9781498770156" title="Special:BookSources/9781498770156"><bdi>9781498770156</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Handbook+of+approximation+algorithms+and+metaheuristics.+Volume+2+Contemporary+and+emerging+applications&rft.pub=Taylor+%26+Francis+Incorporated&rft.date=2018-05-23&rft.isbn=9781498770156&rft.aulast=Gonzalez&rft.aufirst=Teofilo+F.&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-DósaSgall2-13"><span class="mw-cite-backlink">^ <a href="#cite_ref-DósaSgall2_13-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-DósaSgall2_13-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-DósaSgall2_13-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFDósaSgall2013" class="citation journal cs1">Dósa, György; Sgall, Jiri (2013). <a rel="nofollow" class="external text" href="http://drops.dagstuhl.de/opus/volltexte/2013/3963">"First Fit bin packing: A tight analysis"</a>. <i>30th International Symposium on Theoretical Aspects of Computer Science (STACS 2013)</i>. <b>20</b>. Schloss Dagstuhl–Leibniz-Zentrum für Informatik: 538–549. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.4230%2FLIPIcs.STACS.2013.538">10.4230/LIPIcs.STACS.2013.538</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=30th+International+Symposium+on+Theoretical+Aspects+of+Computer+Science+%28STACS+2013%29&rft.atitle=First+Fit+bin+packing%3A+A+tight+analysis&rft.volume=20&rft.pages=538-549&rft.date=2013&rft_id=info%3Adoi%2F10.4230%2FLIPIcs.STACS.2013.538&rft.aulast=D%C3%B3sa&rft.aufirst=Gy%C3%B6rgy&rft.au=Sgall%2C+Jiri&rft_id=http%3A%2F%2Fdrops.dagstuhl.de%2Fopus%2Fvolltexte%2F2013%2F3963&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-DósaSgall142-14"><span class="mw-cite-backlink">^ <a href="#cite_ref-DósaSgall142_14-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-DósaSgall142_14-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-DósaSgall142_14-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFGyörgySgall2014" class="citation book cs1">György, Dósa; Sgall, Jirí (2014). "Optimal Analysis of Best Fit Bin Packing". <i>Automata, Languages, and Programming</i>. Lecture Notes in Computer Science. Vol. 8572. pp. 429–441. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F978-3-662-43948-7_36">10.1007/978-3-662-43948-7_36</a>. <a href="/enwiki/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/enwiki/wiki/Special:BookSources/978-3-662-43947-0" title="Special:BookSources/978-3-662-43947-0"><bdi>978-3-662-43947-0</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Optimal+Analysis+of+Best+Fit+Bin+Packing&rft.btitle=Automata%2C+Languages%2C+and+Programming&rft.series=Lecture+Notes+in+Computer+Science&rft.pages=429-441&rft.date=2014&rft_id=info%3Adoi%2F10.1007%2F978-3-662-43948-7_36&rft.isbn=978-3-662-43947-0&rft.aulast=Gy%C3%B6rgy&rft.aufirst=D%C3%B3sa&rft.au=Sgall%2C+Jir%C3%AD&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span> <span class="cs1-visible-error citation-comment"><code class="cs1-code">{{<a href="/enwiki/wiki/Template:Cite_book" title="Template:Cite book">cite book</a>}}</code>: </span><span class="cs1-visible-error citation-comment"><code class="cs1-code">|journal=</code> ignored (<a href="/enwiki/wiki/Help:CS1_errors#periodical_ignored" title="Help:CS1 errors">help</a>)</span></span>
</li>
<li id="cite_note-Yao19802-15"><span class="mw-cite-backlink">^ <a href="#cite_ref-Yao19802_15-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Yao19802_15-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Yao19802_15-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-Yao19802_15-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-Yao19802_15-4"><sup><i><b>e</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFYao1980" class="citation journal cs1">Yao, Andrew Chi-Chih (April 1980). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F322186.322187">"New Algorithms for Bin Packing"</a>. <i>Journal of the ACM</i>. <b>27</b> (2): 207–227. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F322186.322187">10.1145/322186.322187</a></span>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:7903339">7903339</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+the+ACM&rft.atitle=New+Algorithms+for+Bin+Packing&rft.volume=27&rft.issue=2&rft.pages=207-227&rft.date=1980-04&rft_id=info%3Adoi%2F10.1145%2F322186.322187&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A7903339%23id-name%3DS2CID&rft.aulast=Yao&rft.aufirst=Andrew+Chi-Chih&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F322186.322187&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-LeeLee19852-16"><span class="mw-cite-backlink">^ <a href="#cite_ref-LeeLee19852_16-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-LeeLee19852_16-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-LeeLee19852_16-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-LeeLee19852_16-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-LeeLee19852_16-4"><sup><i><b>e</b></i></sup></a> <a href="#cite_ref-LeeLee19852_16-5"><sup><i><b>f</b></i></sup></a> <a href="#cite_ref-LeeLee19852_16-6"><sup><i><b>g</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFLeeLee1985" class="citation journal cs1">Lee, C. C.; Lee, D. T. (July 1985). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F3828.3833">"A simple online bin-packing algorithm"</a>. <i>Journal of the ACM</i>. <b>32</b> (3): 562–572. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F3828.3833">10.1145/3828.3833</a></span>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:15441740">15441740</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+the+ACM&rft.atitle=A+simple+online+bin-packing+algorithm&rft.volume=32&rft.issue=3&rft.pages=562-572&rft.date=1985-07&rft_id=info%3Adoi%2F10.1145%2F3828.3833&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A15441740%23id-name%3DS2CID&rft.aulast=Lee&rft.aufirst=C.+C.&rft.au=Lee%2C+D.+T.&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F3828.3833&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFDonna_J1979" class="citation journal cs1">Donna J, Brown (1979). <a rel="nofollow" class="external text" href="https://apps.dtic.mil/dtic/tr/fulltext/u2/a085315.pdf">"A Lower Bound for On-Line One-Dimensional Bin Packing Algorithms"</a> <span class="cs1-format">(PDF)</span>. <i>Technical Rept</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20220317212050/https://apps.dtic.mil/dtic/tr/fulltext/u2/a085315.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on March 17, 2022.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Technical+Rept.&rft.atitle=A+Lower+Bound+for+On-Line+One-Dimensional+Bin+Packing+Algorithms.&rft.date=1979&rft.aulast=Donna+J&rft.aufirst=Brown&rft_id=https%3A%2F%2Fapps.dtic.mil%2Fdtic%2Ftr%2Ffulltext%2Fu2%2Fa085315.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFLiang1980" class="citation journal cs1">Liang, Frank M. (1980). "A lower bound for on-line bin packing". <i>Information Processing Letters</i>. <b>10</b> (2): 76–79. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2FS0020-0190%2880%2990077-0">10.1016/S0020-0190(80)90077-0</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Information+Processing+Letters&rft.atitle=A+lower+bound+for+on-line+bin+packing&rft.volume=10&rft.issue=2&rft.pages=76-79&rft.date=1980&rft_id=info%3Adoi%2F10.1016%2FS0020-0190%2880%2990077-0&rft.aulast=Liang&rft.aufirst=Frank+M.&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFvan_Vliet1992" class="citation journal cs1">van Vliet, André (1992). "An improved lower bound for on-line bin packing algorithms". <i>Information Processing Letters</i>. <b>43</b> (5): 277–284. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2F0020-0190%2892%2990223-I">10.1016/0020-0190(92)90223-I</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Information+Processing+Letters&rft.atitle=An+improved+lower+bound+for+on-line+bin+packing+algorithms&rft.volume=43&rft.issue=5&rft.pages=277-284&rft.date=1992&rft_id=info%3Adoi%2F10.1016%2F0020-0190%2892%2990223-I&rft.aulast=van+Vliet&rft.aufirst=Andr%C3%A9&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFBaloghBékésiGalambos2012" class="citation journal cs1 cs1-prop-long-vol">Balogh, János; Békési, József; Galambos, Gábor (July 2012). <a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.tcs.2012.04.017">"New lower bounds for certain classes of bin packing algorithms"</a>. <i>Theoretical Computer Science</i>. 440–441: 1–13. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.tcs.2012.04.017">10.1016/j.tcs.2012.04.017</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Theoretical+Computer+Science&rft.atitle=New+lower+bounds+for+certain+classes+of+bin+packing+algorithms&rft.volume=440%E2%80%93441&rft.pages=1-13&rft.date=2012-07&rft_id=info%3Adoi%2F10.1016%2Fj.tcs.2012.04.017&rft.aulast=Balogh&rft.aufirst=J%C3%A1nos&rft.au=B%C3%A9k%C3%A9si%2C+J%C3%B3zsef&rft.au=Galambos%2C+G%C3%A1bor&rft_id=https%3A%2F%2Fdoi.org%2F10.1016%252Fj.tcs.2012.04.017&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-RamananBLL19892-21"><span class="mw-cite-backlink">^ <a href="#cite_ref-RamananBLL19892_21-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-RamananBLL19892_21-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFRamananBrownLeeLee1989" class="citation journal cs1">Ramanan, Prakash; Brown, Donna J; Lee, C.C; Lee, D.T (September 1989). "On-line bin packing in linear time". <i>Journal of Algorithms</i>. <b>10</b> (3): 305–326. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2F0196-6774%2889%2990031-X">10.1016/0196-6774(89)90031-X</a>. <a href="/enwiki/wiki/Hdl_(identifier)" class="mw-redirect" title="Hdl (identifier)">hdl</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://hdl.handle.net/2142%2F74206">2142/74206</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+Algorithms&rft.atitle=On-line+bin+packing+in+linear+time&rft.volume=10&rft.issue=3&rft.pages=305-326&rft.date=1989-09&rft_id=info%3Ahdl%2F2142%2F74206&rft_id=info%3Adoi%2F10.1016%2F0196-6774%2889%2990031-X&rft.aulast=Ramanan&rft.aufirst=Prakash&rft.au=Brown%2C+Donna+J&rft.au=Lee%2C+C.C&rft.au=Lee%2C+D.T&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-Seiden20022-22"><span class="mw-cite-backlink">^ <a href="#cite_ref-Seiden20022_22-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Seiden20022_22-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Seiden20022_22-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFSeiden2002" class="citation journal cs1">Seiden, Steven S. (2002). "On the online bin packing problem". <i>Journal of the ACM</i>. <b>49</b> (5): 640–671. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F585265.585269">10.1145/585265.585269</a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:14164016">14164016</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+the+ACM&rft.atitle=On+the+online+bin+packing+problem&rft.volume=49&rft.issue=5&rft.pages=640-671&rft.date=2002&rft_id=info%3Adoi%2F10.1145%2F585265.585269&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A14164016%23id-name%3DS2CID&rft.aulast=Seiden&rft.aufirst=Steven+S.&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-Dosa072-23"><span class="mw-cite-backlink">^ <a href="#cite_ref-Dosa072_23-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Dosa072_23-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Dosa072_23-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFDósa2007" class="citation journal cs1">Dósa, György (2007). "The Tight Bound of First Fit Decreasing Bin-Packing Algorithm Is FFD(I) ≤ 11/9\mathrm{OPT}(I) + 6/9". <i>Combinatorics, Algorithms, Probabilistic and Experimental Methodologies. ESCAPE</i>. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F978-3-540-74450-4_1">10.1007/978-3-540-74450-4_1</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Combinatorics%2C+Algorithms%2C+Probabilistic+and+Experimental+Methodologies.+ESCAPE&rft.atitle=The+Tight+Bound+of+First+Fit+Decreasing+Bin-Packing+Algorithm+Is+FFD%28I%29+%E2%89%A4+11%2F9%5Cmathrm%7BOPT%7D%28I%29+%2B+6%2F9&rft.date=2007&rft_id=info%3Adoi%2F10.1007%2F978-3-540-74450-4_1&rft.aulast=D%C3%B3sa&rft.aufirst=Gy%C3%B6rgy&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFBakerCoffman1981" class="citation journal cs1">Baker, B. S.; Coffman, Jr., E. G. (1981-06-01). <a rel="nofollow" class="external text" href="https://epubs.siam.org/doi/abs/10.1137/0602019">"A Tight Asymptotic Bound for Next-Fit-Decreasing Bin-Packing"</a>. <i>SIAM Journal on Algebraic and Discrete Methods</i>. <b>2</b> (2): 147–152. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1137%2F0602019">10.1137/0602019</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0196-5212">0196-5212</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=SIAM+Journal+on+Algebraic+and+Discrete+Methods&rft.atitle=A+Tight+Asymptotic+Bound+for+Next-Fit-Decreasing+Bin-Packing&rft.volume=2&rft.issue=2&rft.pages=147-152&rft.date=1981-06-01&rft_id=info%3Adoi%2F10.1137%2F0602019&rft.issn=0196-5212&rft.aulast=Baker&rft.aufirst=B.+S.&rft.au=Coffman%2C+Jr.%2C+E.+G.&rft_id=https%3A%2F%2Fepubs.siam.org%2Fdoi%2Fabs%2F10.1137%2F0602019&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span><span class="cs1-maint citation-comment"><code class="cs1-code">{{<a href="/enwiki/wiki/Template:Cite_journal" title="Template:Cite journal">cite journal</a>}}</code>: CS1 maint: multiple names: authors list (<a href="/enwiki/wiki/Category:CS1_maint:_multiple_names:_authors_list" title="Category:CS1 maint: multiple names: authors list">link</a>)</span></span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFCsirikGalambosFrenkFrieze1986" class="citation journal cs1">Csirik, J.; Galambos, G.; Frenk, J.B.G.; Frieze, A.M.; Rinnooy Kan, A.H.G. (1986-11-01). <a rel="nofollow" class="external text" href="https://www.sciencedirect.com/science/article/abs/pii/0167637786900131">"A probabilistic analysis of the next fit decreasing bin packing heuristic"</a>. <i>Operations Research Letters</i>. <b>5</b> (5): 233–236. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2F0167-6377%2886%2990013-1">10.1016/0167-6377(86)90013-1</a>. <a href="/enwiki/wiki/Hdl_(identifier)" class="mw-redirect" title="Hdl (identifier)">hdl</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://hdl.handle.net/1765%2F11645">1765/11645</a></span>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0167-6377">0167-6377</a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:50663185">50663185</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Operations+Research+Letters&rft.atitle=A+probabilistic+analysis+of+the+next+fit+decreasing+bin+packing+heuristic&rft.volume=5&rft.issue=5&rft.pages=233-236&rft.date=1986-11-01&rft_id=info%3Ahdl%2F1765%2F11645&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A50663185%23id-name%3DS2CID&rft.issn=0167-6377&rft_id=info%3Adoi%2F10.1016%2F0167-6377%2886%2990013-1&rft.aulast=Csirik&rft.aufirst=J.&rft.au=Galambos%2C+G.&rft.au=Frenk%2C+J.B.G.&rft.au=Frieze%2C+A.M.&rft.au=Rinnooy+Kan%2C+A.H.G.&rft_id=https%3A%2F%2Fwww.sciencedirect.com%2Fscience%2Farticle%2Fabs%2Fpii%2F0167637786900131&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFFisher1988" class="citation journal cs1">Fisher, David C. (1988-12-01). <a rel="nofollow" class="external text" href="https://www.sciencedirect.com/science/article/abs/pii/0167637788900600">"Next-fit packs a list and its reverse into the same number of bins"</a>. <i>Operations Research Letters</i>. <b>7</b> (6): 291–293. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2F0167-6377%2888%2990060-0">10.1016/0167-6377(88)90060-0</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0167-6377">0167-6377</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Operations+Research+Letters&rft.atitle=Next-fit+packs+a+list+and+its+reverse+into+the+same+number+of+bins&rft.volume=7&rft.issue=6&rft.pages=291-293&rft.date=1988-12-01&rft_id=info%3Adoi%2F10.1016%2F0167-6377%2888%2990060-0&rft.issn=0167-6377&rft.aulast=Fisher&rft.aufirst=David+C.&rft_id=https%3A%2F%2Fwww.sciencedirect.com%2Fscience%2Farticle%2Fabs%2Fpii%2F0167637788900600&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-JohnsonGarey19852-27"><span class="mw-cite-backlink">^ <a href="#cite_ref-JohnsonGarey19852_27-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-JohnsonGarey19852_27-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFJohnsonGarey1985" class="citation journal cs1">Johnson, David S; Garey, Michael R (October 1985). <a rel="nofollow" class="external text" href="https://doi.org/10.1016%2F0885-064X%2885%2990022-6">"A 7160 theorem for bin packing"</a>. <i>Journal of Complexity</i>. <b>1</b> (1): 65–106. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1016%2F0885-064X%2885%2990022-6">10.1016/0885-064X(85)90022-6</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+Complexity&rft.atitle=A+7160+theorem+for+bin+packing&rft.volume=1&rft.issue=1&rft.pages=65-106&rft.date=1985-10&rft_id=info%3Adoi%2F10.1016%2F0885-064X%2885%2990022-6&rft.aulast=Johnson&rft.aufirst=David+S&rft.au=Garey%2C+Michael+R&rft_id=https%3A%2F%2Fdoi.org%2F10.1016%252F0885-064X%252885%252990022-6&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-YueZhang19952-28"><span class="mw-cite-backlink">^ <a href="#cite_ref-YueZhang19952_28-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-YueZhang19952_28-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFYueZhang1995" class="citation journal cs1">Yue, Minyi; Zhang, Lei (July 1995). "A simple proof of the inequality MFFD(L) ≤ 71/60 OPT(L) + 1,L for the MFFD bin-packing algorithm". <i>Acta Mathematicae Applicatae Sinica</i>. <b>11</b> (3): 318–330. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2FBF02011198">10.1007/BF02011198</a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:118263129">118263129</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Acta+Mathematicae+Applicatae+Sinica&rft.atitle=A+simple+proof+of+the+inequality+MFFD%28L%29+%E2%89%A4+71%2F60+OPT%28L%29+%2B+1%2CL+for+the+MFFD+bin-packing+algorithm&rft.volume=11&rft.issue=3&rft.pages=318-330&rft.date=1995-07&rft_id=info%3Adoi%2F10.1007%2FBF02011198&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A118263129%23id-name%3DS2CID&rft.aulast=Yue&rft.aufirst=Minyi&rft.au=Zhang%2C+Lei&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFFernandez_de_la_VegaLueker1981" class="citation journal cs1">Fernandez de la Vega, W.; Lueker, G. S. (1981). "Bin packing can be solved within 1 + ε in linear time". <i>Combinatorica</i>. <b>1</b> (4): 349–355. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2FBF02579456">10.1007/BF02579456</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/1439-6912">1439-6912</a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:10519631">10519631</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Combinatorica&rft.atitle=Bin+packing+can+be+solved+within+1+%2B+%CE%B5+in+linear+time&rft.volume=1&rft.issue=4&rft.pages=349-355&rft.date=1981&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A10519631%23id-name%3DS2CID&rft.issn=1439-6912&rft_id=info%3Adoi%2F10.1007%2FBF02579456&rft.aulast=Fernandez+de+la+Vega&rft.aufirst=W.&rft.au=Lueker%2C+G.+S.&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFClaire_Mathieu" class="citation web cs1">Claire Mathieu. <a rel="nofollow" class="external text" href="https://www.coursera.org/learn/approximation-algorithms-part-1/home/week/3">"Approximation Algorithms Part I, Week 3: bin packing"</a>. <i>Coursera</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210715093252/https://www.coursera.org/learn/approximation-algorithms-part-1/home/week/3">Archived</a> from the original on 2021-07-15.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Coursera&rft.atitle=Approximation+Algorithms+Part+I%2C+Week+3%3A+bin+packing&rft.au=Claire+Mathieu&rft_id=https%3A%2F%2Fwww.coursera.org%2Flearn%2Fapproximation-algorithms-part-1%2Fhome%2Fweek%2F3&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-:2-31"><span class="mw-cite-backlink">^ <a href="#cite_ref-:2_31-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:2_31-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFRothvoß2013" class="citation book cs1">Rothvoß, T. (2013-10-01). <a rel="nofollow" class="external text" href="https://ieeexplore.ieee.org/document/6686137">"Approximating Bin Packing within O(log OPT · Log Log OPT) Bins"</a>. <i>2013 IEEE 54th Annual Symposium on Foundations of Computer Science</i>. pp. 20–29. <a href="/enwiki/wiki/ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/1301.4010">1301.4010</a></span>. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FFOCS.2013.11">10.1109/FOCS.2013.11</a>. <a href="/enwiki/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/enwiki/wiki/Special:BookSources/978-0-7695-5135-7" title="Special:BookSources/978-0-7695-5135-7"><bdi>978-0-7695-5135-7</bdi></a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:15905063">15905063</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Approximating+Bin+Packing+within+O%28log+OPT+%C2%B7+Log+Log+OPT%29+Bins&rft.btitle=2013+IEEE+54th+Annual+Symposium+on+Foundations+of+Computer+Science&rft.pages=20-29&rft.date=2013-10-01&rft_id=info%3Aarxiv%2F1301.4010&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A15905063%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1109%2FFOCS.2013.11&rft.isbn=978-0-7695-5135-7&rft.aulast=Rothvo%C3%9F&rft.aufirst=T.&rft_id=https%3A%2F%2Fieeexplore.ieee.org%2Fdocument%2F6686137&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-:3-32"><span class="mw-cite-backlink">^ <a href="#cite_ref-:3_32-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:3_32-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFHobergRothvoss2017" class="citation cs2">Hoberg, Rebecca; Rothvoss, Thomas (2017-01-01), "A Logarithmic Additive Integrality Gap for Bin Packing", <i>Proceedings of the 2017 Annual ACM-SIAM Symposium on Discrete Algorithms</i>, Proceedings, Society for Industrial and Applied Mathematics, pp. 2616–2625, <a href="/enwiki/wiki/ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/1503.08796">1503.08796</a></span>, <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1137%2F1.9781611974782.172">10.1137/1.9781611974782.172</a></span>, <a href="/enwiki/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/enwiki/wiki/Special:BookSources/978-1-61197-478-2" title="Special:BookSources/978-1-61197-478-2"><bdi>978-1-61197-478-2</bdi></a>, <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:1647463">1647463</a></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Proceedings+of+the+2017+Annual+ACM-SIAM+Symposium+on+Discrete+Algorithms&rft.atitle=A+Logarithmic+Additive+Integrality+Gap+for+Bin+Packing&rft.pages=2616-2625&rft.date=2017-01-01&rft_id=info%3Aarxiv%2F1503.08796&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A1647463%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1137%2F1.9781611974782.172&rft.isbn=978-1-61197-478-2&rft.aulast=Hoberg&rft.aufirst=Rebecca&rft.au=Rothvoss%2C+Thomas&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-:1-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-:1_33-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFKarmarkarKarp1982" class="citation journal cs1">Karmarkar, Narendra; Karp, Richard M. (November 1982). <a rel="nofollow" class="external text" href="https://ieeexplore.ieee.org/document/4568405/references#references">"An efficient approximation scheme for the one-dimensional bin-packing problem"</a>. <i>23rd Annual Symposium on Foundations of Computer Science (SFCS 1982)</i>: 312–320. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FSFCS.1982.61">10.1109/SFCS.1982.61</a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:18583908">18583908</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=23rd+Annual+Symposium+on+Foundations+of+Computer+Science+%28SFCS+1982%29&rft.atitle=An+efficient+approximation+scheme+for+the+one-dimensional+bin-packing+problem&rft.pages=312-320&rft.date=1982-11&rft_id=info%3Adoi%2F10.1109%2FSFCS.1982.61&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A18583908%23id-name%3DS2CID&rft.aulast=Karmarkar&rft.aufirst=Narendra&rft.au=Karp%2C+Richard+M.&rft_id=https%3A%2F%2Fieeexplore.ieee.org%2Fdocument%2F4568405%2Freferences%23references&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><a href="#CITEREFMartelloToth1990">Martello & Toth 1990</a>, pp. 237–240.</span>
</li>
<li id="cite_note-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-35">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFKorf2002" class="citation conference cs1">Korf, Richard E. (2002). <a rel="nofollow" class="external text" href="http://www.aaai.org/Papers/AAAI/2002/AAAI02-110.pdf"><i>A new algorithm for optimal bin packing</i></a> <span class="cs1-format">(PDF)</span>. AAAI-02.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=A+new+algorithm+for+optimal+bin+packing.&rft.date=2002&rft.aulast=Korf&rft.aufirst=Richard+E.&rft_id=http%3A%2F%2Fwww.aaai.org%2FPapers%2FAAAI%2F2002%2FAAAI02-110.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-Korf2003Korf2-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-Korf2003Korf2_36-0">^</a></b></span> <span class="reference-text">R. E. Korf (2003), <i><a rel="nofollow" class="external text" href="https://web.archive.org/web/20190823231238/https://pdfs.semanticscholar.org/616d/77a41020941a89e782e877bf4cf7bb5ec9a4.pdf">An improved algorithm for optimal bin packing</a></i>. Proceedings of the International Joint Conference on Artificial Intelligence, (pp. 1252–1258)</span>
</li>
<li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFSchreiberKorf2013" class="citation cs2">Schreiber, Ethan L.; Korf, Richard E. (2013), <a rel="nofollow" class="external text" href="https://www.ijcai.org/Proceedings/13/Papers/103.pdf">"Improved Bin Completion for Optimal Bin Packing and Number Partitioning"</a> <span class="cs1-format">(PDF)</span>, <i>Proceedings of the Twenty-Third International Joint Conference on Artificial Intelligence</i>, IJCAI '13, Beijing, China: AAAI Press, pp. 651–658, <a href="/enwiki/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/enwiki/wiki/Special:BookSources/978-1-57735-633-2" title="Special:BookSources/978-1-57735-633-2"><bdi>978-1-57735-633-2</bdi></a></cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Improved+Bin+Completion+for+Optimal+Bin+Packing+and+Number+Partitioning&rft.btitle=Proceedings+of+the+Twenty-Third+International+Joint+Conference+on+Artificial+Intelligence&rft.place=Beijing%2C+China&rft.series=IJCAI+%2713&rft.pages=651-658&rft.pub=AAAI+Press&rft.date=2013&rft.isbn=978-1-57735-633-2&rft.aulast=Schreiber&rft.aufirst=Ethan+L.&rft.au=Korf%2C+Richard+E.&rft_id=https%3A%2F%2Fwww.ijcai.org%2FProceedings%2F13%2FPapers%2F103.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-:03-38"><span class="mw-cite-backlink">^ <a href="#cite_ref-:03_38-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:03_38-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFMandalChakrabartiGhose1998" class="citation journal cs1">Mandal, C. A.; Chakrabarti, P. P.; Ghose, S. (1998-06-01). <a rel="nofollow" class="external text" href="https://www.sciencedirect.com/science/article/pii/S089812219800087X">"Complexity of fragmentable object bin packing and an application"</a>. <i>Computers & Mathematics with Applications</i>. <b>35</b> (11): 91–97. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2FS0898-1221%2898%2900087-X">10.1016/S0898-1221(98)00087-X</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0898-1221">0898-1221</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Computers+%26+Mathematics+with+Applications&rft.atitle=Complexity+of+fragmentable+object+bin+packing+and+an+application&rft.volume=35&rft.issue=11&rft.pages=91-97&rft.date=1998-06-01&rft_id=info%3Adoi%2F10.1016%2FS0898-1221%2898%2900087-X&rft.issn=0898-1221&rft.aulast=Mandal&rft.aufirst=C.+A.&rft.au=Chakrabarti%2C+P.+P.&rft.au=Ghose%2C+S.&rft_id=https%3A%2F%2Fwww.sciencedirect.com%2Fscience%2Farticle%2Fpii%2FS089812219800087X&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text">Nir Menakerman and Raphael Rom "Bin Packing with Item Fragmentation". Algorithms and Data Structures, 7th International Workshop, WADS 2001, Providence, RI, USA, August 8-10, 2001, Proceedings.</span>
</li>
<li id="cite_note-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-40">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFBertazziGoldenWang2019" class="citation journal cs1">Bertazzi, Luca; Golden, Bruce; Wang, Xingyin (2019-05-31). <a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.dam.2018.08.023">"The Bin Packing Problem with Item Fragmentation:A worst-case analysis"</a>. <i>Discrete Applied Mathematics</i>. GO X Meeting, Rigi Kaltbad (CH), July 10--14, 2016. <b>261</b>: 63–77. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.dam.2018.08.023">10.1016/j.dam.2018.08.023</a></span>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0166-218X">0166-218X</a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:125361557">125361557</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Discrete+Applied+Mathematics&rft.atitle=The+Bin+Packing+Problem+with+Item+Fragmentation%3AA+worst-case+analysis&rft.volume=261&rft.pages=63-77&rft.date=2019-05-31&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A125361557%23id-name%3DS2CID&rft.issn=0166-218X&rft_id=info%3Adoi%2F10.1016%2Fj.dam.2018.08.023&rft.aulast=Bertazzi&rft.aufirst=Luca&rft.au=Golden%2C+Bruce&rft.au=Wang%2C+Xingyin&rft_id=https%3A%2F%2Fdoi.org%2F10.1016%252Fj.dam.2018.08.023&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-41">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFShachnaiTamirYehezkely2006" class="citation book cs1">Shachnai, Hadas; Tamir, Tami; Yehezkely, Omer (2006). <a rel="nofollow" class="external text" href="https://link.springer.com/chapter/10.1007/11671411_26">"Approximation Schemes for Packing with Item Fragmentation"</a>. In Erlebach, Thomas; Persinao, Giuseppe (eds.). <i>Approximation and Online Algorithms</i>. Lecture Notes in Computer Science. Vol. 3879. Berlin, Heidelberg: Springer. pp. 334–347. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F11671411_26">10.1007/11671411_26</a>. <a href="/enwiki/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/enwiki/wiki/Special:BookSources/978-3-540-32208-5" title="Special:BookSources/978-3-540-32208-5"><bdi>978-3-540-32208-5</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Approximation+Schemes+for+Packing+with+Item+Fragmentation&rft.btitle=Approximation+and+Online+Algorithms&rft.place=Berlin%2C+Heidelberg&rft.series=Lecture+Notes+in+Computer+Science&rft.pages=334-347&rft.pub=Springer&rft.date=2006&rft_id=info%3Adoi%2F10.1007%2F11671411_26&rft.isbn=978-3-540-32208-5&rft.aulast=Shachnai&rft.aufirst=Hadas&rft.au=Tamir%2C+Tami&rft.au=Yehezkely%2C+Omer&rft_id=https%3A%2F%2Flink.springer.com%2Fchapter%2F10.1007%2F11671411_26&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-42">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFEkici2021" class="citation journal cs1">Ekici, Ali (2021-02-01). <a rel="nofollow" class="external text" href="https://www.sciencedirect.com/science/article/pii/S0305054820302306">"Bin Packing Problem with Conflicts and Item Fragmentation"</a>. <i>Computers & Operations Research</i>. <b>126</b>: 105113. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.cor.2020.105113">10.1016/j.cor.2020.105113</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0305-0548">0305-0548</a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:225002556">225002556</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Computers+%26+Operations+Research&rft.atitle=Bin+Packing+Problem+with+Conflicts+and+Item+Fragmentation&rft.volume=126&rft.pages=105113&rft.date=2021-02-01&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A225002556%23id-name%3DS2CID&rft.issn=0305-0548&rft_id=info%3Adoi%2F10.1016%2Fj.cor.2020.105113&rft.aulast=Ekici&rft.aufirst=Ali&rft_id=https%3A%2F%2Fwww.sciencedirect.com%2Fscience%2Farticle%2Fpii%2FS0305054820302306&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-43">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFCasazzaCeselli2014" class="citation journal cs1">Casazza, Marco; Ceselli, Alberto (2014-06-01). <a rel="nofollow" class="external text" href="https://www.sciencedirect.com/science/article/pii/S0305054813003596">"Mathematical programming algorithms for bin packing problems with item fragmentation"</a>. <i>Computers & Operations Research</i>. <b>46</b>: 1–11. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.cor.2013.12.008">10.1016/j.cor.2013.12.008</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0305-0548">0305-0548</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Computers+%26+Operations+Research&rft.atitle=Mathematical+programming+algorithms+for+bin+packing+problems+with+item+fragmentation&rft.volume=46&rft.pages=1-11&rft.date=2014-06-01&rft_id=info%3Adoi%2F10.1016%2Fj.cor.2013.12.008&rft.issn=0305-0548&rft.aulast=Casazza&rft.aufirst=Marco&rft.au=Ceselli%2C+Alberto&rft_id=https%3A%2F%2Fwww.sciencedirect.com%2Fscience%2Farticle%2Fpii%2FS0305054813003596&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-44">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFMalagutiMonaciParonuzziPferschy2019" class="citation journal cs1">Malaguti, Enrico; Monaci, Michele; Paronuzzi, Paolo; Pferschy, Ulrich (2019-03-16). <a rel="nofollow" class="external text" href="https://www.sciencedirect.com/science/article/pii/S0377221718307963">"Integer optimization with penalized fractional values: The Knapsack case"</a>. <i>European Journal of Operational Research</i>. <b>273</b> (3): 874–888. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.ejor.2018.09.020">10.1016/j.ejor.2018.09.020</a>. <a href="/enwiki/wiki/Hdl_(identifier)" class="mw-redirect" title="Hdl (identifier)">hdl</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://hdl.handle.net/11585%2F657029">11585/657029</a></span>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0377-2217">0377-2217</a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:31722681">31722681</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=European+Journal+of+Operational+Research&rft.atitle=Integer+optimization+with+penalized+fractional+values%3A+The+Knapsack+case&rft.volume=273&rft.issue=3&rft.pages=874-888&rft.date=2019-03-16&rft_id=info%3Ahdl%2F11585%2F657029&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A31722681%23id-name%3DS2CID&rft.issn=0377-2217&rft_id=info%3Adoi%2F10.1016%2Fj.ejor.2018.09.020&rft.aulast=Malaguti&rft.aufirst=Enrico&rft.au=Monaci%2C+Michele&rft.au=Paronuzzi%2C+Paolo&rft.au=Pferschy%2C+Ulrich&rft_id=https%3A%2F%2Fwww.sciencedirect.com%2Fscience%2Farticle%2Fpii%2FS0377221718307963&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-:022-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-:022_45-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFCoffmanGareyJohnson1987" class="citation journal cs1">Coffman, E. G; Garey, M. R; Johnson, D. S (1987-12-01). <a rel="nofollow" class="external text" href="https://dx.doi.org/10.1016/0885-064X%2887%2990009-4">"Bin packing with divisible item sizes"</a>. <i>Journal of Complexity</i>. <b>3</b> (4): 406–428. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2F0885-064X%2887%2990009-4">10.1016/0885-064X(87)90009-4</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0885-064X">0885-064X</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+Complexity&rft.atitle=Bin+packing+with+divisible+item+sizes&rft.volume=3&rft.issue=4&rft.pages=406-428&rft.date=1987-12-01&rft_id=info%3Adoi%2F10.1016%2F0885-064X%2887%2990009-4&rft.issn=0885-064X&rft.aulast=Coffman&rft.aufirst=E.+G&rft.au=Garey%2C+M.+R&rft.au=Johnson%2C+D.+S&rft_id=https%3A%2F%2Fdx.doi.org%2F10.1016%2F0885-064X%252887%252990009-4&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-46">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFKrauseShenSchwetman1975" class="citation journal cs1">Krause, K. L.; Shen, V. Y.; Schwetman, H. D. (1975-10-01). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F321906.321917">"Analysis of Several Task-Scheduling Algorithms for a Model of Multiprogramming Computer Systems"</a>. <i>Journal of the ACM</i>. <b>22</b> (4): 522–550. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F321906.321917">10.1145/321906.321917</a></span>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0004-5411">0004-5411</a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:10214857">10214857</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+the+ACM&rft.atitle=Analysis+of+Several+Task-Scheduling+Algorithms+for+a+Model+of+Multiprogramming+Computer+Systems&rft.volume=22&rft.issue=4&rft.pages=522-550&rft.date=1975-10-01&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A10214857%23id-name%3DS2CID&rft.issn=0004-5411&rft_id=info%3Adoi%2F10.1145%2F321906.321917&rft.aulast=Krause&rft.aufirst=K.+L.&rft.au=Shen%2C+V.+Y.&rft.au=Schwetman%2C+H.+D.&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F321906.321917&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-47">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFKellererPferschy1999" class="citation journal cs1">Kellerer, H.; Pferschy, U. (1999-01-01). <a rel="nofollow" class="external text" href="https://doi.org/10.1023/A:1018947117526">"Cardinality constrained bin-packing problems"</a>. <i>Annals of Operations Research</i>. <b>92</b>: 335–348. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1023%2FA%3A1018947117526">10.1023/A:1018947117526</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/1572-9338">1572-9338</a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:28963291">28963291</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Annals+of+Operations+Research&rft.atitle=Cardinality+constrained+bin-packing+problems&rft.volume=92&rft.pages=335-348&rft.date=1999-01-01&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A28963291%23id-name%3DS2CID&rft.issn=1572-9338&rft_id=info%3Adoi%2F10.1023%2FA%3A1018947117526&rft.aulast=Kellerer&rft.aufirst=H.&rft.au=Pferschy%2C+U.&rft_id=https%3A%2F%2Fdoi.org%2F10.1023%2FA%3A1018947117526&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-pubsonline.informs.org-48"><span class="mw-cite-backlink">^ <a href="#cite_ref-pubsonline.informs.org_48-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-pubsonline.informs.org_48-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFAnilyBramelSimchi-Levi1994" class="citation journal cs1">Anily, Shoshana; Bramel, Julien; Simchi-Levi, David (1994-04-01). <a rel="nofollow" class="external text" href="https://pubsonline.informs.org/doi/abs/10.1287/opre.42.2.287">"Worst-Case Analysis of Heuristics for the Bin Packing Problem with General Cost Structures"</a>. <i>Operations Research</i>. <b>42</b> (2): 287–298. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1287%2Fopre.42.2.287">10.1287/opre.42.2.287</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0030-364X">0030-364X</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Operations+Research&rft.atitle=Worst-Case+Analysis+of+Heuristics+for+the+Bin+Packing+Problem+with+General+Cost+Structures&rft.volume=42&rft.issue=2&rft.pages=287-298&rft.date=1994-04-01&rft_id=info%3Adoi%2F10.1287%2Fopre.42.2.287&rft.issn=0030-364X&rft.aulast=Anily&rft.aufirst=Shoshana&rft.au=Bramel%2C+Julien&rft.au=Simchi-Levi%2C+David&rft_id=https%3A%2F%2Fpubsonline.informs.org%2Fdoi%2Fabs%2F10.1287%2Fopre.42.2.287&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-49">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFCohenKellerMirrokniZadimoghaddam2019" class="citation journal cs1">Cohen, Maxime C.; Keller, Philipp W.; Mirrokni, Vahab; Zadimoghaddam, Morteza (2019-07-01). <a rel="nofollow" class="external text" href="https://pubsonline.informs.org/doi/abs/10.1287/mnsc.2018.3091">"Overcommitment in Cloud Services: Bin Packing with Chance Constraints"</a>. <i>Management Science</i>. <b>65</b> (7): 3255–3271. <a href="/enwiki/wiki/ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/1705.09335">1705.09335</a></span>. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1287%2Fmnsc.2018.3091">10.1287/mnsc.2018.3091</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0025-1909">0025-1909</a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:159270392">159270392</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Management+Science&rft.atitle=Overcommitment+in+Cloud+Services%3A+Bin+Packing+with+Chance+Constraints&rft.volume=65&rft.issue=7&rft.pages=3255-3271&rft.date=2019-07-01&rft_id=info%3Aarxiv%2F1705.09335&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A159270392%23id-name%3DS2CID&rft.issn=0025-1909&rft_id=info%3Adoi%2F10.1287%2Fmnsc.2018.3091&rft.aulast=Cohen&rft.aufirst=Maxime+C.&rft.au=Keller%2C+Philipp+W.&rft.au=Mirrokni%2C+Vahab&rft.au=Zadimoghaddam%2C+Morteza&rft_id=https%3A%2F%2Fpubsonline.informs.org%2Fdoi%2Fabs%2F10.1287%2Fmnsc.2018.3091&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-50">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFChungPark2015" class="citation journal cs1">Chung, Yerim; Park, Myoung-Ju (2015-01-01). <a rel="nofollow" class="external text" href="http://www.sciencedirect.com/science/article/pii/S002001901400180X">"Notes on inverse bin-packing problems"</a>. <i>Information Processing Letters</i>. <b>115</b> (1): 60–68. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.ipl.2014.09.005">10.1016/j.ipl.2014.09.005</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0020-0190">0020-0190</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Information+Processing+Letters&rft.atitle=Notes+on+inverse+bin-packing+problems&rft.volume=115&rft.issue=1&rft.pages=60-68&rft.date=2015-01-01&rft_id=info%3Adoi%2F10.1016%2Fj.ipl.2014.09.005&rft.issn=0020-0190&rft.aulast=Chung&rft.aufirst=Yerim&rft.au=Park%2C+Myoung-Ju&rft_id=http%3A%2F%2Fwww.sciencedirect.com%2Fscience%2Farticle%2Fpii%2FS002001901400180X&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-:02-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-:02_51-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFBoyarEpsteinFavrholdtKohrt2006" class="citation journal cs1"><a href="/enwiki/wiki/Joan_Boyar" title="Joan Boyar">Boyar, Joan</a>; Epstein, Leah; Favrholdt, Lene M.; Kohrt, Jens S.; Larsen, Kim S.; Pedersen, Morten M.; Wøhlk, Sanne (2006-10-11). <a rel="nofollow" class="external text" href="http://www.sciencedirect.com/science/article/pii/S0304397506003483">"The maximum resource bin packing problem"</a>. <i>Theoretical Computer Science</i>. <b>362</b> (1): 127–139. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.tcs.2006.06.001">10.1016/j.tcs.2006.06.001</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0304-3975">0304-3975</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Theoretical+Computer+Science&rft.atitle=The+maximum+resource+bin+packing+problem&rft.volume=362&rft.issue=1&rft.pages=127-139&rft.date=2006-10-11&rft_id=info%3Adoi%2F10.1016%2Fj.tcs.2006.06.001&rft.issn=0304-3975&rft.aulast=Boyar&rft.aufirst=Joan&rft.au=Epstein%2C+Leah&rft.au=Favrholdt%2C+Lene+M.&rft.au=Kohrt%2C+Jens+S.&rft.au=Larsen%2C+Kim+S.&rft.au=Pedersen%2C+Morten+M.&rft.au=W%C3%B8hlk%2C+Sanne&rft_id=http%3A%2F%2Fwww.sciencedirect.com%2Fscience%2Farticle%2Fpii%2FS0304397506003483&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-52">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFHuangLu2020" class="citation arxiv cs1">Huang, Xin; Lu, Pinyan (2020-11-10). "An Algorithmic Framework for Approximating Maximin Share Allocation of Chores". <a href="/enwiki/wiki/ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/1907.04505">1907.04505</a></span> [<a rel="nofollow" class="external text" href="https://arxiv.org/archive/cs.GT">cs.GT</a>].</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=preprint&rft.jtitle=arXiv&rft.atitle=An+Algorithmic+Framework+for+Approximating+Maximin+Share+Allocation+of+Chores&rft.date=2020-11-10&rft_id=info%3Aarxiv%2F1907.04505&rft.aulast=Huang&rft.aufirst=Xin&rft.au=Lu%2C+Pinyan&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-53"><span class="mw-cite-backlink"><b><a href="#cite_ref-53">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1215172403"><cite id="CITEREFMaDósaHanTing2013" class="citation journal cs1">Ma, Ruixin; Dósa, György; Han, Xin; Ting, Hing-Fung; Ye, Deshi; Zhang, Yong (2013-08-01). <a rel="nofollow" class="external text" href="https://doi.org/10.1007/s10898-012-9856-9">"A note on a selfish bin packing problem"</a>. <i>Journal of Global Optimization</i>. <b>56</b> (4): 1457–1462. <a href="/enwiki/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2Fs10898-012-9856-9">10.1007/s10898-012-9856-9</a>. <a href="/enwiki/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://www.worldcat.org/issn/0925-5001">0925-5001</a>. <a href="/enwiki/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:3082040">3082040</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+Global+Optimization&rft.atitle=A+note+on+a+selfish+bin+packing+problem&rft.volume=56&rft.issue=4&rft.pages=1457-1462&rft.date=2013-08-01&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A3082040%23id-name%3DS2CID&rft.issn=0925-5001&rft_id=info%3Adoi%2F10.1007%2Fs10898-012-9856-9&rft.aulast=Ma&rft.aufirst=Ruixin&rft.au=D%C3%B3sa%2C+Gy%C3%B6rgy&rft.au=Han%2C+Xin&rft.au=Ting%2C+Hing-Fung&rft.au=Ye%2C+Deshi&rft.au=Zhang%2C+Yong&rft_id=https%3A%2F%2Fdoi.org%2F10.1007%2Fs10898-012-9856-9&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABin+packing+problem" class="Z3988"></span></span>
</li>
<li id="cite_note-54"><span class="mw-cite-backlink"><b><a href="#cite_ref-54">^</a></b></span> <span class="reference-text">Lodi A., Martello S., Monaci, M., Vigo, D. (2010) "Two-Dimensional Bin Packing Problems". In V.Th. Paschos (Ed.), <i>Paradigms of Combinatorial Optimization</i>, Wiley/ISTE, pp. 107–129</span>
</li>
<li id="cite_note-55"><span class="mw-cite-backlink"><b><a href="#cite_ref-55">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.researchgate.net/profile/Leon_Kanavathy/publication/228974015_Optimizing_Three-Dimensional_Bin_Packing_Through_Simulation/links/5890499d92851c9794c62fd0/Optimizing-Three-Dimensional-Bin-Packing-Through-Simulation.pdf">Optimizing Three-Dimensional Bin Packing Through Simulation</a></span>
</li>
<li id="cite_note-56"><span class="mw-cite-backlink"><b><a href="#cite_ref-56">^</a></b></span> <span class="reference-text">Benkő A., Dósa G., Tuza Z. (2010) "<a rel="nofollow" class="external text" href="https://www.researchgate.net/profile/Attila_Benko2/publication/221608540_Bin_PackingCovering_with_Delivery_solved_with_the_evolution_of_algorithms/links/5570a36108aee701d61c2e05.pdf">Bin Packing/Covering with Delivery, Solved with the Evolution of Algorithms</a>," <i>Proceedings 2010 IEEE 5th International Conference on Bio-Inspired Computing: Theories and Applications, BIC-TA 2010</i>, art. no. 5645312, pp. 298–302.</span>
</li>
</ol></div>
<div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1228936124">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}</style></div><div role="navigation" class="navbox" aria-labelledby="Packing_problems" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1063604349"><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/enwiki/wiki/Template:Packing_problems" title="Template:Packing problems"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/enwiki/wiki/Template_talk:Packing_problems" title="Template talk:Packing problems"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/enwiki/wiki/Special:EditPage/Template:Packing_problems" title="Special:EditPage/Template:Packing problems"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Packing_problems" style="font-size:114%;margin:0 4em"><a href="/enwiki/wiki/Packing_problems" title="Packing problems">Packing problems</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Abstract packing</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a class="mw-selflink selflink">Bin</a></li>
<li><a href="/enwiki/wiki/Set_packing" title="Set packing">Set</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/enwiki/wiki/Circle_packing" title="Circle packing">Circle packing</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="/enwiki/wiki/Circle_packing_in_a_circle" title="Circle packing in a circle">In a circle</a> / <a href="/enwiki/wiki/Circle_packing_in_an_equilateral_triangle" title="Circle packing in an equilateral triangle">equilateral triangle</a> / <a href="/enwiki/wiki/Circle_packing_in_an_isosceles_right_triangle" title="Circle packing in an isosceles right triangle">isosceles right triangle</a> / <a href="/enwiki/wiki/Circle_packing_in_a_square" title="Circle packing in a square">square</a></li>
<li><a href="/enwiki/wiki/Apollonian_gasket" title="Apollonian gasket">Apollonian gasket</a></li>
<li><a href="/enwiki/wiki/Circle_packing_theorem" title="Circle packing theorem">Circle packing theorem</a></li>
<li><a href="/enwiki/wiki/Tammes_problem" title="Tammes problem">Tammes problem <span style="font-size:85%;">(on sphere)</span></a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/enwiki/wiki/Sphere_packing" title="Sphere packing">Sphere packing</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="/enwiki/wiki/Apollonian_sphere_packing" title="Apollonian sphere packing">Apollonian</a></li>
<li><a href="/enwiki/wiki/Finite_sphere_packing" title="Finite sphere packing">Finite</a></li>
<li><a href="/enwiki/wiki/Sphere_packing_in_a_sphere" title="Sphere packing in a sphere">In a sphere</a></li>
<li><a href="/enwiki/wiki/Sphere_packing_in_a_cube" title="Sphere packing in a cube">In a cube</a></li>
<li><a href="/enwiki/wiki/Sphere_packing_in_a_cylinder" title="Sphere packing in a cylinder"> In a cylinder</a></li>
<li><a href="/enwiki/wiki/Close-packing_of_equal_spheres" title="Close-packing of equal spheres">Close-packing</a></li>
<li><a href="/enwiki/wiki/Kissing_number" title="Kissing number">Kissing number</a></li>
<li><a href="/enwiki/wiki/Hamming_bound" title="Hamming bound">Sphere-packing (Hamming) bound</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other 2-D packing</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="/enwiki/wiki/Square_packing" title="Square packing">Square packing</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other 3-D packing</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="/enwiki/wiki/Tetrahedron_packing" title="Tetrahedron packing">Tetrahedron</a></li>
<li><a href="/enwiki/wiki/Ellipsoid_packing" title="Ellipsoid packing">Ellipsoid</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Puzzles</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="/enwiki/wiki/Conway_puzzle" title="Conway puzzle">Conway</a></li>
<li><a href="/enwiki/wiki/Slothouber%E2%80%93Graatsma_puzzle" title="Slothouber–Graatsma puzzle">Slothouber–Graatsma</a></li></ul>
</div></td></tr></tbody></table></div></div>' |
Whether or not the change was made through a Tor exit node (tor_exit_node ) | false |
Unix timestamp of change (timestamp ) | '1719236970' |