Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2014, 13:38   #21
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
1 Ты мне сказал - константная и отправил в документацию. В документации написано - линейная.
2 ты сказал разобраться с "наихудшим случаем" и опять отправил читать, но сам не разобрался
3 ты сказал "amortized time" (а ведь недавно говорил "константная"). и отправил читать, но сам не прочитал же опять - иначе бы не писал че попало. "amortized time" - это вообще не оценка сложности.
amortized time - это константное время, если массив маленький и линейное время, если очень большой. Если элементов становится больше и больше, то приходится увеличивать буфер для хранения, то есть выделять новый буфер большего размера и копировать из старого места в новое. В задаче автора темы мы добаляем по одной лошадке. Здесь будет константное время, поэтому можно использвать std::vector и другой контейнер для этой задачи не даст выгоды

Последний раз редактировалось 8Observer8; 10.11.2014 в 13:41.
8Observer8 вне форума Ответить с цитированием
Старый 10.11.2014, 14:02   #22
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
amortized time - это константное время, если массив маленький и линейное время, если очень большой
т.е. внутри у вектора есть такой код примерно: ?
Код:
if (m_size < LIM) {
  // .. добавление за константное время
}
else {
  // добавление за линейное время
}
Такой код таки бывает, например в алгоритмах сортировки. Но в случае с вектором я себе такое не представляю. Я думаю обсуждение на стэковерфлоу, на которое ты ссылался ты сам до сих пор не прочитал.

Цитата:
Если элементов становится больше и больше, то приходится увеличивать буфер для хранения, то есть выделять новый буфер большего размера и копировать из старого места в новое.
Это будет выполняться всякий раз, когда для нового элемента нет места, а не только тогда когда вектор очень большой. Размер тут не имеет значения -если ты создашь вектор иразмером в один элемент и добавишь второй - то уже будет создан веткор большего размера.

Когда говорят о сложности алгоритма, то почти всегда полагают что N стремится к бесконечности. И тогда все разруливают пределы - примерно как я выше показал.
rrrFer вне форума Ответить с цитированием
Старый 10.11.2014, 14:53   #23
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

У меня было неправильное понимание "amortized time". В документации Qt хорошо написано:

Цитата:
"Amort. O(1)" means that if you call the function only once, you might get O(n) behavior, but if you call it multiple times (e.g., n times), the average behavior will be O(1).
8Observer8 вне форума Ответить с цитированием
Старый 10.11.2014, 17:13   #24
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

[удалил, но кто-то прочитал]

Последний раз редактировалось rrrFer; 10.11.2014 в 17:19.
rrrFer вне форума Ответить с цитированием
Старый 10.11.2014, 19:38   #25
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Я написал выше, что если ты собрался добавлять в рантайме - юзай список, а не вектор. Если не добавлять - то обычный массив.
Пользователь будет добавлять лошадок через меню. Есть функция, которая вызывается по таймауту. Допустим таймаут каждые 10 миллисекунд. Произошёл таймаут, функция изменяет значение координат и в цикле показывает лошадок. В std::list доступ к элементам происходит за линейное время, а в std::vector за константное. Значит выбор в пользу std::vector
8Observer8 вне форума Ответить с цитированием
Старый 10.11.2014, 19:44   #26
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

пока в вилларибо ещё двигают кнопки, в виллабаджо давно рисуют анимированных лошадей!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 10.11.2014, 22:52   #27
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

goshek, спросите у преподавателя, может ли он разрешить использовать Qt? Думаю, на VS врядли вы осилите. Сделал вам примерчик. Здесь три кнопки движутся по окружности. Рад ответить на ваши вопросы

Исходники: https://github.com/8Observer8/Hippodrome

8Observer8 вне форума Ответить с цитированием
Старый 10.11.2014, 23:19   #28
goshek
Пользователь
 
Регистрация: 07.01.2014
Сообщений: 33
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
goshek, спросите у преподавателя, может ли он разрешить использовать Qt? Думаю, на VS врядли вы осилите. Сделал вам примерчик. Здесь три кнопки движутся по окружности. Рад ответить на ваши вопросы

Исходники: https://github.com/8Observer8/Hippodrome

Спасибо, сегодня спрошу
goshek вне форума Ответить с цитированием
Старый 11.11.2014, 12:26   #29
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Пользователь будет добавлять лошадок через меню. Есть функция, которая вызывается по таймауту. Допустим таймаут каждые 10 миллисекунд. Произошёл таймаут, функция изменяет значение координат и в цикле показывает лошадок. В std::list доступ к элементам происходит за линейное время, а в std::vector за константное. Значит выбор в пользу std::vector
А нужен ли произвольный доступ?
Если тебе надо перебрать всех лошадей - то разницы между списком и вектором нет.
Разница есть если тебе может потребоваться лошадь с конкретным индексом.

Короче аргумент не канает - если по таймеру ты решишь перерисовать лошадей из контенера - разницы между вектором и списком нет

А если ты юзаешь Qt - то скорее всего тут вообще не нужен контейнер. Создавая лошадь сразу соединяй ее слот перерисовки с сигналом таймера.

8Observer8
Критика к коду нужна? )

Последний раз редактировалось rrrFer; 11.11.2014 в 12:32.
rrrFer вне форума Ответить с цитированием
Старый 11.11.2014, 12:47   #30
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Критика к коду нужна?
Спасибо! Не нужна
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
КНОПКИ surf135 Общие вопросы Delphi 2 27.05.2012 22:39
Кнопки в Qt Tema_Crazzzy Qt и кроссплатформенное программирование С/С++ 6 20.11.2010 18:30
UCOZ: Кнопки кнопки на изображении ReDuX HTML и CSS 19 25.04.2008 02:39
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35