Показать сообщение отдельно
  #1 (permalink)  
Старый 01.10.2011, 21:16
Новичок на форуме
Отправить личное сообщение для Storan Посмотреть профиль Найти все сообщения от Storan
 
Регистрация: 01.10.2011
Сообщений: 1

Удаление элементов через splice. возможно ли оптимизировать?
вот такой образчик кода
где-то сверху функции
arr=[];

где-то глубоко внутри нескольких вложенных циклов
var N1 = ... сложения, умножения элементов других массивов
var N2 = ... сложения, умножения элементов других массивов
var elem = {polza:N1, cena:N2, id:N3};
var add =  del = true;
while (del){
   del = false;
   for (var i = 0; i < arr.length; ++i){
      if ((arr[i].polza >= elem.polza) && (arr[i].cena <= elem.cena)){
         add=false; break;
      }
      if ((arr[i].polza <= elem.polza) && (arr[i].cena >= elem.cena)){
         del = true;
         arr.splice(i,1);
         --i;
         continue;
      }
   }
}
if (add) arr.push(elem);

обычными словами что делает код - он ищет подмножество элементов, обладающих лучшим соотношением качество:стоимость. То есть, если на вход "чёрного ящика" подать
[{5,3}, {2,7}, {2,1}, {8,7},{6,5},{3,2},{4,5}, {4,2}, {2,1}]
- то на выходе мы должны получить
{5,3}, {2,1}, {8,7}, {6,5}, {4,2}

последовательность входящих элементов никак не отсортирована, итоговый array создаётся в процессе работы, и при необходимости его можно делать упорядоченным по любому из нужных полей (если будет происходить какая-то оптимизация от этого; так как в итоге там 10-15 элементов остаётся, и окончательная сортировка - не проблема по времени).
Ответить с цитированием