Обеспечение правильного вида операций над правильными типами - PullRequest
0 голосов
/ 16 сентября 2010

Я хочу написать программу для загрузки хранилища значений ключей со множеством случайных данных случайных типов. Предполагая, что хранилище значений ключей поддерживает три типа (строки, списки и наборы), существуют операции, которые допустимы для набора (скажем, объединение), которые недопустимы для строк.

#define SUBSTR 0  // substring, only on strings 
#define SEARCH 1 // search, only on strings
#define PUSH 3 // only on lists
#define ADD 4 // only on sets
#define UNION 5 // only on sets

Я заполняю таблицу случайными операциями, но хочу убедиться, что эти операции выполняются для ключа правильного типа. Например, гарантируя, что операции объединения всегда выполняются на ключах типа set.

int optab[100];
optab[0] = ADD
optab[1] = SUBSTR
.
.
.
optab[99] = UNION

Для каждой выполняемой операции я мог бы записать тип каждого ключа локально в тот момент, когда ключ был впервые создан в моей программе, или продолжать обходить пространство ключей, пока не найду ключ правильного типа. Но я тоже не хочу этого делать.

При первом параметре размер структуры, используемой для поддержки деталей, увеличивается по мере добавления новых ключей (и типов). А со вторым вариантом время, необходимое для поиска правильного ключа для типа, увеличивается по мере добавления ключей (и типов).

Существует ли умный способ правильного сопоставления типов и операций, не зависящий от размера пространства ключей или количества поддерживаемых типов?

Я надеюсь, что с учетом операции я смогу сгенерировать случайное имя ключа (например, key90876) с 90876, являющимся случайной частью, которая была бы правильного типа.

1 Ответ

1 голос
/ 16 сентября 2010

Если каждая операция действительна только для одного типа, вам не потребуется дополнительное пространство или время - вы просто загружаете ключи в разные списки в зависимости от их типа, и каждая операция будет работать в соответствующем списке.

Если одна и та же операция может применяться к нескольким типам, то для этого не существует какого-либо «умного» способа. Это вопрос пространственно-временного компромисса, и вы должны выбрать тот метод, который вам больше подходит. Произойдет случайный выбор ключей до совпадения с операцией, но нет никакой гарантии, сколько попыток вам понадобится, прежде чем вы получите правильный тип ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...