Numero del 1

Numero del 1

Contar el número de 1s en un número binario javascript

Manera eficiente de contar el número de 1s en la representación binaria de un número en O(1) si tienes suficiente memoria para jugar. Esta es una pregunta que encontré en un foro online, pero no tenía respuesta. ¿Alguien puede sugerir algo, no se me ocurre una forma de hacerlo en tiempo O(1)?
Al parecer, tengo que explicar un poco: “si tienes suficiente memoria para jugar” significa, que tenemos toda la memoria que necesitamos (sin tener en cuenta la posibilidad técnica). Ahora, no es necesario almacenar la tabla de búsqueda para más de un byte o dos. Mientras que técnicamente será Ω(log(n)) en lugar de O(1), sólo la lectura de un número que necesita es Ω(log(n)), así que si eso es un problema, entonces la respuesta es, imposible-que es aún más corto.
Hay otro truco más: mientras que los ingenieros pueden tomar un número y hablar de Ω(log(n)), donde n es el número, los informáticos dirán que en realidad debemos medir el tiempo de ejecución en función de la longitud de una entrada, así que lo que los ingenieros llaman Ω(log(n)) es en realidad Ω(k), donde k es el número de bytes. Aun así, como dije antes, sólo leer un número es Ω(k), así que no hay manera de que podamos hacerlo mejor.

191. número de 1 bits

La confusión comienza con esta definición que una persona puede dar de “primo”: un número primo es un número entero positivo que sólo es divisible por 1 y por sí mismo. El número 1 es divisible por 1, y es divisible por sí mismo. Pero él mismo y 1 no son dos factores distintos. ¿Es 1 primo o no? Cuando escribo la definición de primo en un artículo, intento eliminar esa ambigüedad diciendo que un número primo tiene exactamente dos factores distintos, 1 y él mismo, o que un primo es un número entero mayor que 1 que sólo es divisible por 1 y por él mismo. Pero, ¿por qué llegar a esos extremos para excluir el 1?
Mi formación matemática me enseñó que la buena razón para que el 1 no se considere primo es el teorema fundamental de la aritmética, que afirma que todo número puede escribirse como producto de primos exactamente de una manera. Si el 1 fuera primo, perderíamos esa unicidad. Podríamos escribir 2 como 1×2, o 1×1×2, o 1594827×2. Excluir el 1 de los primos lo suaviza.
Mi plan original para este artículo era explicar el teorema fundamental de la aritmética y terminar con él. Pero en realidad no es tan difícil modificar el enunciado del teorema fundamental de la aritmética para abordar el problema del 1 y, después de todo, la pregunta de mi amigo despertó mi curiosidad: ¿cómo llegaron los matemáticos a esta definición de primo? Si echamos un vistazo a algunas páginas de la Wikipedia relacionadas con la teoría de los números, encontramos la afirmación de que el 1 solía considerarse primo, pero ya no lo es. Pero un artículo de Chris Caldwell y Yeng Xiong muestra que la historia del concepto es un poco más complicada. Aprecio este sentimiento del principio de su artículo: “En primer lugar, si un número (especialmente la unidad) es primo es una cuestión de definición, por lo que es una cuestión de elección, contexto y tradición, no una cuestión de prueba. Sin embargo, las definiciones no se hacen al azar; estas elecciones están ligadas a nuestro uso de las matemáticas y, especialmente en este caso, a nuestra notación”.

1” significa en la medición

Los seres humanos utilizan los sistemas numéricos decimal (base 10) y duodecimal (base 12) para contar y medir (probablemente porque tenemos 10 dedos de la mano y dos del pie). Los ordenadores utilizan el sistema numérico binario (base 2), ya que están hechos de componentes digitales binarios (conocidos como transistores) que funcionan en dos estados: encendido y apagado. En informática, también se utilizan los sistemas numéricos hexadecimal (base 16) u octal (base 8), como forma compacta de representar los números binarios.
Denotaremos un número hexadecimal (abreviado, hex) con un sufijo H. Algunos lenguajes de programación denotan los números hexadecimales con el prefijo 0x o 0X (por ejemplo, 0x1A3C5F), o el prefijo x con los dígitos hexadecimales citados (por ejemplo, x’C3A4D98B’).
Los ordenadores utilizan el sistema binario en sus operaciones internas, ya que están construidos a partir de componentes electrónicos digitales binarios con 2 estados: encendido y apagado. Sin embargo, escribir o leer una larga secuencia de bits binarios es engorroso y propenso a errores (prueba a leer esta cadena binaria 1011 0011 0100 0011 0001 1101 0001 1000B, que es lo mismo que el hexadecimal B343 1D18H). El sistema hexadecimal se utiliza como forma compacta o abreviada de los bits binarios. Cada dígito hexadecimal equivale a 4 bits binarios, es decir, la abreviatura de 4 bits, como sigue:

Contar el número de 1s en un número binario python

Manera eficiente de contar el número de 1s en la representación binaria de un número en O(1) si tienes suficiente memoria para jugar. Esta es una pregunta de entrevista que encontré en un foro online, pero no tenía respuesta. ¿Alguien puede sugerir algo, no se me ocurre una forma de hacerlo en tiempo O(1)?
Al parecer, tengo que explicar un poco: “si tienes suficiente memoria para jugar” significa, que tenemos toda la memoria que necesitamos (sin tener en cuenta la posibilidad técnica). Ahora, no es necesario almacenar la tabla de búsqueda para más de un byte o dos. Mientras que técnicamente será Ω(log(n)) en lugar de O(1), sólo la lectura de un número que necesita es Ω(log(n)), así que si eso es un problema, entonces la respuesta es, imposible-que es aún más corto.
Hay otro truco más: mientras que los ingenieros pueden tomar un número y hablar de Ω(log(n)), donde n es el número, los informáticos dirán que en realidad debemos medir el tiempo de ejecución en función de la longitud de una entrada, así que lo que los ingenieros llaman Ω(log(n)) es en realidad Ω(k), donde k es el número de bytes. Aun así, como dije antes, sólo leer un número es Ω(k), así que no hay manera de que podamos hacerlo mejor.

Acerca del autor

admin

admin

Ver todos los artículos