Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #61 (permalink)  
Старый 09.12.2013, 12:29
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Цитата:
группы гораздо больше свидетельствуют о структуре чем отдельные числа
После анализа во втором своем посте (#58) Я уже не так уверен в этом. Слишком много возможных интерпретаций результатов сравнения двух массивов. Единственный способ оценить какая интерпритация верна это оценить ее стоимость(колво затраченных операций) или ценность (длинну комбинации). Очень может быть что простые алгоритмы для оценки стоимости которые уже разработаны, (почитать можно на хабре) окажутся эффективней чем выделение групп с последующим поиском наиболее оптимальной(читай длинной) комбинации.

Проверять все это в падлу и так отвлекся.

З.Ы. Стоимость это то что вы потратили, ценность это то что вы получили.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 09.12.2013 в 13:20.
Ответить с цитированием
  #62 (permalink)  
Старый 09.12.2013, 13:27
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Maxmaxmaximus4
нет, любые данные, числа, обьекты, что угодно, блин а, ты что не знаешь как ui работает?
А вдруг у ты изобрел что то новое, лучше уточнить)
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #63 (permalink)  
Старый 09.12.2013, 14:07
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

А почему бы не использовать бинарный поиск вместо indexOf, он же быстрее на сколько я вижу http://jsperf.com/binarysearch-vs-indexof/4
var BinarySearchBitshift = function (list, val) {
  	var min = 0
  	  , max = list.length-1
  	  ;
  	
  	for(;;)
  	{
  		// fall back to linear search, 11 seems to be a good threshold, but this depends on the uses comparator!! (here: ===)
  		if ( min + 11 > max ) {
  			for(var i=min ; i<=max; i++ ) {
  				if( val === list[i] ) {
  					return i;
  				}
  			}
  
  			return -1;
  		}
  
  		var mid = (min + max) >> 1;
  		var dat = list[ mid ];
  
  		if ( val === dat ) {
  			return mid;
  		} 
  
  		if( val > dat ) {
  			min = mid + 1;
  		} else {
  			max = mid - 1;
  		}
  	}
  };
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.

Последний раз редактировалось cyber, 09.12.2013 в 14:13.
Ответить с цитированием
  #64 (permalink)  
Старый 09.12.2013, 14:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,114


function compare(f, d) {
    var e = {
        relocation: [],
        insert: [],
        length: d.length
    }, c = d + ", " + f ,
        b = f.slice();
    if (c = c.match(/([^,]\S*[^,])(?=,[\s\S]*\s[\s\S]*\1)/g)) {
        c.reverse();
        for (var a = 0; a < c.length; a++) {
            var g = ("" + b).slice(0, ("" + b).lastIndexOf(c[a]) + 1).split(",").length - 1,
                h = c[a].split(",").length,
                k = b.splice(g, h);
            e.relocation.push([g, h]);
            b = k.concat(b)
        }
    }
    for (a = 0; a < d.length; a++) d[a] != b[a] && (b.splice(a, 0, d[a]), e.insert.push([a, d[a]]));
    return e
};

function conversion(b, c) {
    for (var a = 0; a < c.relocation.length; a++) {
        var d = c.relocation[a];
        b = b.splice(d[0], d[1]).concat(b)
    }
    for (a = 0; a < c.insert.length; a++) d = c.insert[a], b.splice(d[0], 0, d[1]);
    b.length = c.length;
    return b
};

var oldArray = [1, 2, 3, 4, 5];
var newArray = [11, 3, 4, 3, 11, 21];
var changes = compare(oldArray, newArray);
var len = changes.relocation.length + changes.insert.length + 1;//кол-во затраченных операций в conversion
alert(newArray +"\n"+conversion(oldArray, changes)+"\n"+len)
var oldArray = [4, 50, 6, 7, 8, 9,1, 2, 3, 50 ];
var newArray = [1, 2, 4, 50, 6, 7, 8, 9,50];
var changes = compare(oldArray, newArray);
var len = changes.relocation.length + changes.insert.length + 1;
alert(newArray +"\n"+conversion(oldArray, changes)+"\n"+len)
var oldArray = [1, 2, 3, 4, 5];
var newArray = [5, 4, 3, 2, 1];
var changes = compare(oldArray, newArray);
var len = changes.relocation.length + changes.insert.length + 1;
alert(newArray +"\n"+conversion(oldArray, changes)+"\n"+len);
var oldArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var newArray = [1, 2, 3, 5, 34, 32, 4, 45];
var changes = compare(oldArray, newArray);
var len = changes.relocation.length + changes.insert.length + 1;
alert(newArray +"\n"+conversion(oldArray, changes)+"\n"+len);
var oldArray = [1, 2, 3, 4, 5];
var newArray = [1, 2, 3, 5, 4, 45];
var changes = compare(oldArray, newArray);
var len = changes.relocation.length + changes.insert.length + 1;
alert(newArray +"\n"+conversion(oldArray, changes)+"\n"+len);
Ответить с цитированием
  #65 (permalink)  
