Advertisement
Guest User

Untitled

a guest
May 19th, 2010
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // По-уму этот алгоритм называется "one-dimensional bin packing"
  2. // Я на скорую руку реализовал второй по сложности с конца его вариант -- First fit :)
  3.  
  4. // src_data_array = ...
  5. buffer_data_array = []; // массив буферов
  6. buffer_data_array_sizes = []; // запоминаем посчитанные веса буферов, чтобы не пересчитывать каждый раз
  7. tmp_data_array = src_data_array.slice(0); // содаем копию для разборки на буферы
  8.  
  9. while( tmp_data_array.length > 0 ){ // каждый елемент...
  10.   var __item = tmp_data_array.pop(); // запоминаем, вытаскивая из исходного массива
  11.   //
  12.   if( buffer_data_array.length == 0){ // если нет ни одного буфера...
  13.     buffer_data_array[0] = []; // создаем новый
  14.     buffer_data_array[0].push(__item); // пихаем в него елемент. предполагается что елемент не больше макс. размера буфера.
  15.     buffer_data_array_sizes[0] = __item[1]; // запоминаем размер нового буфера
  16.   }else{ // если уже есть буфер
  17.     var __commited = false;
  18.     for ( j in buffer_data_array ) { // пробегаем по всем буферам, пытаясь засунуть наш елемент...
  19.       if( (buffer_data_array_sizes[j] + __item[1]) <= buffer_size  ){ // лезит?
  20.         buffer_data_array[j].push(__item);
  21.         buffer_data_array_sizes[j] += __item[1];
  22.         __commited = true;
  23.         break;
  24.       }
  25.     }
  26.     if (__commited == false) { // если никуда не лезет -- создаем новый буффер
  27.       buffer_data_array.push([]);
  28.       buffer_data_array[buffer_data_array.length-1].push(__item);
  29.       buffer_data_array_sizes[buffer_data_array.length-1] = __item[1];
  30.     }
  31.   }
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement