Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 10.06.2012, 19:54
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Bebarr Swallow,
Делал ка то подобную задачку- оптимально создать для кажого объекта на серве MD5 сумму каждого объекта, которую ставим первым из свойств, тады чисто проверяем Перво - свойства и удаляем идентичные .. 1000 объектов менее 0.3секунды тестировалось на проце в 1-1.2Гг

Последний раз редактировалось Deff, 10.06.2012 в 20:00.
Ответить с цитированием
  #12 (permalink)  
Старый 10.06.2012, 19:55
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

а колизии?
Ответить с цитированием
  #13 (permalink)  
Старый 10.06.2012, 20:00
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

если массив уже отсортирован, то можно проще сделать так:
var a = [ 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 5 ],
    b = [],
    last,
    length = a.length;

for( var i = 0; i < length; i++ ) {
    if ( a[ i ] !== last ) {
        b[ b.length ] = last = a[ i ];
    }
}

alert( b );
Но это прокатит если массив уже отсортирован, а точнее если парные значения находятся рядом друг с другом.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 10.06.2012 в 20:03.
Ответить с цитированием
  #14 (permalink)  
Старый 10.06.2012, 20:01
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

dmitriymar,
Расшифруйте ?
Ответить с цитированием
  #15 (permalink)  
Старый 10.06.2012, 20:04
Кандидат Javascript-наук
Отправить личное сообщение для Bebarr Swallow Посмотреть профиль Найти все сообщения от Bebarr Swallow
 
Регистрация: 17.03.2011
Сообщений: 113

Сообщение от dmitriymar Посмотреть сообщение
ну ,тогда вы графоман как минимум.
Вам уже devote подсказал в какую сторону рыть
чтоб было понятнее -разделить на участки и выполнить сортировку в каждом параллельно (Worker),
затем по мере прихода результатов соединять их в один и производить сортировку в нём-вариант 1
когда все будут обработаны-соединить их в один и производить сортировку в нём-вариант 2

вариант другой -разбить на участки,а их в свою очередь тоже на участки а их.....
затем сортировать,собирать в обр порядке,сортировать.....
Ну по ходу я уже справился. Странно, но скрипт проработал секунд так .. несколько. Получился массив из 585 элементов.

Окончательный скрипт был таким:
var db = [ ... ] // Array[70890]

function uniqueData(a) {
  var cache = [];
  
  for(var x = 0; x < a.length; x++) {
    if(x == 0) {
      cache[x] = a[x];
    } else {
      for(var y = 0, alertDublicate = false; y < cache.length; y++) {
        if(cache[y] == a[x]) alertDublicate = true;
        if(y + 1 == cache.length && alertDublicate != true) cache.push(a[x]);
      };
    };
  };
  return cache;
};

uniqueData(db); // return Array[585]


Конечно скрипт совсем не для всех, но для одноразового применения мне подошел (и написан за 5 минут).
Ответить с цитированием
  #16 (permalink)  
Старый 10.06.2012, 20:07
Кандидат Javascript-наук
Отправить личное сообщение для Bebarr Swallow Посмотреть профиль Найти все сообщения от Bebarr Swallow
 
Регистрация: 17.03.2011
Сообщений: 113

Сообщение от Deff Посмотреть сообщение
Bebarr Swallow,
Делал ка то подобную задачку- оптимально создать для кажого объекта на серве MD5 сумму каждого объекта, которую ставим первым из свойств, тады чисто проверяем Перво - свойства и удаляем идентичные .. 1000 объектов менее 0.3секунды тестировалось на проце в 1-1.2Гг
Мне это нужно было все на один раз
Ответить с цитированием
  #17 (permalink)  
Старый 10.06.2012, 20:07
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от Deff
Расшифруйте ?
это когда для различных строк md5 одинаковые.
Ответить с цитированием
  #18 (permalink)  
Старый 10.06.2012, 20:14
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

потестируйте такой вариант:
var db = [  1, 1, 2, 10, 2, 0, 0, 9, 2, 3, 7, 3, 4, 4, 4, 5  ];
 
function uniqueData(a) {
    var result = [],
        execCache = {},
        length = a.length;
   
    for( var v, x = 0; v = a[ x ], x < length; x++ ) {
        if ( !( v in execCache ) ) {
            result[ result.length ] = execCache[ v ] = v;
        }
    }

    return result;
}

alert( uniqueData(db) );
тут используется объект, но зато проход всего один.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #19 (permalink)  
Старый 10.06.2012, 20:37
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от dmitriymar
это когда для различных строк md5 одинаковые.
есть простой метод, исходные свойтва объектов переводим в бинарник и перемножаем на серве, потом от произведения берем md5 (*цифра однозначная до значений в порядка триллиона объектов
Ответить с цитированием
  #20 (permalink)  
Старый 10.06.2012, 20:51
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

devote, у меня была аналогичная мысль, но писать влом ) Кстати,

if ( !( v in execCache ) ) {
    result[ result.length ] = execCache[ v ] = v;
}

===

if ( v in execCache ) continue;
result[ result.length ] = execCache[ v ] = v;

Кстати, кстати ^_^ если предполагается значительное "усечение" массива за счет повторов, то и времени на сортировку будет затрачено меньше.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двойная Фильтрация данных таблицы David0707 Общие вопросы Javascript 0 19.03.2012 13:00
Сортировка массива в JS методом пузырька mikhabor2372 Javascript под браузер 3 07.02.2012 21:51
Выборка массива данных с inputa Beriagts jQuery 9 05.08.2011 13:04
сортировка массива с сохранением ассоциации индексов HelpeR Элементы интерфейса 1 24.02.2010 11:00
Сортировка числовых данных в таблице Vladsss Общие вопросы Javascript 15 01.09.2009 17:02