Borde Encontrar Búsqueda Binaria -- python campo con algorithm campo con performance camp codereview Relacionados El problema

Edge finding binary search


4
vote

problema

Español

Imagine un sitio web que publique el número de viajeros diarios en solo una forma gráfica cada día usando un gráfico de barras. Quiero determinar el número al leer la tabla de barras después de guardar el gráfico como una imagen (la imagen de la imagen no es importante aquí). La forma en que quiero leer el gráfico de barras es ir a un número de píxel (el Axis de los viajeros) y hacer la pregunta: "¿Está el píxelado 'o' OFF '?" (SIGNIFICADO SIGNIFICADO DE QUE LA BARRA ESTÁ PRESENTE UNIDAD SIGNIFICA QUE ESTA CONFIGURACIÓN MUY alta) Nota: Que hay un límite inferior de 0 y, técnicamente, un límite superior infinito. Pero, en realidad, 10000 puede ser el límite superior realista. También tenga en cuenta que ningún cambio de ayer es un hallazgo frecuente.

Dado un número de inicio de ayer para adivinar, ¿cuál es la forma más eficiente de encontrar el número? ¿Mi función proporciona el método más eficiente? eficiente significa menos número de consultas para preguntar si un píxel está encendido o apagado. Habrá varias barras para medir y realizar un seguimiento del número de iteración podría agregar complejidad no deseada si no es realmente necesario.

