|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Есть две структуры. Данные в структурах обновляются асинхронно. Мне нужно по ключу(reference_number) найти и переписать поле(priority_level). Делаю так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
Но за время поиска в цикле (в одном таске) приходят новые данные и я отправляю пару пакетов со старыми данными (в другом таске). Хотел сделать какой нибудь хэш тэйбл или дикшинэри но никак не соображу как связать поля. Есть более быстрое решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 09:41 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, критическая секция для начала, куча проблем сразу отпадёт ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 09:59 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
kealon(Ruslan)jenya7, критическая секция для начала, куча проблем сразу отпадёт я не могу блокировать обновление данных. они приходят из разных источников и я должен принять их немедленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 10:02 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, тогда вам задачу надо более подробно описать, потому что сликом много может быть ньюансов в зависимости от поддерживаемых операций ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 10:05 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Тебе нужен не поиск в массивах. А нормальная структура данных типа hashtable с поддержкой concurrency. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 10:14 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
maytonТебе нужен не поиск в массивах. А нормальная структура данных типа hashtable с поддержкой concurrency. в этом то и вопрос - как связать поля в hashtable. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 10:15 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
mayton, видел concurrency hashtable на си? он на месяцы влезет у него может задача вообще простенькая ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 10:19 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Вопрос в чем? Нагуглить? Или ещё раз пересмотреть задачу. Мне кажется что постановка - гипертрофированая. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 10:28 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7kealon(Ruslan)jenya7, критическая секция для начала, куча проблем сразу отпадёт я не могу блокировать обновление данных. они приходят из разных источников и я должен принять их немедленно. принять и положить - разные задачи ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 12:30 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Я посмотрел реализацию hashtable Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
тут используется динамическое выделение памяти а мне это не нужно – после получения списка содержащего 12 элементов (table1.items) я его сразу должен положить в таблицу. А в другом месте вытащить значение table2[current_idx].priority_level = search(table2[current_idx]. reference_number) Как мне переделать hashtable? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 13:11 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
int hashIndex = hashCode(key); не возвращает уникальное значение на каждый ключ. а есть алгоритм позволяющий установить уникальное значение индекса? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 13:31 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7int hashIndex = hashCode(key); не возвращает уникальное значение на каждый ключ. а есть алгоритм позволяющий установить уникальное значение индекса?всегда. - нет но есть алгоритмы устранения коллизий, но они к сожалению мало подточены на многопоточку я же вам говорю, выдайте просто интерфейс и что он должен делать, будет проще подобрать - нету универсальных решений ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 15:08 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
kealon(Ruslan)jenya7int hashIndex = hashCode(key); не возвращает уникальное значение на каждый ключ. а есть алгоритм позволяющий установить уникальное значение индекса?всегда. - нет но есть алгоритмы устранения коллизий, но они к сожалению мало подточены на многопоточку я же вам говорю, выдайте просто интерфейс и что он должен делать, будет проще подобрать - нету универсальных решений table1.items приходят сразу все 12 элементов в одном списке - при получении я могу заполнить хэш таблицу. table2[х] приходят по одному - при получении я могу вытянуть значение из хэш таблицы. проблема в реализации хэш таблицы без лишних наворотов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 15:19 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Как вариант хранить таблицы отсортированными по возрастанию reference_number, тогда сводится все к коду Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
dummy - соответственно заглушки пустых ячеек. По скорости даст фору любой хеш таблице, и да критическая секция нужна в любом случае, если к коду обращаются несколько потоков, и понятие немедленно в дискретном мире компьютеров это как то сильно сказано. и на момент сортировки таблиц тоже должны быть критические секции (т.е. после каждой вставки/удаления) Хм, тут возникла другая идея: использовать связанные списки, тогда вставки и удаления будут проходить быстрее, но замедлит проход по спискам, и очень замедлит произвольный доступ. В целом реализация будет зависеть от того какие задачи наиболее критичны. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 15:39 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Да о чем тут спор вообще. Автор - новичок. Пусть берет самую обычную стандартную (несинхронизированную) хеш-табличку, оборачивает ее EnterCriticalSection(..) или линуксовый и тестит. Если ему ее не хватит - велком с оптимизиацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 16:29 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
maytonДа о чем тут спор вообще. Автор - новичок. Пусть берет самую обычную стандартную (несинхронизированную) хеш-табличку, оборачивает ее EnterCriticalSection(..) или линуксовый и тестит. Если ему ее не хватит - велком с оптимизиацией. +1 std::unordered_map и std::mutex для синхронизации доступа ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 16:36 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Dima TmaytonДа о чем тут спор вообще. Автор - новичок. Пусть берет самую обычную стандартную (несинхронизированную) хеш-табличку, оборачивает ее EnterCriticalSection(..) или линуксовый и тестит. Если ему ее не хватит - велком с оптимизиацией. +1 std::unordered_map и std::mutex для синхронизации доступа у меня нет std::unordered_map. голый С. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 16:48 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7у меня нет std::unordered_map. голый С. А можете пояснить выбор средств? Вот нафига это дрочево кому-то нужно в 2019-м году? Ваша задача, например, на голанге решается тривиально, парой десятков строк кода. При этом сам голанг изучается за три дня. Если это студенческая работа, то, конечно, базара нет, а если работа практическая, то вот ну нафига? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 17:36 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Ембедщик наверно. Но не знает алгоритмы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 17:38 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Лысый дядькаjenya7у меня нет std::unordered_map. голый С. А можете пояснить выбор средств? Вот нафига это дрочево кому-то нужно в 2019-м году? Ваша задача, например, на голанге решается тривиально, парой десятков строк кода. При этом сам голанг изучается за три дня. Если это студенческая работа, то, конечно, базара нет, а если работа практическая, то вот ну нафига? какой голанг я под микроконтролер пишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 17:57 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, ну наконец-то. Не прошло и дня. Ты написал - данные в структурах обновляются асинхронно. Вот давай рассказывай как реализованна асинхронность в твоём Х-контроллере? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 18:24 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
maytonjenya7, ну наконец-то. Не прошло и дня. Ты написал - данные в структурах обновляются асинхронно. Вот давай рассказывай как реализованна асинхронность в твоём Х-контроллере? там есть RTOS (VxWorks). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 18:33 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, уже лучше, многозадачности значит нет а отправлять то что должен? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 20:03 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
kealon(Ruslan), Многозадачности может и нет, а вот событие из прерывания может прилететь ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 22:52 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Чудесно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 23:10 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Swa111kealon(Ruslan), Многозадачности может и нет, а вот событие из прерывания может прилететьвот никак не пугает, гораздо легче и понятнее осталось понять что же ТС хочет вообще ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 00:22 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Хочет чтоб его научили работать с хеш-табличками. Вон... как он бедняга циклы крутит. Не от хорошей жизни. Мдя. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 01:12 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Посмотрел кучу реализаций хэш таблиц. Ни одна не понравилась. Не т детерминизма. Каждый malloc должен иметь свой free. А тут я рискую остаться с кучей мусора и фрагментированной памятью. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 09:24 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, зачем вам выделять память по ходу? у вас вроде буфер стабильный выделен и его хватает у меня складывается впечатления что я слепому рассказываю о цветах ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 10:41 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7Посмотрел кучу реализаций хэш таблиц. Ни одна не понравилась. Не т детерминизма. Каждый malloc должен иметь свой free. А тут я рискую остаться с кучей мусора и фрагментированной памятью. Женя, вместо того чтобы сразу бросаться в ковыряния имплементаций хэш таблиц, подумай какая идея стоит за ними. И используй эту идею для решения своей задачки. Тогда и маллоки не потребуются. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 10:48 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
kealon(Ruslan)jenya7, зачем вам выделять память по ходу? у вас вроде буфер стабильный выделен и его хватает у меня складывается впечатления что я слепому рассказываю о цветах так работает хэш таблица. динамически выделает память под новый элемент. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 11:09 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7Посмотрел кучу реализаций хэш таблиц. Ни одна не понравилась. Не т детерминизма. Каждый malloc должен иметь свой free. А тут я рискую остаться с кучей мусора и фрагментированной памятью. Давай определимся с целями. Какой тебе нужен детерминизм? В первом варианте исходного кода у тебя был линейный поиск в массиве. Никакого детерминизма вообще не было по времени отклика. И вообще - это была фейеричная фейерия. По malloc, есть хеш таблицы которые работают внутри одного массива. Я такие еще изучал на 1-м курсе универа. Но у них есть компромисс между памятью и количеством промахов поиска. Вобщем.. определись что тебе надо. Иначе у сообщества сложится впечатление что ты - капризная девица. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 11:11 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
OoCcjenya7Посмотрел кучу реализаций хэш таблиц. Ни одна не понравилась. Не т детерминизма. Каждый malloc должен иметь свой free. А тут я рискую остаться с кучей мусора и фрагментированной памятью. Женя, вместо того чтобы сразу бросаться в ковыряния имплементаций хэш таблиц, подумай какая идея стоит за ними. И используй эту идею для решения своей задачки. Тогда и маллоки не потребуются. идея хэш таблицы прекрасна - немедленно получить индекс в таблице по ключу. это даст быстрый доступ к элементу, без перебора в цикле. только индекс не уникален. и вот тут начинаются танцы с бубнами. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 11:12 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
maytonjenya7Посмотрел кучу реализаций хэш таблиц. Ни одна не понравилась. Не т детерминизма. Каждый malloc должен иметь свой free. А тут я рискую остаться с кучей мусора и фрагментированной памятью. Давай определимся с целями. Какой тебе нужен детерминизм? В первом варианте исходного кода у тебя был линейный поиск в массиве. Никакого детерминизма вообще не было по времени отклика. И вообще - это была фейеричная фейерия. По malloc, есть хеш таблицы которые работают внутри одного массива. Я такие еще изучал на 1-м курсе универа. Но у них есть компромисс между памятью и количеством промахов поиска. Вобщем.. определись что тебе надо. Иначе у сообщества сложится впечатление что ты - капризная девица. не нашел хэш таблицы без malloc. это как раз то что нужно. а почему должен быть промах? мы ведь идем прямо по индексу. (idx=hash(key)). то есть возникает ситуация когда несколько элементов дадут тот же индекс. и сколько выделить памяти в статическом варианте? я не могу предсказать сколько ключей совпадут. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 11:17 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7OoCcпропущено... Женя, вместо того чтобы сразу бросаться в ковыряния имплементаций хэш таблиц, подумай какая идея стоит за ними. И используй эту идею для решения своей задачки. Тогда и маллоки не потребуются. идея хэш таблицы прекрасна - немедленно получить индекс в таблице по ключу. это даст быстрый доступ к элементу, без перебора в цикле. только индекс не уникален. и вот тут начинаются танцы с бубнами. ответ неверный. немедленно получается индекс бакета. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 11:25 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7и вот тут начинаются танцы с бубнами А какие танцы то? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 11:56 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Допустим я получил table1.items - и все 12 элементов поместил в хэш таблицу //insert (key, value) insert(table1.items[0].reference_number, table1.items[0].priority_level); //malloc ................................................................................................. insert( table1.items[11].reference_number, table1.items[11].priority_level); //malloc приходят элементы //value = get(key) table2[idx].priority_level = get(table2[idx].reference_number); delete(table2[idx].reference_number) //free но элемент может быть удален из table2 за ненадобностью. и он никогда не обратиться к хэш таблице и не освободит память выделенную под него. Весь алгоритм такой. 1. Пришел список table1.items 2. По принятию списка иду в массиве table2 - ищу reference_number в списке table1.items и если нашел обновляю priority_level. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 11:57 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7kealon(Ruslan)jenya7, зачем вам выделять память по ходу? у вас вроде буфер стабильный выделен и его хватает у меня складывается впечатления что я слепому рассказываю о цветах так работает хэш таблица. динамически выделает память под новый элемент. так работают различные реализации устранения коллизий, кто сказал что это должно быть непременно так? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 12:07 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, jenya7не нашел хэш таблицы без malloc. для комплекта, удаление оттуда же Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 12:14 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7но элемент может быть удален из table2 за ненадобностью А может быть лучше мы узнаем ТЗ в его первоначальном варианте? Это же обычная практика - нагородить всякой херни, а потом с ней мучиться. Может быть там и нафиг не нужны никакие две таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 12:17 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Лысый дядька, да мы у него уже вторую страницу это спрашиваем, не понимает :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 12:25 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, У тебя по коду выделено 512штук * 4байта * 2штуки = 4096 байт и еще 12 * 4 * 2 = 48 байт статично. сколько тебе доступно памяти для решения этой задачи? Мы должны ориентироваться в цифрах. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 12:29 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
maytonjenya7, У тебя по коду выделено 512штук * 4байта * 2штуки = 4096 байт и еще 12 * 4 * 2 = 48 байт статично. сколько тебе доступно памяти для решения этой задачи? Мы должны ориентироваться в цифрах. не понял вопроса? проблема в скорости поиска элемента. table1 и table2 это статическая память в РАМ. я получил данные table1.items[0].reference_number = 100 table1.items[0].priority_level = 0 ------------------------------------------ table1.items[11].reference_number = 111 table1.items[11].priority_level = 11 в этот момент я перебираю все элемены в table2 и ищу совпадение table2[i].reference_number == table1.items[j].reference_number нашел? table2[i].priority_level == table1.items[j].priority_level вся проблема в быстроте поиска. это единственная проблема. в случае с хэш таблицей нужно учитывать что элементы в table2 могут быть удалены и выделенная память в хэш таблице не освободиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 12:48 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, а 100% критично, что нужны самые-самые новые в момент отправки? Я сталкивался с системами датчиков, так там порешили проводить опрос датчиков насильно как можно чаще (~1/20 с). Но идея на клиенте была простая - содержать собственный буфер. Состояний общее число было сравнимое кол-во, неск. десятков, датчиков - вусмерть (напр. десятки тыс.) Правда первичная обработка была централизованной, но на случай поломки центра, были децентрализованные подбазы и слали напрямую. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 13:03 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
exp98jenya7, а 100% критично, что нужны самые-самые новые в момент отправки? Я сталкивался с системами датчиков, так там порешили проводить опрос датчиков насильно как можно чаще (~1/20 с). Но идея на клиенте была простая - содержать собственный буфер. Состояний общее число было сравнимое кол-во, неск. десятков, датчиков - вусмерть (напр. десятки тыс.) Правда первичная обработка была централизованной, но на случай поломки центра, были децентрализованные подбазы и слали напрямую. если бы не было критично не возник бы вопрос. как по мне не 100% но это не я решаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 13:05 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7...после получения списка содержащего 12 элементов (table1.items) я его сразу должен положить в таблицу. А в другом месте вытащить значение ... Насколько сразу ? Может никому не говорить, что была задержка? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 13:12 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, есть простоеобъяснение для хотелок: Между получением и отправакой неминоемо проходит некоторое время. За этот промежуток отправака может успеть устареть. Конкретика требует цифр (для и от хотящих), т.е. некоторые показатели производительности. Обоснованные! ИМХО ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 13:19 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Ну да, тоже важно всё или не всё пришедшее отправлять. Если не, т.е. очередь, стек, каждый 7-й ... т.е. по какому принципу. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 13:28 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7не понял вопроса? проблема в скорости поиска элемента. table1 и table2 это статическая память в РАМ. я получил данные table1.items[0].reference_number = 100 table1.items[0].priority_level = 0 ------------------------------------------ table1.items[11].reference_number = 111 table1.items[11].priority_level = 11 в этот момент я перебираю все элемены в table2 и ищу совпадение table2[i].reference_number == table1.items[j].reference_number нашел? table2[i].priority_level == table1.items[j].priority_level вся проблема в быстроте поиска. это единственная проблема. в случае с хэш таблицей нужно учитывать что элементы в table2 могут быть удалены и выделенная память в хэш таблице не освободиться. Блинн. Почему с тобой так сложно? Почему ты решил что это есть проблема? Я не просто так спросил про доступную память. Потому что СУЩЕСТВУЮТ хеш таблички которые работают не ре-аллоцируя память. Но для этого им нужно дать чуть больше памяти (1.5-2 раза) чем твои элементы. ПОЭТОМУ я нудным голосом спрашиваю тебя еще раз - Сколько памяти можно выделить в твоём микро-контроллере или ХЗ в чем-то еще! Женя. Дорогой. Отвечай на вопросы экспертов. Если ты не отвечаешь - то можно сделать вывод что помощь тебе не нужна. И ты просто пришел сюда от скуки. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 15:01 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
maytonjenya7не понял вопроса? проблема в скорости поиска элемента. table1 и table2 это статическая память в РАМ. я получил данные table1.items[0].reference_number = 100 table1.items[0].priority_level = 0 ------------------------------------------ table1.items[11].reference_number = 111 table1.items[11].priority_level = 11 в этот момент я перебираю все элемены в table2 и ищу совпадение table2[i].reference_number == table1.items[j].reference_number нашел? table2[i].priority_level == table1.items[j].priority_level вся проблема в быстроте поиска. это единственная проблема. в случае с хэш таблицей нужно учитывать что элементы в table2 могут быть удалены и выделенная память в хэш таблице не освободиться. Блинн. Почему с тобой так сложно? Почему ты решил что это есть проблема? Я не просто так спросил про доступную память. Потому что СУЩЕСТВУЮТ хеш таблички которые работают не ре-аллоцируя память. Но для этого им нужно дать чуть больше памяти (1.5-2 раза) чем твои элементы. ПОЭТОМУ я нудным голосом спрашиваю тебя еще раз - Сколько памяти можно выделить в твоём микро-контроллере или ХЗ в чем-то еще! Женя. Дорогой. Отвечай на вопросы экспертов. Если ты не отвечаешь - то можно сделать вывод что помощь тебе не нужна. И ты просто пришел сюда от скуки. В принципе занести в хэш таблицу нам нужно 12 элементов. Даже если нужно памяти в два раза больше - 24 элемента, конечно там есть. Это не слабый микроконтролер у него 128 Мега РАМ. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 15:24 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
извиняюсь. ошибся. это если бы было определенное количество ключей (reference_number). если придет элемент с другим ключем то нужно добавлять элемент в хэш таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 15:39 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7В принципе занести в хэш таблицу нам нужно 12 элементов. Даже если нужно памяти в два раза больше - 24 элемента, конечно там есть. Это не слабый микроконтролер у него 128 Мега РАМ. В английской википедии по HashTable описан метод открытой адресации. https://en.wikipedia.org/wiki/Hash_table#Open_addressing Можешь его использовать. Экспериментально подбери размер чтоб для твоих данных не было ни одной коллизии. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 15:41 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
maytonjenya7В принципе занести в хэш таблицу нам нужно 12 элементов. Даже если нужно памяти в два раза больше - 24 элемента, конечно там есть. Это не слабый микроконтролер у него 128 Мега РАМ. В английской википедии по HashTable описан метод открытой адресации. https://en.wikipedia.org/wiki/Hash_table#Open_addressing Можешь его использовать. Экспериментально подбери размер чтоб для твоих данных не было ни одной коллизии. спасибо. попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 15:48 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
вобщем сделал такой ход конем Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76.
нужно только оптимально настроить количество узлов и их глубину. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 17:16 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Посмотри еще как хешируют целые числа https://en.wikipedia.org/wiki/Universal_hashing#Hashing_integers ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 17:30 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Может я не врубаюсь в проблему, но мне кажется, что проблема "...обновляются асинхронно.....за время поиска....." решается корректным многозадачным программированием (блокировками, copy-on-write и так далее) и никакой алгоритм поиска, хоть в цикле, хоть hash'ем, хоть через ж..., хоть через гланды - никак ситуацию изменить не может IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 17:33 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, хеш таблица на 12 элементов не имеет смысла, дольше будете вычислять хеши, даже последовательное чтение 12 элементов будет быстрее. Если уж и делать хеш то для таблицы 512 элементов. Тогда нужно будет вычислить всего 12 хешей. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 17:36 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Поиск в массиве из двух элементов обычно идет быстрее чем в хеш табличке из двух этих-же элементов. Это я не ради троллинга сказал. А просто такова есть природа вещей. Иногда мы используем хеш-таблички просто потому что верим в них. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 17:38 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
mayton...обычно идет быстрее..... Какая разница: быстрее/медленнее ? Если он выполняется дольше одного такта ))), то вероятность того, что будут неверные(не согласованные) данные из-за "обновляются асинхронно" никуда не исчезнет. А это фантастика, т.к. даже доступ к оперативной памяти на современных процессорах выполняется дольше одного такта ))) Где-то в Инете Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 19:18 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Если люди работают с сетевым протоколом то ожидание готовности следующего сетевого пакета будет настолько недетерминированным и говорить о наносекундах будет настолько странно как если-бы мы с вами говорили о личной гигиене во времена короля Людовика 14. Зачем говорит о том чего нет. И какой смысл ускорять хендлинг данных в наносекунды если лаг сетей меряется милисекундами. Это цифры не того порядка. Хотя может у автора там другая шина. Не эзернет... Был лет 5 назад один чел с ником Студентик/Базист. Если помните. Он строил ин-мемори ДБМС с наносекундным откликом. А адаптеры к ней писал на дотнете. Вобщем... нагромождение нелепиц. Хотя с ним было нескучно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 19:25 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
mayton, да ТС пока даже не удосужился ответить "кто ложит данные", "кто забирает данные" без учёта этого решать то, что он навыдумывал вообще бессмысленно ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 19:30 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
21801729 ))) 21802617 "вся проблема в быстроте поиска. это единственная проблема." ( C ) ))))))))) mayton...о личной гигиене во времена короля Людовика 14.... "дорогая, я возврашаюсь из Египта, не мойся" ( C ) Наполион - Жозефине ))) не дословно, с чужих слов, ссылку на архивные материалы привести не могу ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 19:34 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Да. Французы это еще те пакостники. Не в обиду им будь сказано. По поводу "разных источников". Принят и обработать - не одно и то-же. Никто не запрещает автору их просто складывать в кольцевой буфер и обрабатывать по мере возможности. На прерываниях там... или на континуэйшенах или хер ево знает как этот АРМ работает. Не знаю. Но я вобщем щас нарушаю своё собственное правило в топиках... Начинаю додумывать за автора его задачу. А он - скуп на слова. Мдя... Может дипломную работу делает. Эдакий стесняшка.. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 19:38 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Offtopic "про Людовика XIV": где-то-в-Инете... К минимальной обязательной ежедневной гигиене в 16-18 веках относилось умывание рук, лица и ног. Водой. И чем холоднее, тем лучше. Этому учили с детства. За обеденным столом у знати стояли плошки с душистой водой и полотенца – чтобы перед едой сполоснуть руки. Но, как во все времена, люди были более чистоплотные и менее чистоплотные. Рот споласкивали водой, а зубы чистили деревянными палочками. В Европе зубная щетка появилась в 50-х годах XVI века. Уже в 1728 г. знаменитый французский врач Фошар в руководстве по зубоврачеванию указывал о применении зубной щетки из щетины. Для усиления очищающего действия зубной щетки издавна применяли различные порошки: пепел, поваренную соль. Конечно, зубы у многих были плохие. ... Людовик XIV ... Герцог Сен-Симон описывает, что тело короля по утрам растирали лосьоном из роз и затем насухо полотенцем и меняли рубашку. Один из слуг умывал королю руки смесью воды и вина. Людвиг XIV полностью менял гардероб 3-4 раза в день – после охоты, после прогулки, после бала. И каждый раз ему подавали свежее белье и растирали его с головы ло пят спиртовым лосьоном из роз или лаванды. Таким образом, он был одним из самых чистых людей своей эпохи. И ванны Людовик XIV принимал. Но он в них .....не мылся, а принимал их с лечебными целями, с целью расслабиться, а также для интимных встреч с фаворитками...Его подданные старались копировать его во всем. При Людовике XIV в Версале было около 100 мобильных ванн. Король не разрешал устанавливать в Версале стационарные ванны. Исключением был он сам. Сам Людовик XIV был единственным в Версале, кто имел не мобильные, а стационарные «купальные апартаменты - «appartements de bains», состоявшие из трех помещений, с теплой водой. .... Купальные аппартаменты Людовика XIV в Версале (восьмиугольная ванна изображена красным цветом). Вот что осталось от ванных аппартаментов Людовика XIV: восьмиугольная ванна из лангедокского мрамора. Эта ванна «короля-солнца» прошла через многие руки, одно время была в собственности Мадам де Помпадур, затем Наполеона. А теперь стоит в оранжерее Версаля. Раньше стены ванны украшали фигуры дельфинов и русалок. Но новому королю Людовику XV помещения понадобились для своей дочери – Версаль постоянно перестраивался. И „appartements de bains" были разрушены. Сейчас эта ванна стоит в Оранжерее Версаля. Франция, XVII век, Неизвестный художник. Женщина принимает ванну с чашкой шоколада Bidet / биде изобрели и впервые стали применять во Франции в 17м веке. В переводе это слово обозначает «маленькая лошадка» Модератор: Тема перенесена из форума "Программирование". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 20:26 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017670]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
1ms |
others: | 249ms |
total: | 417ms |
0 / 0 |