Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   нахождение минимума (http://www.flasher.ru/forum/showthread.php?t=103162)

doki 30.10.2007 20:12

нахождение минимума
 
Как найти минимум среди >2 переменных? Math.min работает только для двух
А если у меня переменных 20 штук, мне придется Math.min 19 раз использовать?

etc 30.10.2007 20:18

Код:

var arr = [4,7,8,9,2,4];
function min(arr) {
        var l = arr.length;
        var m = Number.POSITIVE_INFINITY;
       
        while (l--) {
                if (m > arr[l]) {
                        m = arr[l];
                }
        }
       
        return m;
}
trace(min(arr));

Код:

var arr = [4,7,8,9,2,4];
function min(arr) {
        var a = arr.concat();
        a.sort(Array.NUMERIC);
        return a[0];
}
trace(min(arr));


doki 30.10.2007 20:27

спасибо, вот эту штуку не знал sort(Array.NUMERIC)

iSextuS 30.10.2007 22:42

сортировка массива по величине - офигенное решение задачи)
мне даж в голову такое не приходило) :quiet:

etc 30.10.2007 22:51

Оно медленнее первого варианта.

terbooter 31.10.2007 09:32

а как определить которое быстрее, а которое медленнее?
байт код?

Смотрю байт код с помощью ASV4 для обоих вариантов, у второго байт код больше,
это и значит что он медленнее?

etc 31.10.2007 10:14

Нет, по байткоду скорость выполнения определить нельзя.
Скорость выполнения определяется прямо по времени выполнения, простым тестом на пару миллионов итераций. Операции копирования и сортировки медленнее простого обхода массива.

Жень Шень 31.10.2007 11:43

Привет!
Не ставля под сомнения 2-й вариант от __etc, спрошу: "А почему нельзя его сократить до:"
Код:

var arr = [4, 7, 8, 9, 2, 4];
trace(arr.sort()[0]);


etc 31.10.2007 13:02

Потому что ты изменяешь исходный массив.

Котяра 31.10.2007 19:15

ну наверное в случае
Код:

function min(arr:Array)
{
return (arr.sort()[0]);
}

Это не важно..
другой вопрос как расширить функцию
min(i1,12....in)
На произвольное кол-во элементов?

etc 31.10.2007 19:19

Котяра, важно, потому как изменение также происходит.
Код:

function min() {
    return arguments.sort()[0];
}


Жень Шень 31.10.2007 19:30

Цитата:

Сообщение от __etc
Потому что ты изменяешь исходный массив.

Логично! :umnik2:
Тогда так:
Код:

var arr = [4, 7, 8, 9, 2, 4];
function min(arr) {
        var a = arr.slice(0);
        return (a.sort()[0]);
}
trace(min(arr));

:yahoo:

Котяра 31.10.2007 22:32

Цитата:

Сообщение от __etc
Котяра, важно, потому как изменение также происходит.
Код:

function min() {
    return arguments.sort()[0];
}


Т.е. если я передаю в качестве аргумента массив, то массив меняется?
Типа я передаю ссылку на массив?
Стрянно.. щас потестить не могу, но я думал, что это касается только Object и производных..(мувики итп):eek:

Цитата:

Сообщение от Жень Шень
Логично! :umnik2:
Тогда так:
Код:

var arr = [4, 7, 8, 9, 2, 4];
function min(arr) {
        var a = arr.slice(0);
        return (a.sort()[0]);
}
trace(min(arr));

:yahoo:

а чем в этом случае slice лучше? slice ведь не только возвращает элемент, но и портит массив))))) если он портится, в чём я не уверен.

etc 31.10.2007 22:35

А массив тоже объект и тоже относится к сложным типам данных.

etc 31.10.2007 22:37

Цитата:

Сообщение от Жень Шень
Логично! :umnik2:
Тогда так:
Код:

var arr = [4, 7, 8, 9, 2, 4];
function min(arr) {
        var a = arr.slice(0);
        return (a.sort()[0]);
}
trace(min(arr));

:yahoo:

Аргумент в slice не обязательно указывать. В целом этот вариант ничем не отличается от моего.

Жень Шень 01.11.2007 11:31

Цитата:

Сообщение от __etc
В целом этот вариант ничем не отличается от моего.

Привет!
А так?
Код:

var arr = [4, 7, 8, 9, 2, 4];
trace (arr[arr.sort(Array.RETURNINDEXEDARRAY)[0]]);
trace(arr);// контроль неизменяемости

:victory:

Заодно спасибо, __etc, за то, что наконец разобрался с option для сортировки массивов. До этого не приходилось применять. А увидев у тебя в коде NUMERIC, поэксперементировал. Результат выше.

etc 01.11.2007 12:55

Да вы извращенец, батенька. К чему этот код? Он один фиг работает медленнее, чем простой while.

Жень Шень 01.11.2007 13:04

Ну! Сразу извращенец! :mad:
Эксперементатор, куда ни шло. Познаю по случаю все возможности и тонкости скрипта. Я же не утверждал, что код этот - панацея. Да и не собираюсь тягаться... с гуру, модераторами.


Часовой пояс GMT +4, время: 03:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.