![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Цитата:
Выбор из хэш-таблицы будет на порядок быстрее, а не та разница в 20-10 процентов. |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 141
|
Цитата:
Не могу сказать какие результаты будут на продуктивной версии FP, лень заниматься ненужными вещами, но по моему скромному мнению результаты будут идентичными в процентном соотношении, возможно, время несколько сократится, но и в это я не охотно верю. Вообще люди любят заниматься вещами, которые не нужно делать, и конкретно данное сравнение производительности очень яркий тому пример. |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 108
|
Цитата:
Ты же даже не написал с каким типом данных работаешь. Нужно сравнить? |
|
|||||
|
Modus ponens
|
На сколько я знаю, байткод который генерится в обоих случаях - разный, но нужно понимать, что в случае с switch компилятор все равно сгенерирует какое-то подобие default кейса - куда выполнение попадет, если ни одно из сравнений не сработало, и откуда продолжит обычное выполнение. Но это мелочи.
На уровне байткода switch не оптимизируется в хеш-таблицу в AS3. Он мог бы в принципе оптимизироваться JIT компилятором, но это было бы платформо-зависимо. Еще нужно понимать, что switch - более сложная конструкция, и занимает больше регистров (ему еще нужно хранить где-то переменную-счетчик посещенных кейсов). Так что в зависимости от количества свободных регистров производительность может меняться. Но самое главное в том, что какой бы из двух способов ни был быстрее в ваших тестах, даже если вы их грамотно провели - нет никакой теоретической необходимости для того, чтобы один из способов был быстрее, и рассчитывать на это - бессмысленно. Если на каком-то конкретном компьютере, операционной системе и версии плеера вы получили какой-то результат - это мало о чем говорит даже для конкретной ситуации, не говоря уже о других ситуациях. Кроме того, разница на столько не принципиальна, что в AS3 нет просто физически возможности решать такие задачи, где эта разница на что-то повлияла бы. Т.е. если бы мы говорили о суперкомпьютерах, где рассчитывают взаимодействие молекул белков, или траектории спутников - тогда, возможно, это имело бы смысл, и то в самую последнюю очередь. В AS3 вы по другим причинам не сможете даже взяться за решение задачи, на решении которой такая разница может хоть как-то отразиться. И последнее. В строгом смысле слова (но по этому поводу можно начать отдельную дискуссию). if и switch - не операторы. Их иногда называют операторами благодаря плохому переводу книжек посвященных теории компиляторов (в разделе грамматик), где операторы-функции и операторы - ключевые слова в выражениях перевели одинаково. Я все-таки за то, чтобы операторами называть только разновидность функций которые в силу придурковатости языка на котором мы пишем мы должны использовать не так, как типичные функции. Т.е. Для языка AS типичная функция (ее применение) записывается как а "дурацкие" функции могут записываться как Потому что кому-то показалось, что чем запутаннее, тем понятнее. if и switch - в AS - это не функции (есть языки, в которых это функции), а части выражений. Внутри этих выражений они выступают в качестве "оператора" этого выражения, но для избежания путаницы с настоящими операторами, и с точки зрения синтаксиса языка - это ключевые слова. Хотя в вопросе однозначно имелись в виду конструкции, в которых эти ключевые слова используются. Потому что само по себе ключевое слово if или switch, хотите вы его назвать оператором, или нет, не выполняется ни за какое время т.как вообще не выполняется. Выполняется код в конструкции.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
а может кто-нибудь рассказать что такое хэш-таблица, и с чем ее едят? или хотя бы ссылочку.
|
|
|||||
|
Modus ponens
|
Хеш-таблица - коллекция в которой доступ к элементам осуществляется по ключам. Ключи хешируются, т.е. для создания ключей используется функция генерирующая элементы фиксированого размера (как правило числа) с сохранением уникальности. Таким образом достигается фиксированная скорость доступа к элементам коллекции.
Как правило хеш-таблицы не упорядочены. Т.е. ключи могут встречаться в произвольном порядке. Очень часто в качестве исходных ключей выступают строки, реже - числа или символы (специальный вид неизменяемых строк, таких в AS нет), но в принципе может быть что угодно. Типичная функция хеширования - MD5, но их, опять же, есть много разных. Типичная реализация хеш-таблицы (для того, чтобы обеспечить фиксированое время доступа) - красно-черное (бинарное) дерево. Т.е. ключи складываются в бинарное дерево. Но бывают еще и реализации на списках, или на trie - своеобразный вид коллекции, где ключи имеющие одинаковые фрагменты могут совместно использовать эти фрагменты - это характерно для больших неизменяемых таблиц, т.как позволяет экономить память и немного быстрее обычного бинарного дерва, но затратно по созданию. В AS3 есть два встроенных класса хеш-таблиц, Object (и любой динамический класс) и Dictionary. Первые используют только строки в качестве ключей, второй - любые "сложные" объекты. Т.е. на самом базисном уровне, любой AS3 объект является в реализации хеш-таблицей с ключами-строками, но Dictionary отличается тем, что может, дополнительно использовать другие типы данных в качестве ключей.
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 05:30. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|