Al final del día, un solo carácter alfanumérico tiene al menos 36 valores posibles. Si incluye signos de puntuación, minúsculas, etc., puede pasar fácilmente 72 valores posibles.
Un número que no colisiona y que le permite comparar rápidamente cadenas necesariamente crecerá exponencialmente con la longitud de la cadena.
Así que usted primero debe decidir sobre la cadena más larga que está esperando para comparar. Suponiendo que tiene N caracteres de longitud, y suponiendo que SÓLO necesita letras mayúsculas y los números 0-9, debe tener una representación entera que puede ser tan alta como 36^N
Para una cadena de longitud 25 (común nombre del campo) luego terminas necesitando un número binario con 130 bits.
Si lo compone en números de 32 bits, necesitará 4. Luego puede comparar cada número (cuatro comparaciones enteras no deberían tomarse en ningún momento, en comparación con caminar la cadena). Recomendaría una gran biblioteca de números, pero para este caso especializado estoy bastante seguro de que puede escribir el suyo propio y obtener un mejor rendimiento.
Si desea manejar 72 valores posibles por carácter (mayúsculas, minúsculas, números, puntuación ...) y necesita 10 caracteres, necesitará 62 bits, dos enteros de 32 bits (o uno de 64 bits si está en un sistema compatible con la informática de 64 bits)
Sin embargo, si no puede restringir los números en la cadena (es decir, podría ser cualquiera de las 256 letras/números/caracteres/etc.) y usted no puede definir el tamaño de la cadena, luego comparar las cadenas directamente es la única manera de hacerlo, pero hay un atajo.
Emite el puntero de la cadena a una matriz de enteros sin signo de 32 bits y compara la cadena 4 bytes a la vez (o 64 bits/8 bytes por vez en un procesador de 64 bits). Esto significa que una cadena de 100 caracteres solo requiere 25 comparaciones como máximo para encontrar cuál es mayor.
Puede necesitar redefinir el conjunto de caracteres (y convertir las cadenas) para que los caracteres con mayor precedencia tengan valores más cercanos a 0, y valores de precedencia más bajos cerca de 255 (o viceversa, dependiendo de cómo los están comparando).
¡Buena suerte!
-Adam
Si la longitud de la cuerda es fija, ¿cómo la colisión es inevitable? ¿Puede usted explicar por favor? – Swamy