Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Исключение элемента массива с наибольшей длинной из множества (http://www.flasher.ru/forum/showthread.php?t=169562)

zorexundra 07.10.2011 14:34

Исключение элемента массива с наибольшей длинной из множества
 
Здравствуйте!
Подскажите, пожалуйста, алгоритм, код.
Задача:
Есть множество массивов с различной длинной. Необходимо исключить элемент из массива, который имеет наибольшую длинну. На следующем шаге действие повторяется. И так до тех пор, пока длинна всех массивов не станет равной нулю. Тобишь необходимо выбрать все элементы множества массивов.

trng 07.10.2011 14:43

1. В actionscript нет языковой конструкции "множество". Что вы имеете ввиду? многомерный массив?
2. ну а сами-то что-то пробовали написать?

goodguy 07.10.2011 15:00

Для начала я б затолкал все эти массивы в другой массив, для упрощения задачи. Потом отсортировал бы их по длине, например так:
Код AS3:

var firstArray:Array = [3, 4, 4, 5, 5, 5, 4, 4, 7];
var secondArray:Array = [3, 6, 4, 5];
var thirdArray:Array = [4, 6, 7, 8, 9, 10];
 
var allArrays:Array = [];
allArrays.push(firstArray, secondArray, thirdArray);
allArrays.sortOn("length", Array.NUMERIC | Array.DESCENDING); // сортируем, ставя самый длинный массив на первое место
while (firstArray.length + secondArray.length + thirdArray.length != 0) {
  for (var i:int = 0; i < allArrays.length; i++) {
      if (allArrays[i].length - 1 > 0) { // если длина текущего массива, минус один элемент больше нуля, срубаем последний элемент
            allArrays[i].pop();
      } else continue; // если == 0, продолжаем цикл
  }
}

Как-то так.
П.с. хз как будет работать, тестировать было в лом ))
так что код - чистая импровизация, я б даже сказал, частично *****код ) Если подумать, то можно найти более интересное решение

in4core 07.10.2011 15:07

Цитата:

else continue
Не лишняя ли конструкция?

zorexundra 07.10.2011 15:08

goodguy, решение вполне очевидное: отсортировать перечень массивов по длинне и отбирать всегда из первого массива. А в чём Вы видите проблему?
За подсказку спасибо!

GBee 07.10.2011 15:13

Цитата:

goodguy, решение вполне очевидное: отсортировать перечень массивов по длинне и отбирать всегда из первого массива. А в чём Вы видите проблему?
В том, что это решение не решает вашу задачу.

Добавлено через 3 минуты
Код AS3:

var firstArray:Array = [3, 4, 4, 5, 5, 5, 4, 4, 7];
var secondArray:Array = [3, 6, 4, 5];
var thirdArray:Array = [4, 6, 7, 8, 9, 10];
 
var allArrays:Array = [firstArray, secondArray, thirdArray];
 
while(true)
{
    allArrays.sortOn("length", Array.NUMERIC | Array.DESCENDING); // сортируем, ставя самый длинный массив на первое место
    if(allArrays[0].length==0)
          break;
    else
          trace(allArrays[0].pop());
}


goodguy 07.10.2011 15:17

Цитата:

перечень массивов по длинне и отбирать всегда из первого массива
А, ну тогда все гораздо проще. Я то думал надо по-очереди отнимать по одному элемента у каждого массива, пока они все не будут равными нулю.
Тут можно просто переключаться на следующий массив, когда первый пуст, и исключать пустой из списка проверки.
Цитата:

Не лишняя ли конструкция?
Лишняя :D

Tasmanec 07.10.2011 16:07

а вот так не пойдет?

Код AS3:

var myMassiv: Array = new Array();
var maxLenght:Number;  //максимальная длина массива из множества массивов
var idArray: Number = 0//номер массива с максимальной длиной на данном шаге
 
 
//записываете свои массивы в MyMassiv любым способом
.....
 
 
//
while(maxLenght > 0)
{
for(var i:int = 0; i < myMassiv.lenght; i++  )
{
if (maxLenght < myMassiv[i].lenght)
    {
    maxLenght = myMassiv[i].lenght;
    idArray = i;
    }
 
}
 
........//делаете, что надо с каким Вам нужно элементом массива с максимальной длинной
        //это будет массив myMassiv[idArray]
 
}


GBee 07.10.2011 16:11

Цитата:

а вот так не пойдет?
Может и пойдет, надо тестить по времени. Правда ваш пример оптимизнуть можно (больше вместо не меньше, length не теребить).

zorexundra 07.10.2011 16:14

Цитата:

Сообщение от GBee (Сообщение 1037640)
...В том, что это решение не решает вашу задачу.
..

goodguy, спасибо, что подкинул идею. GBee, Вам большое спасибо за реализацию!

Tasmanec, интересное решение в плане неочевидности реализации.
Кто-нибудь владеет навыком быстрого тестирования быстродействия кода? Какой метод оптимальней?


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

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