הרעיון: נרמול לפי חצי הסכום. קלט של BIN-PACKING הוא מספרים בקטע (0,1] ומספר תאים k, והשאלה היא אם אפשר לחלק אותם ל-k תאים שבכל אחד הסכום ≤1. אם נחלק כל ai בחצי הסכום, סכום כל המספרים יהיה בדיוק 2, ואז חלוקה לשני תאים בקיבולת 1 אפשרית אם ורק אם יש חלוקה שווה.
המכשול: ייתכן ai ענק שאחרי הנרמול יעלה על 1 — פלט לא חוקי. אבל אם 2ai>T אז אין בכלל חלוקה שווה, ולכן אפשר להחזיר במקרה זה מחרוזת קבועה שאיננה בשפה.
אלגוריתם R′. על קלט (a1,…,an), מספרים טבעיים (בלי הגבלת הכלליות ai>0; אפסים אפשר להשמיט מבלי לשנות את התשובה):
- חשב T←∑jaj.
- אם קיים i כך ש-2ai>T: החזר (43,43,43,2).
- אחרת, לכל i הגדר bi←∑jaj2ai, והחזר (b1,…,bn,2).
התכונה המרכזית של הפלט. בשלב 3,
∑i=1nbi=∑iT2ai=T2∑iai=T2⋅T=2,
כאשר הוצאת T2 מחוץ לסכום מותרת כי הוא קבוע ואינו תלוי ב-i. כמו כן bi>0 ו-bi≤1 (כי 2ai≤T בשלב זה), ולכן bi∈(0,1] והפלט חוקי.
על הייצוג. ה-bi רציונליים ומיוצגים כזוג שלמים — מונה 2ai ומכנה T — ואורך כל אחד O(m+logn). אין דרישה שקלט BIN-PACKING יהיה שלם; ההגדרה מדברת על מספרים בקטע (0,1].