2017-04-25 3 views
0

J'ai 500 trames pour lesquelles j'ai stocké la longueur de chaque trame dans un tableau car les trames sont dans l'ordre croissant.Implémentation du dictionnaire/LUT en C

const char header_length = {23,34, 45, 12, 23,56,......,2,4}; 

Ici, la trame 1 a une longueur de 23 octets, la trame 2 a une longueur de 34 octets. Maintenant quand on me demande une trame avec en-tête 4 je devrais répondre avec une trame avec en-tête 7, une trame avec en-tête 8 nécessiterait une trame réponse avec en-tête 60. La co-relation est une constante, Cadre. J'ai donc besoin d'une sorte de table de mise en œuvre ici. Je prévois de l'implémenter en utilisant un tableau multidimensionnel. Bien qu'il existe une meilleure façon de mettre en œuvre cela?

+2

Les deux premières phrases ont du sens. Les autres sont ... bien, totalement hors contexte. –

+0

Il suffit de trouver une implémentation de l'arborescence RB. – dtech

+0

@EugeneSh. Pour simplifier considérer il y a 4 images 1,2,3,4 avec la longueur 23, 34, 45 12. Quand je reçois le cadre 1 je réponds avec le cadre 2, quand je reçois le cadre 3 je réponds avec le cadre 4, considérons l'autre cadre réponses comme 0 pour l'instant. Le LUT sera un tableau dont l'index + 1 est le numéro d'image. En position 1 je vais stocker la longueur et en position 2 le cadre de réponse. Donc, dans notre cas de 4 cadres, une implémentation de dictionnaire ressemblerait à [23: 2,34: 0,45: 4,12: 0]. J'espère que cela simplifie la question. – CodeModeOn

Répondre

0

Je réponds en fonction du commentaire de l'OP ci-dessus, sinon la question de l'OP n'a tout simplement aucun sens.

En supposant que la taille de trame maximale est limitée par une petite considérablement N, alors il peut être préférable de garder juste un autre tableau comme suit,

const char header_length[] = {23,34, 45, 12, 23,56,......,2,4}; 
const int to_be_replied[N+1] = {...,0,...,2,...,0,...,4,...}; /* fill remaining */ 
/* here are their positions  @12 @23 @34 @45 */ 

et utilisez ce qui suit au cours de la réponse.

int frame_num, reply_frame_num; 
frame_num = get_frame_number(); /* some function */ 
reply_frame_num = to_be_replied[header_length[frame_num]];