![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Позвольте, я еще покажу вам один код по наитию Мука.
Вот что он мне поручил: "Прикрепите нечувствительную функцию сортировки по алфавиту к классу Array в качестве наследуемого метода." Тогда у меня и возник вопрос по области видимости аргументов. Такая не слишком корявая? |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
такая оч пральная
|
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
вобщем-то всё правильно и работает.
но. имха, не стоит отступать от буквы мануала там где это не принципиально :) ведь сказано же: Цитата:
1. твой вариант. Array.prototype.compareFunction = function(element1, element2) {
return (element1.toLowerCase()>element2.toLowerCase());
};
Array.prototype.sortbyAlph = function() {
this.sort(this.compareFunction);
};
//
x = [];
for (var i = 0; i<100; i++) {
x.push(chr(32+i));
}
//
heap = [];
for (var i = 0; i<10; i++) {
heap.push(x.concat());
}
var s = getTimer();
for (var i = 0; i<10; i++) {
heap[i].sortbyAlph();
}
var e = getTimer();
trace(e-s);
Array.prototype.compareFunction = function(element1, element2) {
var e1 = element1.toLowerCase();
var e2 = element2.toLowerCase();
return Number(e1<e2 || (e1>e2)*(-1));
};
Array.prototype.sortbyAlph = function() {
this.sort(this.compareFunction);
};
//
x = [];
for (var i = 0; i<100; i++) {
x.push(chr(32+i));
}
//
heap = [];
for (var i = 0; i<10; i++) {
heap.push(x.concat());
}
var s = getTimer();
for (var i = 0; i<10; i++) {
heap[i].sortbyAlph();
heap[i].reverse();
}
var e = getTimer();
trace(e-s);
причем это взят массив всего в 100 элементов, состоящий из чаров. если возьмем строки длиной больше 1 - разница будет еще существеннее, что-то мне подсказывает. (не проверял) Последний раз редактировалось Nox Noctis; 21.04.2004 в 01:46. |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Nox Noctis, твоя compareFunction - гимн остроумию, но вот результаты моих пяти тестов:
У меня trace(e-s): 4859 4897 4834 4905 5048 У тебя trace(e-s): 6908 6838 6863 6815 6828 Хотя твой пример должен отрабатывать совершенно точно быстрее. (??) У меня еще два вопроса: a)Зачем нужна heap[i].reverse() в твоем примере? b)Странная строчка "heap.push(x.concat())", Moock said, concat() должен принимать аргументы и возвращать новый массив. Reference said: "concat returns: Nothing". кому верить? |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
тупо копирую код, который выше и проверяю:
вариант 1: 3378 3371 3608 3604 3355 вариант 2: 2836 2858 2844 2823 2853 тако бенчмарк не корректен до истинных числовых значений, потому что у меня тут еще до фига всего работает. но условия, в которых выполняется скрипт - точно одни и те же. пожтому сравнивать вполне уместно. ээ... я неспроста основные сведения о конфигурации компа на котором тестил написал. ты на каком компе проверял ? вопрос а) реверс нужен потму что иначе сортировка идет в нисходящем порядке :) а надо в восходящем. признаю, я скопировал код из своей работы, а не писал его заново :) вопрос б) конкат() - это простой способ скопироваьт массив. получить копию массива без прямого перебора :) не верь мануалу, мук дело говорит :) конкат слепливает исходный массив и то который в параметре. а если в параметре пусто - то возвращается НОВЫЙ массив, содержащий все эелементы исходного. |
|
|||||
|
Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
|
Вариант 1:
4444 4433 4430 4430 Вариант 2: 6342 6317 6308 6315 Компутер П3, 866МГц, 384МГб
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный. (S.Wizard) |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
хотите сказать мой комп мне подыгрывает ?
завтра на работе проверю. там машина-зверь.. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
оййй... знаете, я тут пробакланил слегка :)
я тестил в редакторе МХ2004, публикуя под шестёрку и получал хорошие результаты :) потестил в редакторе МХ2003 - результат очень плохой :) тут вы правы. значит этот код хорошо выполняется там, где установлен седьмой плеер, и по-тормозному выполняется там где нет семёрки. такие дела... |
|
|||||
|
Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
|
Зная честность Nox(a) и то, что он не будет подтасовывать результаты теста, пребываю в недоумении. Перезагружаюсь в Windows 98. Проверяю. Результаты те же. Перегружаюсь в Windows 2003 Server. Результаты немного лучше, но соотношение то же, в пользу первого варианта. Чешу затылок. Потом вспоминаю, что Nox как-то писал, что Flash 2004 MX у него открыт постоянно. Ага! Flash 2004!
Открываю его, проверяю, и вот что получается: Если в сеттинге установить "для 6-го плеера", то результат тот, который я написал. Но, если установить "для 7-го плеера", то результат такой: Вариант 1 2400 2395 2395 2395 Вариант 2 2020 2012 2015 2012 Ups, я, по-моему, опаздал. ![]()
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный. (S.Wizard) |
|
|||||
|
Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
|
Зная честность Nox(a) и то, что он не будет подтасовывать результаты теста, пребываю в недоумении. Перезагружаюсь в Windows 98. Проверяю. Результаты те же. Перегружаюсь в Windows 2003 Server. Результаты немного лучше, но соотношение то же, в пользу первого варианта. Чешу затылок. Потом вспоминаю, что Nox как-то писал, что Flash 2004 MX у него открыт постоянно. Ага! Flash 2004!
Открываю его, проверяю, и вот что получается: Если в сеттинге установить "для 6-го плеера", то результат тот, который я написал. Но, если установить "для 7-го плеера", то результат такой: Вариант 1 2400 2395 2395 2395 Вариант 2 2020 2012 2015 2012 Ups, я, по-моему, опоздал. ![]()
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный. (S.Wizard) |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Возможно cFunction будет работать в семерке еще эффективней если учитывать три результата:
Array.prototype.compareFunction = function(element1, element2) {
var e1 = element1.toLowerCase();
var e2 = element2.toLowerCase();
if (e1 == e2) {
return 0;
} else {
return Number(e1<e2 || (e1>e2)*(-1));
}
};
В любом случае cFunction Nox Noctis эстетичнее : ) но вот штуку с конкатом я не понял. а потому взял и вырезал ее: на heap это не отыгралось, а время отработки увеличилось на 20%. |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
"штуку с конкатом" я теперь понял...
но меня смущает, что время обработки heap увеличивается: без конката - каждый раз обрабатывается один и тот же массив, тогда как с конкатом десять разных... а время на отработку одного все равно больше... почему? хотя вы наверное забыли этот вопрос, да и такая тема просит отдельного топика |
![]() |
Часовой пояс GMT +4, время: 06:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|