2 votos

¿es posible hacer un hash de un rango?

DE ACUERDO. No soy un matemático. Soy programador, así que perdóname por la jerga no matemática.

digamos que tengo 3 rangos

[1 - 3]    //  index 0
[4 - 6]    //  index 1
[7 - 13]   //  index 2
etc etc etc with any arbitrary sorted, non-overlapping range

¿Es matemáticamente posible hacer algo así?:

func(2) -> should print result index[0]

o

func(8) -> should print result index[2]

La idea es que quiero proporcionar cualquier arbitraria clasificado y almacenarlo como un hash. Los rangos no se solapan.

A continuación, proporcione un número al func y debería decirme el índice.

Para ello, creo que necesitaría (por ejemplo el primer rango), tomar los números 1, 2, 3 y convertirlo en un hash. De modo que si una entrada de digamos 2 se asignaría a ese hash exacto.

¿Es posible?

[No sé a qué área de las matemáticas corresponde esta pregunta].

Editar : El recuento de rangos puede ser cualquier cantidad. Estoy tratando de evitar bucles. El recuento puede llegar hasta 60k. Es por eso que me preguntaba si hashing era posible con las matemáticas dados los requisitos anteriores. Si es posible en matemáticas, entonces será posible en código.

Editar #2 : Mi intento de hacer la pregunta más matemática como .. espero.

¿Es posible tomar una lista de enteros ordenados: digamos 5 => [1, 2, 3, 4, 5] Y crear un hash con ellos, tal que sea posible lo siguiente.

func(0) results false
func(6) results false
func(1) results true
func(2) results true
func(3) results true
func(4) results true
func(5) results true

1voto

user275313 Puntos 103

Si conoces los valores "índice" de cada rango, supongo que tienes un array que contiene esos rangos en orden. ¿Por qué no haces una vieja y aburrida búsqueda por bisección (comparando el valor que quieres buscar con los valores "iniciales" de cada rango) para encontrar el rango con el mayor valor "inicial" menor que el valor que estás buscando? Como ése es el único rango posible que podría contener el valor, sólo tiene que comprobar si el valor es menor que el valor "final" de ese rango y devolver el índice de ese rango o "No se ha encontrado ningún rango".


Releyendo tu pregunta, en realidad no quieres que te devuelva la "posición del índice", sino el objeto Range. (Estoy asumiendo que usted tiene algún tipo de objeto que representa un rango.) Así que,

func(2) -> 0

no es lo que quieres, pero

func(2) -> Range(1,3)

es. En ese caso puede ignorar lo que he dicho sobre la devolución de índices y limitarse a devolver el objeto Range(). Pero esto sigue asumiendo que tienes tus Rangos almacenados en un array ordenado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X