Старый 09.12.2013, 15:11
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от cyber
А почему бы не использовать бинарный поиск вместо indexOf
Бинарный есть смысл использовать только на больших множествах.
Ответить с цитированием
  #66 (permalink)  
Старый 09.12.2013, 15:53
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

рони, скорость выполнения ужасная)
http://jsperf.com/compare-arrays-test
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #67 (permalink)  
Старый 09.12.2013, 17:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,114

cyber,
сравнение количества операций для преобразования и длины нового массива ...
function rand()
{  var l = Math.round(Math.random() * 100), a = [];
   for (var i=0; i<l; i++)  {a[i]=Math.round(Math.random() * 100)}
   return a
}

function compare_indexOf(fArr,arr) {

    var search = arr.slice(),
        insert = [],
        remove = [],
        replace = [];

    for(var i = 0, index; i < fArr.length; i++) {

        index = search.indexOf(fArr[i]);

                if(!~index) {

                        remove.push(i);
            continue;
        }

       i != index &&  replace.push({'old': i, 'new': index});

        delete search[index];

        };

    search.forEach(function (elem, i) {
        if(elem)
          insert.push(i);
    });

    return {
        'remove': remove,
        'insert': insert,
        'replace': replace
    }

}
function compare(f, d) {
    var e = {
        relocation: [],
        insert: [],
        length: d.length
    }, c = d + ", " + f ,
        b = f.slice();
    if (c = c.match(/([^,]\S*[^,])(?=,[\s\S]*\s[\s\S]*\1)/g)) {
        c.reverse();
        for (var a = 0; a < c.length; a++) {
            var g = ("" + b).slice(0, ("" + b).lastIndexOf(c[a]) + 1).split(",").length - 1,
                h = c[a].split(",").length,
                k = b.splice(g, h);
            e.relocation.push([g, h]);
            b = k.concat(b)
        }
    }
    for (a = 0; a < d.length; a++) d[a] != b[a] && (b.splice(a, 0, d[a]), e.insert.push([a, d[a]]));
    return e
};
var oldArray = rand();
var newArray = rand();
var time_indexOf = new Date();
var changes = compare_indexOf(oldArray, newArray);
time_indexOf = (new Date()).getTime() - time_indexOf.getTime()
var len_indexOf = changes.remove.length + changes.insert.length + changes.replace.length;
var time = new Date();
var changes = compare(oldArray, newArray);
time = (new Date()).getTime() - time.getTime()
var len = changes.relocation.length + changes.insert.length + 1;
alert('len_indexOf : ' + len_indexOf + ' time: ' + time_indexOf + '\nlen: ' + len + ' time: ' + time + '\nlength : ' + newArray.length);

Последний раз редактировалось рони, 09.12.2013 в 17:34. Причина: добавлено время
Ответить с цитированием
  #68 (permalink)  
Старый 09.12.2013, 17:21
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

рони, а почему у тебя нет массива с элементами которые нужно удалить?

П.с я не пытаюсь доказать что моя функция сравнения лучше, если честно мне всеравно, я оба варианта считаю слишком медленными и остойными)
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #69 (permalink)  
Старый 09.12.2013, 17:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,114

Сообщение от cyber
почему у тебя нет массива с элементами которые нужно удалить?
так удалять то нечего )))
всё лишнее обрезается строкой
Сообщение от рони
b.length = c.length;
Ответить с цитированием
  #70 (permalink)  
Старый 09.12.2013, 17:41
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

рони, т.е нечего?
Если элемента нет во втором массиве, но есть в первом то его нужно удалить.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно найти разрешение рабочей области браузера? Влад Общие вопросы Javascript 3 20.07.2009 10:18
Как найти конец плоского файла Don_001 Общие вопросы Javascript 1 07.07.2009 12:47
Как можно изменить расстояние между панелями overlay и filmstrip в фотогалереи? Honey jQuery 0 29.06.2009 10:16
как найти нужный объект? `p r o x y jQuery 2 05.05.2009 01:12
Как найти путь к файлу для модификации? JuliaMilan Firefox/Mozilla 0 31.03.2009 14:06