
Th0r
08.05.2018
19:25:50

Dolphin
08.05.2018
19:25:55

Юра
08.05.2018
19:26:06

kaktys
08.05.2018
19:26:11
32кб флеша, но там же код ещё
в 328p 32kb flash встроенной под програму и статические данные, часть (2кб) отъедает boot loader, если твой код уместится в 10кб, то у тебя остается 12-16kb под твои данные без доп микросхем

Google

Vk
08.05.2018
19:26:43

Юра
08.05.2018
19:29:39
а первые три байта - хеш ?
Ключи-то? Нет, не хеш, но спасибо, я забыл из хешировать. Сделаю хеширование до одного байта, тк значений у меня всего 1012, то можно их в 10и-битный хеш ужать, но тк я все равно выравнивать буду, то 2х байтный хеш позволит сократить место занимаемое ключами
Хотя, не.мне не хеш нужен а биективное отображение 1012и 3хбайтных значений в 2хбайтные
Ну фишка в том, что ключи мне надо будет читать и сравнивать с ними (не просто равенство, но и другие операции сравнения)
Давайте в анархию
Как посоветуете биективно отображать 1012 уникальных 3хбайтовых значений в 1012 уникальных 2хбайтовых значений?
Чтобы я из 2х байтового значения мог обратно трехбайтное получить
Хеш-то это инъективное отображение

Dolphin
08.05.2018
19:31:50
какая длина строки максимальная?

Leaf
08.05.2018
19:32:18

Dolphin
08.05.2018
19:32:21
в 64 уложишься?

Юра
08.05.2018
19:32:46
У меня ассоциативный массив на 1012 пар ключ-значение. Ключ 24хбитное число и значение это кодированная строка. Общий вес строк составляет 10623 байт. Общий вес ключей 3036 байт
Каждый ключ это 3 байта. Стринги варьируются от
22 бит (почти 3 байта) до 191 бит (почти 24 байта)

Google

Юра
08.05.2018
19:33:28
Вот вся инфа

Dolphin
08.05.2018
19:35:02
предлагаю вместо хеша использовать 2х байтный номер (10бит) + длина строки (6 бит)

kaktys
08.05.2018
19:35:11

Юра
08.05.2018
19:35:38
Проще уж сразу трехбайтные ключи хранить

Dolphin
08.05.2018
19:36:06
ключ - начало строки

kaktys
08.05.2018
19:36:21

Dolphin
08.05.2018
19:36:24

Антон
08.05.2018
19:36:25
Народ
А со статора можно снимать электричество в генераторе, если наоборот собрать?

Dolphin
08.05.2018
19:36:56
2 байта (номер + длина) - указатель на строку во флеш, в начале которой - ключ

kaktys
08.05.2018
19:37:58

Антон
08.05.2018
19:39:02
так обычно и делают
А, попутал. С ротора. Ну точнее в данном случае ротор - неподвижная ось, а статор - вращающийся. Такой же принцип применяется в движках в колёсах разной техники, не?

kaktys
08.05.2018
19:41:23
какая разница, электрические машины обратимы

Антон
08.05.2018
19:42:05

Юра
08.05.2018
19:42:43

kaktys
08.05.2018
19:42:55

Dolphin
08.05.2018
19:43:07
массив - однобайтный

Google

Dolphin
08.05.2018
19:43:26
1024 значения

Юра
08.05.2018
19:43:40
А зачем индекс, когда можно сразу адрес нужного значения??

Антон
08.05.2018
19:43:48
а что тебе надо то
Нашёл проект вертикального генератора, судя по описанию. - применяется именно такая схема, стало интересно, как это работает

Dolphin
08.05.2018
19:44:01
а так - 1 байт
в два раза меньше

Юра
08.05.2018
19:44:19
Ну и да. Индекс это сдвиг от адреса начала так-то

Dolphin
08.05.2018
19:44:46
эффективный адрес строки во флеш:
Смещение + сумма длин всех строк до искомой
по указанному адресу - ключ
длина текущей строки известна из массива

Антон
08.05.2018
19:45:46

Dolphin
08.05.2018
19:46:13
... и номер из индекса

kaktys
08.05.2018
19:47:33

Антон
08.05.2018
19:48:20

kaktys
08.05.2018
19:50:12
Крутить его?

Dolphin
08.05.2018
19:51:47

Юра
08.05.2018
19:52:14
Вот сообщение по чуть-чуть писал
Ща допишу

Google

Юра
08.05.2018
19:53:33
Значит что имеем:
В начале еепрома хранить индекс и длину строки. Макс длина строки это 24 байт, т.е. Нужно 10 бит на индекс и 5 бит на длину, т.е. 15 бит в сумме, т.е 2байта без бита
Сразу за этими 2024 байтами индексов хранить пары 3байта ключ и стринга выровненная до байта
Так?

Dolphin
08.05.2018
19:56:20
нет
1кб значений длин строк
находятся во флеш по смещению
сразу следом - начинается массив строк с ключами
вначале каждой строки - ключ
чтобы узнать адрес строки, нужно пробежать массив длин и вычислить сумму длин (смещение внутри массива строк) до нужной строки
по указанному адресу лежит ключ, следом за которым сама строка

Admin
ERROR: S client not available

Dolphin
08.05.2018
19:58:39
длина строки в массиве длин учитывает длину ключа
+3
иначе тебе нужен уже массив двухбайтных адресов
что больше ровно в два раза
но дает большую производительность
(не нужно вычислять адрес, он уже указан в массиве)

Юра
08.05.2018
20:00:50
Такс
Ща обдумаю тобое сказанное
Так, не. Падажжи

Google

Dolphin
08.05.2018
20:04:08
начало тоже не нужно

Юра
08.05.2018
20:04:40

Dolphin
08.05.2018
20:04:41
оно у тебя - адрес массива длин + 1024 (или сколько у тебя строк)

Юра
08.05.2018
20:04:59
(1012)

Dolphin
08.05.2018
20:05:14
ну вот - делаешь один большой массив

Юра
08.05.2018
20:05:25
Но вот проблема. Может я в будующем оптимизирую алгоритм и мне надо будет не последовательно проходить весь массив, а выборочно. Тогда считать суммы будет крайне неудобно математически

Dolphin
08.05.2018
20:05:26
вначале идет 1012 значений длин
да
я тебе оптимизировал задачу по размеру за счет вычислительной сложности )
тебе нужна скорость?
думаю нет
она будет приемлимой

Юра
08.05.2018
20:08:20

Dolphin
08.05.2018
20:08:36
328 имеет алу
сложение за такт

Юра
08.05.2018
20:08:43
она будет приемлимой
Ну допустим, смогу ли я за секунду просмотреть все ключи заново пересчитывая суммы?

Dolphin
08.05.2018
20:08:53
ща
чтение 2 такта + загрузка 1 такт
3*1012+1011
тактов на весь массив

Юра
08.05.2018
20:11:16
Т.е. 172738786