Форум 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=135214)

alexcon314 19.01.2010 08:35

bas784, можно большой массив разбить на части по какому-то критерию и поиск вести только в части массива, можно подумать об индексации элементов массива, но это может усложнить процедуру добавления элементов в массив.
А от перебора (явного или неявного) вас здесь ничто не избавит.

bas784 19.01.2010 09:17

Только зачем дополнительно использовать ключ? есть же индекс Array;
Вот по нему и ищем
Код AS1/AS2:

var A=Array();
      A[i]=Value;//i=KeyID


Hauts 19.01.2010 09:21

Так вам поиск по ключу? Или по значению?

bas784 19.01.2010 09:42

По значению опредилить индекс массива
Значения - числа

Hauts 19.01.2010 10:32

Код AS1/AS2:

Array.prototype.pushIndexed = function() {
        if (this._indexes == undefined) {
                this._indexes = [];
        }
        for (var i in arguments) {
                this.push(arguments[i]);
                this._indexes[arguments[i]] = i;
        }
        return this.length;
};
Array.prototype.searchIndexed = function(n:Number) {
        return this._indexes[n];
};
var testArray = [];
testArray.pushIndexed(20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1);
 
trace(testArray.searchIndexed(15)); // 5
trace(testArray.searchIndexed(20)); // 0
trace(testArray.searchIndexed(1)); // 19
trace(testArray.searchIndexed(6)); // 14

При условии, что значения не повторяются.

wvxvw 19.01.2010 11:03

Есть такая штука, как бинарное дерево, если для поиска элементов в упорядоченом массиве (ну, в данном случае, не массиве) - самый ИМО подходящий вариант.
Смысл реализации простой: в каждом элементе есть "переключатель" работающий по принципу "если условие выполнилось - перейти на индекс #, а если нет - перейти на индекс ##" - в таком случае витков цикла будет меньше (на сколько меньше - не скажу, но я думаю, хорошие люди уже это давно посчитали и описали в какой-нибудь википедии).

bas784 19.01.2010 11:37

Интерестный подход с индексами в качестве значений. А можно ли перегрузить оператор = в Array ?

например

Код AS1/AS2:

var a:Array;
//Чтобы например при выполнении
a[0]=23;
// Дополнительно записалось
a.Index[23]=0;


Hauts 19.01.2010 11:59

Код AS1/AS2:

var a = [];
a._indexes = [];
 
a[0] = 23;
a._indexes[23] = 0;

Ну вот как-то так. Надеюсь я вам помог.

bas784 19.01.2010 12:32

К сожалению в моём случае в качестве значений в масиве выступают вещественные числа с разными знаками. Так что такая индексация не подходит.
Но в качестве будущей заметки на частный случай поиска уникальных чисел метод изложеный выше очень даже пригодиться. Так что конечно же спасибо за помощь.
А а мне чувствую придётся реализовать хотя бы тот же метод половивого деления.
Плохо что в библиотеках нет алгоритмов для поиска.

Hauts 19.01.2010 12:40

Код AS1/AS2:

var a = [];
a._indexes = {};
a[123] = -23.375;
a._indexes[-23.375] = 123;
trace(a._indexes[-23.375]); // 123

Не стоит отчаиваться. :)


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

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