XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Игрострой> Общий форум
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
ScorpioT1000, занимайся ты таким извратом в проекте вместо полезной работы, сидел бы без работы <3
Старый 22.01.2014, 20:53
ScorpioT1000
Работаем
offline
Опыт: отключен
Clamp, у меня такая работа - отнимать проекты у таких как ты и за доплату делать что-то быстрое и юзабельное ;)
ScorpioT1000 добавил:
Mihahail, я точно не знаю, может это не та коллекция
в плюсах есть std::map это сортированное дерево, если туда всунуть в <double, int> элемент например дерево 123=0, 456=1, 789=2, а я всуну 200, можно с легкостью найти предыдущий 123=0
причем оно будет сделано в 1-2 операции (а при 10000 элементах в 7-15 операций)
когда перебор будет в худшем случае 10000 вызовов
с хешмапом еще быстрей, но у хешмапа может не быть методов взять след/пред элемент
Старый 22.01.2014, 20:57
Hanabishi
COOL STATUS
offline
Опыт: отключен
ScorpioT1000, а сортирует его святой дух чтоли? По ходу дела это обыкновенный класс, у которого внутри функция сортировки, которая так же циклом перебирает себя.
Старый 22.01.2014, 21:01
ScorpioT1000
Работаем
offline
Опыт: отключен
Hanabishi, см мой последний пост) если там дерево вместо листа или выборка идет по типу "подели на два и сравни", то оно работает быстро
Старый 22.01.2014, 21:05
Hanabishi
COOL STATUS
offline
Опыт: отключен
ScorpioT1000, неа. Пишут, что этот ОЧЕНЬ медленный.
((цитата
SortedList<TKey, TValue> is simply an array that grows over the time.
Every time you insert an element, it first check if the array has enough capacity, if not, a bigger array is recreated and old elements are copied into it (like List<T>)
After that, it searches where to insert the element, using a binary search (this is possible since the array is indexable and already sorted).
To keep the array sorted, it moves (or pushes) all the elements situated after position of element to be inserted by one position (using Array.Copy()).
That explains why performance of SortedList is so bad when you insert unsorted elements. It has to re-copy some elements almost every insertion. The only case it has not to be done is when the element has to be inserted at the end of the array.
))
Но есть класс получше, а именно SortedDictionary<TKey, TValue>
((цитата
SortedDictionary<TKey, TValue> is different and use a binary tree to insert and retrieve elements. It also has some cost at insert because sometimes the tree need to be re-balanced (but not every insertion).
Performance is quite similar while searching an element with SortedList or SortedDictionary because they both use a binary search.
))
Старый 22.01.2014, 21:14
ScorpioT1000
Работаем
offline
Опыт: отключен
ну вот, оно какраз =)
Старый 22.01.2014, 21:17
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
ScorpioT1000:
у меня такая работа - отнимать проекты у таких как ты и за доплату делать что-то быстрое и юзабельное
я дизайнер, удачи напилить нечто "более быстрое и юзабельное" на этом поприще)
программист на фулставке должен пилить код быстро, излишняя оптимизация вредна, и ты это знаешь)
Старый 22.01.2014, 21:17
DioD

offline
Опыт: 45,134
Активность:
я в таких случаях описываю функцией или двумя функциями.
если уровень 500 опыта то достаточно опыт делить на 500 чтобы его получить, тут всё просто и не надо вообще никаких явных проверок делать.
если первые уровни идут иначе, вводим вторую функцию, которая в зависимости от ввода уменьшит или увеличит вывод
result = XP \ 500
result = result + correctionStage1(XP)
correctionStage1 вычтет из опыта 2000 и поделит на 350, результат прибавит к тому что есть, соответственно если опыт менее 2000 то уровень уменьшится, а если более 2000 увеличится, таким образом можно менять вывод функции с определённых границ до определённых границ, ведь кроме деления и умножения есть битмаск и другие хитрые операторы.
Я вообще очень люблю использовать оператор % или ^ (ява), они позволяют задавать относительно сложные последовательности простой и понятной строкой кода.
чем сложнее график тем больше будет кривых корректировки (так называемых октав), но не важно как сложен график, всё равно его можно построить.
если график описывается элементарными функциями, то всё существенно проще, если у вас эллиптические кривые то всё печально.
Старый 22.01.2014, 21:36
Mihahail
๏̯͡๏
offline
Опыт: 17,766
Активность:
А как же полиномы, интерполяция и округление? Объясните плз, почему это плохая идея тут.
Ведь под это дело составить полином не сложно, если уровней не очень много. Иначе же просто подбирать функцию как сделал диод.
Старый 22.01.2014, 23:34
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Clamp:
программист на фулставке должен пилить код быстро, излишняя оптимизация вредна, и ты это знаешь)
ошибаешься.... Надо пилить быстро, качественно, без багов и так что бы потом Архитекторам не пришлось приходить и пинать тебя. Вредна ранняя оптимизация кода
Старый 26.01.2014, 14:02
ScorpioT1000
Работаем
offline
Опыт: отключен
Просто ради информации - "поздней" оптимизации на практике не бывает.
Бывает всего 2 вещи:
  1. ты думаешь головой
1.1. проект работает долго и хорошо
  1. ты не думаешь головой
2.1. проект пополняется данными и начинает тормозить, в итоге доровор расторгают и ищут другую компанию, чтобы сделать версию 2.0
Старый 26.01.2014, 23:55
Hellfim
Новичок
offline
Опыт: 79,637
Активность:
Ну, обычно есть 3 вида кода:
  1. Быдлокод, где накидали, нечто, что вроде бы работает, но не совсем понятно как и непонятно как это допиливать, если придется.
  2. Обычный код, который работает достаточно быстро, в контексте текущих требований, с запасом на будущее.
  3. Код-дрочево, который самый оптимальный, но ненужный в виду некоторых факторов, таких как задача, под которую он используется.
Примечание: разумеется, иногда требуется и самый оптимальный вариант.
Старый 27.01.2014, 03:18
Olorin

offline
Опыт: 11,841
Активность:
switch уже предлагали?
Старый 07.02.2014, 15:52
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Hellfim, про то, что скорп пилит третий вариант, я и говорю.
Старый 07.02.2014, 16:50
ScorpioT1000
Работаем
offline
Опыт: отключен
Clamp, так это просто для интереса)
Olorin, свич не поддерживает диапазоны значений
Старый 07.02.2014, 17:01
Olorin

offline
Опыт: 11,841
Активность:
ScorpioT1000, чёрт, да, там в кейсе нельзя сравнения
Старый 07.02.2014, 17:12
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



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