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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.04.2014, 22:28
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 31  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
if((arr[i] + 1) != (arr[i + 1]) && arr[i + 1])
А этому Вас в какой секте научили?) Тут первым делом лучше проверить, есть ли arr[i + 1].
И старайтесь не использовать push, заменяйте его на, а splice это вообще кошмар.
Код AS3:
var count:int;
missingArr[count++] = arr[i + 1];
Добавлено через 1 минуту
И все arr[i + 1] и arr[i] + 1 лучше охранять в локальные свойства.

Старый 28.04.2014, 22:35
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 32  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
PHP код:
Тут первым делом лучше проверитьесть ли arr[1]. 
Акакак разница?
Логическому "И" пофиг, какое выражение идёт спереди, а какое сзади.
Оно возвратит true, если оба выражения верны.
Так я привык писать.
Цитата:
И старайтесь не использовать push
Спасибо за совет.
Правда от этого код станет вообще нечитабелен.
Поэтому push имеет свои плюсы.

Добавлено через 2 минуты
Цитата:
а splice это вообще кошмар.
А splice - это единственный способ добавить что-то внутрь массива без кастом методов.

Добавлено через 4 минуты
PHP код:
И все arr[1и arr[i] + 1 лучше охранять в локальные свойства
Я постарался ужать код.
__________________
There is no thing in this world that is not simple.

Старый 28.04.2014, 23:02
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 33  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Ого, 4 страницы.
Спасибо за подсказки. Попробую понять.

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
var count:int;
missingArr[count++] = arr[i + 1];
Я придумал нечто почитабельней в замену push:
Код AS3:
arr[arr.length] = ...;
__________________
There is no thing in this world that is not simple.

Старый 28.04.2014, 23:27
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 35  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Нет Вы придумали ещё один push. я про push сказал потому, что уже не первый раз его у Вас вижу.
Он работает медленнее чем [count++]. push == 300, count++ == 130. А Ваша новая затея замедляет тем, что Вы геттер arr.length вызываете каждый раз, а геттер это медленнее и ещё он наверное инициирует пересчет всего массива и его время составляет 1800. Все скорости мерил на 1 мил итераций.

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
и ещё он наверное инициирует пересчет всего массива и его время составляет 1800.
Что-то мне подсказывает, что эдобовцы не тупые, и имеют private переменную _length, которую меняют при добавлении нового элемента.
Вот это может подтвердить моё предположение:
Код AS3:
var a:Array = new Array(5);
//Массив пустой
trace(a.length);//5
 
//Или вот
var b:Array = [];
b.length = 6;
//Массив опять же пустой
trace(b.length);//6
Хотя, возможно, что там просто резервируется память под грядущие элементы. Поэтому не могу утверждать 100%.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 29.04.2014 в 00:10.
Старый 29.04.2014, 00:21
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 37  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Цитата:
Хотя, возможно, что там просто резервируется память под грядущие элементы. Поэтому не могу утверждать 100%.
Вообще-то как и в случае с ByteArray там памяти выделяется сразу достаточно много, и при нехватке резервируется в 2 раза больше и так далее. Следовательно поле length никак не связано с потреблением памяти и уж тем более ничего не объясняет. Только ассемблер покажет истину. Что проверить не сложно - достаточно скомпилить под iOS и скопировать папку bin-release-temp.

Добавлено через 2 минуты
Цитата:
toFL Огромное Вам Спасибо! Лучше кода и быть не может.
Я так полагаю, что мой вариант должен быть самым производительным

Старый 29.04.2014, 00:46
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 38  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Я так полагаю, что мой вариант должен быть самым производительным
Массив из тысячи элементов и специально удалял 500 элемент: Ваш - 315, indexOf - 24 800.

Добавлено через 11 минут
И немного поправил
Код AS3:
private function find(array:Array):int
{
	var length:int = array.length;
	var summa:int = 0;
 
	for (var i:int; i < length; ++i) 
			summa += array[i];
 
	return (length + 2) / 2 * (length + 1) - summa;
}
Добавлено через 13 минут
И итерационному свойству не присваивать значение, то в десятки раз быстрей.

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
И итерационному свойству не присваивать значение, то в десятки раз быстрей.
Тогда уж и summ не присваивайте значение.
А ещё, in4core был прав.
У вас одно на русском, другое на английском. Просто кошмар
__________________
There is no thing in this world that is not simple.

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Можно все числа от 1 до N сложить и получить их общую сумму. Затем сложить все элементы массива. Если мы точно знаем, что из массива удалили только одно число, значит разница сумм будет равна искомому числу. Типа вот так:

Код AS3:
var array:Array = ...;
var n:int = array.length + 1; // потому что одно число удалили.
var nSum:int = 0;
var arrSum:int = 0;
 
for (var i:int = 0; i < n; i++)
{
    nSum += i;
 
    if ((n - i) > 1) // можно проверять через array.length, но это типа долго
    {
        arrSum += array[i];
    }
}
 
trace("missing number is: ", nSum - arrSum);
PS
а, ну да, все уже придумали до меня да еще и через прогрессию =) Ну все равно не очень сложная задачка.
__________________
...вселенская грусть

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

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

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


 


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


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