|
Быстрый доступ к элементу. |
|
|
|
 |
Ответов
|
Oct 22 2017, 09:36
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
QUOTE 1. Зачем хранить указатели на пакеты? Вместо них лучше индексы. Тогда один элемент таблицы поиска можно ужать до 32 бит: log(10000)/log(2)+8+9 = 31бит В данном случае это O(1). QUOTE ааа. то есть сортировать массив по ключу и делать бинарный поиск? Конечно.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Oct 22 2017, 10:04
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Jenya7 @ Oct 22 2017, 12:52)  Допустим у меня массив с ID 3 5 7 13 25 178 1355. Пришел ID 18. Я должен вставить его в свободное место и потом сортировать весь массив? А при удалении элемента сдвинуть все элементы влево? Не в свободное место, а раздвинув существующие. И не все надо сдвигать, а от позиции нового пришедшего, до позиции удаляемого. Цитата(Rst7 @ Oct 22 2017, 12:59)  В данном случае за 3 сравнения (бинарным поиском) Вы находите место для вставки элемента с ID 18 (между 13 и 25). После чего Вам его просто нужно вставить (копирование трех элементов плюс запись нового). Массив остается отсортированным. Исходить надо из случая заполненности всего массива (имеются все 512 кадров). И при старте делать инициализацию, заполнив первоначально массив недопустимыми индексами (с ID1 > 10000 например).
|
|
|
|
|
Oct 22 2017, 10:07
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(Rst7 @ Oct 22 2017, 14:59)  В данном случае за 3 сравнения (бинарным поиском) Вы находите место для вставки элемента с ID 18 (между 13 и 25). После чего Вам его просто нужно вставить (копирование трех элементов плюс запись нового). Массив остается отсортированным. копирование трех элементов плюс запись нового не получиться - таки надо раздвинуть. Цитата(jcxz @ Oct 22 2017, 15:04)  Не в свободное место, а раздвинув существующие. И не все надо сдвигать, а от позиции нового пришедшего, до позиции удаляемого.
Исходить надо из случая заполненности всего массива (имеется все 512 кадров). И при старте делать инициализацию, заполнив первоначально массив недопустимыми индексами (с ID1 > 10000 например). то есть сдвинуть все элементы вправо от искомого. а при удалении все элементы влево от искомого. наверно это все равно будет быстрее чем с несортированным массивом.
Сообщение отредактировал Jenya7 - Oct 22 2017, 10:09
|
|
|
|
|
Oct 22 2017, 11:15
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(k155la3 @ Oct 22 2017, 13:32)  Это зависит от платформы ? - в смысле содержимого memmove() - аппаратная или программная реализация пересылки ? Я говорю о том, что не нужно дважды вызывать memmove(): сначала для удаления старой записи из массива поиска (и сжатия массива), а потом для раздвижки этого массива и вставки нового значения. Достаточно одного вызова memmove() для диапазона элементов от удаляемого до вставляемого. Цитата(Jenya7 @ Oct 22 2017, 13:39)  memmove() применяется к массиву в РАМ. Тут уж какя бы ни была платформа а функция должна взять каждый элемент и сдвинуть. Если разговор о платформе Cortex-M и IAR, то внутри библиотечной memcpy() (и думаю что и memmove() тоже), копирование может идти с использованием нескольких регистров процессора (читается-пишется сразу по несколько 32-битных слов). См. дизасм. Цитата(Rst7 @ Oct 22 2017, 13:59)  Ну смотрите. Поиск будет занимать 9 сравнений. Считайте, что это бесплатно. Теперь memmove. Ну при хорошей реализации для ARM он примерно два байта за такт процессора пересылает (ну чуть меньше, чем два, но сейчас это пофиг). Да ладно! Какой компилятор? IAR-овский memcpy() может использовать до 4х или даже 8и регистров (точно не помню) процессора для копирования. Посчитайте сколько это байт. Конечно он предварительно смотрит на размер пересылки и, в зависимости от него, выбирает тот или иной цикл копирования. Побайтно будет для ОЧЕНЬ маленьких размеров.
|
|
|
|
Сообщений в этой теме
Jenya7 Быстрый доступ к элементу. Oct 22 2017, 08:54 jcxz Цитата(Jenya7 @ Oct 22 2017, 11:54) Пробл... Oct 22 2017, 09:09 Jenya7 Цитата(jcxz @ Oct 22 2017, 14:09) Сделайт... Oct 22 2017, 09:20 Rst7 QUOTE И тут я вспомнил работу с SQL базами данных ... Oct 22 2017, 09:14 jcxz Цитата(Rst7 @ Oct 22 2017, 12:14) Потому ... Oct 22 2017, 09:33  Jenya7 Цитата(jcxz @ Oct 22 2017, 14:33) 1. Заче... Oct 22 2017, 09:48   jcxz Цитата(Jenya7 @ Oct 22 2017, 12:48) допус... Oct 22 2017, 09:52   k155la3 Цитата(Jenya7 @ Oct 22 2017, 12:48) . . .... Oct 22 2017, 10:07 Rst7 QUOTE переберите все сочитания 0-10000 и 0-255. Уж... Oct 22 2017, 09:28 Jenya7 Цитата(Rst7 @ Oct 22 2017, 14:28) Вы не п... Oct 22 2017, 09:34     Jenya7 Цитата(jcxz @ Oct 22 2017, 15:18) Я уже н... Oct 22 2017, 10:24      Jenya7 Цитата(k155la3 @ Oct 22 2017, 15:32) Это ... Oct 22 2017, 10:39 Rst7 QUOTE Допустим у меня массив с ID 3 5 7 13 25 178 ... Oct 22 2017, 09:59 Rst7 QUOTE Исходить надо из случая заполненности всего ... Oct 22 2017, 10:07 Rst7 А вообще-то для полной универсальности топикстарте... Oct 22 2017, 10:09 Jenya7 Цитата(Rst7 @ Oct 22 2017, 15:09) А вообщ... Oct 22 2017, 10:16  Rst7 QUOTE (Jenya7 @ Oct 22 2017, 13:16) это к... Oct 22 2017, 10:47   Jenya7 Цитата(Rst7 @ Oct 22 2017, 15:47) Еще раз... Oct 22 2017, 10:49    Rst7 QUOTE (Jenya7 @ Oct 22 2017, 13:49) Посмо... Oct 22 2017, 11:33     Jenya7 Цитата(Rst7 @ Oct 22 2017, 16:33) Ну если... Oct 22 2017, 11:38 Rst7 QUOTE а я понял. ну вот в этом вопрос - насколько ... Oct 22 2017, 10:59 Rst7 QUOTE Да ладно! Какой компилятор? IAR-овский m... Oct 22 2017, 11:22 jcxz Цитата(Rst7 @ Oct 22 2017, 14:22) Итого з... Oct 22 2017, 11:31 Jenya7 Rst7, jcxz.
Большое вам спасибо. Сделаю так.
Вооб... Oct 22 2017, 11:30 Rst7 QUOTE вы говорите на больших размерах можно подума... Oct 22 2017, 11:41 Jenya7 Цитата(Rst7 @ Oct 22 2017, 16:41) Даже не... Oct 22 2017, 12:37 Jenya7 хотел уточнить такой вопрос
для вставки
Кодmemmove... Oct 23 2017, 11:36 Rst7 QUOTE получается я должен добавить отступ?
Нет. Н... Oct 23 2017, 13:16 Jenya7 Цитата(Rst7 @ Oct 23 2017, 19:16) Нет. На... Oct 23 2017, 13:24 Rst7 QUOTE но а+2 не будет адресом элемента a[2].
Что ... Oct 23 2017, 14:04 Jenya7 Цитата(Rst7 @ Oct 23 2017, 20:04) Что зна... Oct 23 2017, 14:35 XVR Советую отделить id от data и хранить id+индекс в ... Oct 23 2017, 21:16 Jenya7 Цитата(XVR @ Oct 24 2017, 02:16) Советую ... Oct 24 2017, 06:23 ViKo Высказываю идею. Пока пакетов меньше 1024 (чисто п... Oct 24 2017, 07:43 Jenya7 Результаты такие. При добавлении элемента я вылета... Oct 24 2017, 07:44 ViKo Цитата(Jenya7 @ Oct 24 2017, 10:44) так я... Oct 24 2017, 08:05 skripach Цитата(Jenya7 @ Oct 22 2017, 11:54) масси... Oct 24 2017, 07:55 Jenya7 Нашел проблемку. Функция вставки в причесанном вар... Oct 24 2017, 08:41 Rst7 Ну правильно вот так
CODEmemcpy(messages... Oct 24 2017, 10:09 Jenya7 Цитата(Rst7 @ Oct 24 2017, 15:09) Ну прав... Oct 24 2017, 11:12 Rst7 QUOTE не совсем понимаю. memmove переносит из адре... Oct 24 2017, 11:41 Jenya7 Цитата(Rst7 @ Oct 24 2017, 16:33) Вы пере... Oct 24 2017, 11:43 Rst7 QUOTE ммм...а можете показать как. я не понимаю на... Oct 24 2017, 11:57 Jenya7 Цитата(Rst7 @ Oct 24 2017, 16:57) Обновит... Oct 24 2017, 12:07 Rst7 Ну и чисто эстетический момент. Лично меня вымораж... Oct 24 2017, 12:10 Jenya7 Цитата(Rst7 @ Oct 24 2017, 17:10) Ну и чи... Oct 24 2017, 12:17 Jenya7 по моему в
КодTEST_MESSAGE *AllocMessage(void... Oct 26 2017, 07:34 Rst7 QUOTE Элементы вставляются но p->data всех элем... Oct 26 2017, 08:00 Jenya7 Цитата(Rst7 @ Oct 26 2017, 14:00) Ээээ, т... Oct 26 2017, 09:23  Rst7 QUOTE (Jenya7 @ Oct 26 2017, 12:23) Да. Н... Oct 26 2017, 09:47   Jenya7 Цитата(Rst7 @ Oct 26 2017, 15:47) Я так з... Oct 26 2017, 10:39 Rst7 Я не понимаю, что Вы смотрите. Все поля msg_p[i].p... Oct 26 2017, 11:29 Jenya7 Цитата(Rst7 @ Oct 26 2017, 16:29) Что печ... Oct 26 2017, 11:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|