Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.10.2011, 14:34
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 1  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
Question Исключение элемента массива с наибольшей длинной из множества

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

Старый 07.10.2011, 14:43
trng вне форума Посмотреть профиль Отправить личное сообщение для trng Найти все сообщения от trng
  № 2  
Ответить с цитированием
trng

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

Старый 07.10.2011, 15:00
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 3  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Для начала я б затолкал все эти массивы в другой массив, для упрощения задачи. Потом отсортировал бы их по длине, например так:
Код 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, продолжаем цикл
   }
}
Как-то так.
П.с. хз как будет работать, тестировать было в лом ))
так что код - чистая импровизация, я б даже сказал, частично *****код ) Если подумать, то можно найти более интересное решение


Последний раз редактировалось goodguy; 07.10.2011 в 15:04.
Старый 07.10.2011, 15:07
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
else continue
Не лишняя ли конструкция?
__________________
Марк Tween

Старый 07.10.2011, 15:08
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 5  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
goodguy, решение вполне очевидное: отсортировать перечень массивов по длинне и отбирать всегда из первого массива. А в чём Вы видите проблему?
За подсказку спасибо!

Старый 07.10.2011, 15:13
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 6  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
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());
}
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.


Последний раз редактировалось GBee; 07.10.2011 в 15:17.
Старый 07.10.2011, 15:17
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 7  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
перечень массивов по длинне и отбирать всегда из первого массива
А, ну тогда все гораздо проще. Я то думал надо по-очереди отнимать по одному элемента у каждого массива, пока они все не будут равными нулю.
Тут можно просто переключаться на следующий массив, когда первый пуст, и исключать пустой из списка проверки.
Цитата:
Не лишняя ли конструкция?
Лишняя

Старый 07.10.2011, 16:07
Tasmanec вне форума Посмотреть профиль Отправить личное сообщение для Tasmanec Найти все сообщения от Tasmanec
  № 8  
Ответить с цитированием
Tasmanec
 
Аватар для Tasmanec

Регистрация: Aug 2011
Сообщений: 35
Отправить сообщение для Tasmanec с помощью Skype™
а вот так не пойдет?

Код 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]
 
}
__________________
Нельзя передать сложность, а только знание о ней.


Последний раз редактировалось Tasmanec; 07.10.2011 в 17:04.
Старый 07.10.2011, 16:11
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 9  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
а вот так не пойдет?
Может и пойдет, надо тестить по времени. Правда ваш пример оптимизнуть можно (больше вместо не меньше, length не теребить).
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 07.10.2011, 16:14
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 10  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
Цитата:
Сообщение от GBee Посмотреть сообщение
...В том, что это решение не решает вашу задачу.
..
goodguy, спасибо, что подкинул идею. GBee, Вам большое спасибо за реализацию!

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


Последний раз редактировалось zorexundra; 07.10.2011 в 16:20.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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