![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 5 Всего: 12 |
Как сделать кольцевой буфер?
На ум приходить только это:
Может есть другие варианты? |
|||
|
||||
1000000dollars |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 6.10.2007 Репутация: нет Всего: 8 |
Есть. Например кольцевой список. Всё зависит от специфики задачи.
|
|||
|
||||
ivan219 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 5 Всего: 12 |
Специфика в том, что бы заполнять массив числами по кругу. Т.е. дошли мы до последней ячейки массива, следующие значение у же запишем в начало массива. И так как это будет происходить в цикле и постоянно то операция
мне не нравится. Возможно, есть менее ресурсоёмкий алгоритм. |
||||
|
|||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
"Навскидку". Не проверяя все возможные реализации "кольцевого буфера" не смог придумать ничего лучше операции mod. Блин! Ну что может быть менее ресурсоёмкой операцией, чем ассемблерная инструкция MOD? -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
cemick |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: нет Всего: 6 |
Mod это как минимум деление и далеко не факт что на большом количестве N это будет быстрее чем inc(i); if i = arrayLength then i := 0; |
|||
|
||||
1000000dollars |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 6.10.2007 Репутация: нет Всего: 8 |
Ну если задача полностью описывается приведённым в первом посте кодом, то можно записывать только последние числа последовательности.
Этот код очень плохой, но идею иллюстрирует. При больших n и малых размерах массива должен работать чертовски быстро. Ну и всего один mod и один div. |
|||
|
||||
ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 5 Всего: 12 |
||||
|
||||
1000000dollars |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 6.10.2007 Репутация: нет Всего: 8 |
||||
|
||||
ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 5 Всего: 12 |
Реализовал код с 3 переменными шустрее получилось. Но идея шустрого кольцевого буфера ещё актуальна. Так как иногда бывает и с 1000 ячеек нужно работать и да же больше.
|
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
А проверить? MOD - это не столько "деление" сколько ассемблерная инструкция. Так же как и INC. Это сообщение отредактировал(а) northener - 12.5.2011, 01:56 -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
1000000dollars |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 6.10.2007 Репутация: нет Всего: 8 |
Не знаю насколько это применимо к решаемой задаче, но для одной из моих задач нужно было хитро обработать поток данных. Специфика была такова, что было надо "помнить" последние 8 килобайт обработанного потока. Я делал примерно так:
|
|||
|
||||
cemick |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: нет Всего: 6 |
Думайте пожалуйста, прежде чем такое говорить. А проверить не слабо:
Первый вариант в среднем 3600-4100 второй 1500-2000 Т.е. примерно как минимум в два раза быстрее. Это сообщение отредактировал(а) cemick - 12.5.2011, 09:19 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |