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

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

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

Регистрация: Apr 2006
Сообщений: 165
Отправить сообщение для artfabrique с помощью ICQ
Question Оптимизация сортировок и выборок.

Народ а может кто нить кинуть ссылок на статьи по сравнительным скоростям сортировок и выборок в массивах и векторах?

Ситуация такая: Есть tiles:Vector.<Vector.<Tile>> , где Tile - это класс тайл игрового поля.
У каждого экземпляра Tile есть свойство state:uint (0-4)
Мне нужно выбрать из массива tiles выбрать все элементы Tile со state == 3, например.
При обычном поиске это сильно грузит процессор. Также пробовал переложить все содержимое в одномерный массив и делал sotrOn то тоже очень тормозит.
Основная проблема, что iles:Vector.<Vector.<Tile>> — это 2-мерный вектор 350*350 элементов и каждый весит около 2кб.
__________________
To beer or no to beer?
That is the question...

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Я бы делал все таки одномерным вектором.
Для выборок можно создать несколько масивов, в которых хранить тайлы с одинаковым значением state
Сортировать можно QuickSort'ом, реализации есть в интернете
Насчет веса элемента - не совсем понятно, какое это имеет значение?
__________________
...вселенская грусть

Старый 09.02.2011, 16:03
shootkin вне форума Посмотреть профиль Отправить личное сообщение для shootkin Найти все сообщения от shootkin
  № 3  
Ответить с цитированием
shootkin

Регистрация: Apr 2010
Сообщений: 32
Использовать Vector.filter, например:
Код AS3:
var select_state : uint = 0;
var selectByState : Function = function( item:Tile, index:int, vector:Vector.<Tile> ):Boolean
{
    return item.state == select_state;
};
select_state = 3;
var filtered_tiles : Vector.<Tile> = tiles.filter( selectByState );
И массив сделать, конечно, одномерным. Это в первую очередь.

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

Регистрация: Apr 2006
Сообщений: 165
Отправить сообщение для artfabrique с помощью ICQ
потому что при создании и добавлении элементов в массив создается его копия с новым элементом а потом удаляется старая, ибо память под массив резервируется и он является в ней неразрывным. И 350*350*2кб = 240mb памяти.

Добавлено через 2 минуты
Цитата:
Сообщение от shootkin Посмотреть сообщение
Использовать Vector.filter, например:
Код AS3:
var select_state : uint = 0;
var selectByState : Function = function( item:Tile, index:int, vector:Vector.<Tile> ):Boolean
{
    return item.state == select_state;
};
select_state = 3;
var filtered_tiles : Vector.<Tile> = tiles.filter( selectByState );
И массив сделать, конечно, одномерным. Это в первую очередь.
Тааак.. ща проверю по скорости интересно, что быстрее sortOn или filter
__________________
To beer or no to beer?
That is the question...

Старый 09.02.2011, 16:20
shootkin вне форума Посмотреть профиль Отправить личное сообщение для shootkin Найти все сообщения от shootkin
  № 5  
Ответить с цитированием
shootkin

Регистрация: Apr 2010
Сообщений: 32
Цитата:
Сообщение от artfabrique Посмотреть сообщение
потому что при создании и добавлении элементов в массив создается его копия с новым элементом а потом удаляется старая, ибо память под массив резервируется и он является в ней неразрывным. И 350*350*2кб = 240mb памяти.
Нет. В массиве не сами элементы, а референсы на них. Сами элементы при операциях над массивом не уничтожаются и не создаются.

Старый 09.02.2011, 16:28
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 6  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Preprocessing, preprocessing, preprocessing (c), N-author`s.

Я не думаю, что господа Тайлы изменяются с частотой раз в секунду. Перед началой игры можно запомнить эти массивы уже отфильтрованные.

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

Регистрация: Apr 2006
Сообщений: 165
Отправить сообщение для artfabrique с помощью ICQ
Цитата:
Сообщение от shootkin Посмотреть сообщение
Нет. В массиве не сами элементы, а референсы на них. Сами элементы при операциях над массивом не уничтожаются и не создаются.
Я просто основывался на сведеньяю C++ разраба, друга. Он сказал, что в массиве хранятся сами данные. И подумалось, что плеер - это интерпретатор все таки и методы работы с массивами и векторами — зеркальные

Добавлено через 5 минут
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Preprocessing, preprocessing, preprocessing (c), N-author`s.

Я не думаю, что господа Тайлы изменяются с частотой раз в секунду. Перед началой игры можно запомнить эти массивы уже отфильтрованные.
Количество тайлов не меняется, а вот состояние - да. По сути так щас и есть — генерится Vector.<Vector.<Tiles>> в самом начале. Нужен рандомный выбор из групп тайлов с разным состоянием. Для этого и требуется из двухмерного вектора получить одномерный вектор тайлов с одинаковым стейтом. И получить хотябы один раз, а потом изменять добавляя и удаляя элементы.
__________________
To beer or no to beer?
That is the question...

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
потому что при создании и добавлении элементов в массив создается его копия с новым элементом а потом удаляется старая, ибо память под массив резервируется и он является в ней неразрывным. И 350*350*2кб = 240mb памяти.
Эмм... с чего бы? Простые типы передаются по значению, остальное - по ссылке. Грубо говоря, почти любая переменная в AS3 - это указатель.

Цитата:
Тааак.. ща проверю по скорости интересно, что быстрее sortOn или filter
Уже проверено - самописные функции сортировки могут быть быстрее (для Vector'а почти не заметно, т.к. он типизирован, для Array разница ощутимая). Ну и, да, preprocessing

Цитата:
В массиве не сами элементы, а референсы на них
Кстати, в AS3 массивов, как таковых, нет. Есть только списки.
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 09.02.2011 в 16:52.
Старый 09.02.2011, 17:39
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 9  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Простые типы передаются по значению
Для разработчика это выглядит именно так, но простые типы тоже передаются как ссылка (до определенного момента).

Старый 09.02.2011, 18:02
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 10  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Интересно, спасибо. Только не понял - чем и где определяется момент?
__________________
...вселенская грусть

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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