1

Тема: Аналог BitArray, але з елементами, що мають три значення

В мене є BitArray, деякі елементи котрого == true.
При перебиранні цих елементів, деякі з них використовують для побудови деяких штучок. Я хочу позначити ці бітики як використані.
Тобто, в моєму уявному BitArray є елементи, котрі можуть приймати три значення:
1. false
2. true
3. used

Яким способом краще це реалізувати, аби воно займало якомога менше місця в пам'яті, і аби до елементів масиву можна було б звертатись по індексу?

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...

2 Востаннє редагувалося koala (18.06.2017 00:49:52)

Re: Аналог BitArray, але з елементами, що мають три значення

Варіант 1. Тримати 2 бітових масиви (чи в одному по 2 біти на тріт). На 32 біти - 16 трітів.
Варіант 2. Тримати масив цілих, які представляють набори трітів в троїчній системі  (0 - всі 0, 4 - дві останні цифри дорівнюють 1 і т.д. Максимальний ступінь 3, менший за 2^32 - 20, маємо 20 трітів на 32 біти, і трохи геморою з обчисленням.
Варіант 3. Довге число, що в 3-їчній системі представляє наш масив. На, скажімо, 2048 біт буде 1296 трітів - проти 1024 в першому варіанті і 1280 в другому. Зате обчислень набагато більше.

Подякували: 0xDADA11C7, FakiNyan2