Mi algoritmo sigue como una función. Cualquier consejo es muy bienvenido. (llevado a cr de se, https://stackoverflow.com/questions/13782587/DEED-finding-binary -Búsqueda )

  def EdgeFind(BlackOrWhite,oldtrial,high,low): # BlackOrWhite is a 0 or 1 depending on if the bar is present or not.  A 1 indicates that you are below or equal to the true number.  A 0 indicates that you are above the true number # the initial values for oldtrial, high, and low all equal yesterday's value   factorIncrease = 4 #5  finished = 0   if BlackOrWhite == 1 and oldtrial==high:     newtrial = oldtrial+factorIncrease*(high-low)+1     high = newtrial     low = oldtrial  elif BlackOrWhite == 1 and high-oldtrial==1:     finished = 1     newtrial = oldtrial  elif BlackOrWhite == 1:     newtrial = oldtrial+(high-oldtrial)/2     low = oldtrial   if BlackOrWhite == 0 and oldtrial==low:     newtrial = (oldtrial)/2     high = oldtrial     low = newtrial  elif BlackOrWhite == 0 and oldtrial-low==1:     finished = 1     newtrial = oldtrial-1  elif BlackOrWhite == 0:     newtrial = oldtrial-(oldtrial-low+1)/2     high = oldtrial   if (oldtrial==1) and low!=1:     finished = 1   return finished,newtrial,high,low   
Original en ingles

Imagine a website that publishes the number of daily commuters in only a graphical form each day using a bar chart. I want to determine the number by reading the bar chart after saving the graphic as an image (the image stuff is not important here). The way I want to read the bar chart is by going to a pixel number (the #of commuters axis) and asking the question, "Is the pixel 'on' or 'off'?" (On means that the bar is present and off means that this guess too high) Note: that there is a lower bound of 0 and, technically, an infinite upper bound. But, in reality, 10000 may be the realistic upper bound. Also note, No Change from yesterday is a frequent finding.

Given a starting number from yesterday to guess, what's the most efficient way to find the number? Does my function provide the most efficient method? Efficient means fewest number of queries to ask if a pixel is on or off. There will be multiple bars to measure and keeping track of the iteration number might add unwanted complexity if it's not truly needed.

My algorithm follows as a function. Any advice is most welcome. (brought to CR from SE, https://stackoverflow.com/questions/13782587/edge-finding-binary-search )

def EdgeFind(BlackOrWhite,oldtrial,high,low): # BlackOrWhite is a 0 or 1 depending on if the bar is present or not.  A 1 indicates that you are below or equal to the true number.  A 0 indicates that you are above the true number # the initial values for oldtrial, high, and low all equal yesterday's value   factorIncrease = 4 #5  finished = 0   if BlackOrWhite == 1 and oldtrial==high:     newtrial = oldtrial+factorIncrease*(high-low)+1     high = newtrial     low = oldtrial  elif BlackOrWhite == 1 and high-oldtrial==1:     finished = 1     newtrial = oldtrial  elif BlackOrWhite == 1:     newtrial = oldtrial+(high-oldtrial)/2     low = oldtrial   if BlackOrWhite == 0 and oldtrial==low:     newtrial = (oldtrial)/2     high = oldtrial     low = newtrial  elif BlackOrWhite == 0 and oldtrial-low==1:     finished = 1     newtrial = oldtrial-1  elif BlackOrWhite == 0:     newtrial = oldtrial-(oldtrial-low+1)/2     high = oldtrial   if (oldtrial==1) and low!=1:     finished = 1   return finished,newtrial,high,low 
        

Lista de respuestas

3
 
vote

¿Qué tal

  addContacts(String, String, String, String, String, boolean)5  

¿Para simplificar su IFS?

 

How about

if BlackOrWhite == 1:   if oldtrial == high:     newtrial = oldtrial+factorIncrease*(high-low)+1     high = newtrial     low = oldtrial   elif high-oldtrial==1:     finished = 1     newtrial = oldtrial   else:     newtrial = oldtrial+(high-oldtrial)/2     low = oldtrial 

For simplifying your ifs?

 
 

Relacionados problema

1  Compruebe si dos cadenas son permutación entre sí  ( Check if two strings are permutation of each other ) 
private String sort(String word) { char[] content = word.toCharArray(); Arrays.sort(content); return new String(content); } private boolea...

2  IMACROS BOT para realizar refrescos  ( Imacros bot for performing refreshes ) 
Estoy tratando de simplificar este código. Parece que todo funciona como debería; Sin embargo, cuando en el bucle de actualización de Imacro, parece un poco i...

1  Integración de oscilador de fase perturbada  ( Perturbed phase oscillator integration ) 
Estoy integrando un sistema de osciladores de fase perturbados. Defino el sistema de ecuación y también la matriz jacobiana. Tengo que remodelar el vector dim...

5  Memoria / Performance of Merge Sort Code  ( Memory performance of merge sort code ) 
Escribí un código de tipo de combinación para un poco de bocadillo nocturno. Lo he puesto trabajando, pero solo estaba mirando a aprender si me faltaba algo e...

5  Encuentre el próximo número Prime - Control de flujo de los bucles anidados 'para `  ( Find the next prime number flow control of nested for loops ) 
Este código funciona perfectamente, pero me molesta. Tener un bucle etiquetado y anidado Bucle, con un Enumerable<T>.Empty()0 Declaración, y un 9988777665...

4  Simulación simple de red neural en C ++ (Ronda 2)  ( Simple neural network simulation in c round 2 ) 
Intro Ayer He publicado esta pregunta . Desde entonces, he actualizado mi código para incorporar estas sugerencias . También he eliminado la dependencia d...

35  Demasiados bucles en la aplicación de dibujo  ( Too many loops in drawing app ) 
Tengo un método que tiene muchos bucles: #ifndef __RUNES_STRUCTURES_H #define __RUNES_STRUCTURES_H /* Runes structures. */ struct Game { char board[2...

6  Palindrome más largo en una matriz  ( Longest palindrome in an array ) 
Soy nuevo en la programación, y creo que este código podría mejorarse. ¿Alguna sugerencia? 'done'0 ...

3  Generador de imágenes de Mandelbrot con iteración paralela  ( Mandelbrot image generator with parallel iteration ) 
Actualmente estoy tratando de optimizar esta clase que tengo para la generación fractal. La ecuación está destinada a ser conectable; He usado z => z*z + c ...

8  Simple GCD Utility en Java  ( Simple gcd utility in java ) 
i anteriormente discutido El rendimiento se refiere a diferentes algoritmos GCD. Escribí una simple clase de Java que implementa el algoritmo binario GCD. E...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos