Привет друзья.Есть тема над которой я думаю последние несколько недель.
Я постараюсь не быть многословным
(это мой косяк) и кидать
snippets вместо множества букв.
1.
Создание (Пишу на псевдо-языке который может быть C#/D/Rust/Java).
Cube cube = new MCube(2580,2580,2580).withStaticAllocation();
2.
Наполнение фактами. В данном случае предикат isMutuallySimple утверждает что тройка чисел - взаимно простые.
for(i in 0..2579) for (j in 0..2579) for (k in 0..2579)
if (isMutuallySimple(i,j,k)) cube.set(i,j,k);
3. Проверка куба.
cube.check(7,9,16) == true
Дает истину т.к. 7 и 9 и 16 взаимно простые. Это просто пример. В предикате
может стоять ваша бизнес-логика. Проверка физ-лица. Предприятия. Тех-средства.
Фак.Задлянафига.. Ответ - я искал аналог структурам данных типа HashTable. Возможный поинт - экономия.
Цифры. Для куба с расходом памяти в 2Gbyte. (~17 179 869 184 boolean элемента)
Size | Dimensions | 131072 | 2 | 2580 | 3 | 362 | 4 |
|
Переводя на наш язык. Хранение таблицы фактов с тремя колонками с кардинальностью
порядка 2 с половиной тысячи потребует в самом худшем случае 2Г оперативы.
Дальше - думайте. Прикидывайте.
Где применять. Хм... изначально я думал о кешах Хибернейт. Чуть позже задача стала более общая. Я стал думать о пользе кубиков.
Еще поинты.
Цифры - это не уныло. Нужен справочник строки - цифры.
Размерность куба должна быть гибкой. Ну... по крайней мере он не должен
падать при доступе к элементу с индексом 2581 в нашем кейсе. Я думаю над
этим.
Итератор. Собственно поддержать можно. Но будут накладные. Подумайте.
Что не ложится в куб. Вещественные величины. Даты. Время. Деньги.
Что круто ложится в куб. Перечисления. Справочники.
Ну вобщем все.
Пишите каменты. Имплементации пока нет.