Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
otros:algoritmos [2012/11/01 11:26] 127.0.0.1 editor externo |
otros:algoritmos [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 105: | Línea 105: | ||
| </code> | </code> | ||
| + | === Código Python de ejemplo === | ||
| + | <code python> | ||
| + | import threading | ||
| + | import Queue | ||
| + | class Producer(threading.Thread): | ||
| + | def __init__(self, in_queue, out_queue): | ||
| + | threading.Thread.__init__(self) | ||
| + | self.in_queue = in_queue | ||
| + | self.out_queue = out_queue | ||
| + | |||
| + | def run(self): | ||
| + | while True: | ||
| + | item = self.in_queue.get() | ||
| + | result = 'You should be doing work.' | ||
| + | self.out_queue.put(result) | ||
| + | self.in_queue.task_done() | ||
| + | |||
| + | class Consumer(threading.Thread): | ||
| + | def __init__(self, out_queue): | ||
| + | threading.Thread.__init__(self) | ||
| + | self.out_queue = out_queue | ||
| + | |||
| + | def run(self): | ||
| + | while True: | ||
| + | item = self.out_queue.get() | ||
| + | result = 'This is your awesome output.' | ||
| + | self.out_queue.task_done() | ||
| + | |||
| + | if __name__ == '__main__': | ||
| + | item_list = ['item1', 'item2', 'item3'] | ||
| + | in_queue = Queue.Queue() | ||
| + | out_queue = Queue.Queue() | ||
| + | for i in xrange(len(item_list)): | ||
| + | t = Producer(in_queue, out_queue) | ||
| + | t.daemon = True | ||
| + | t.start() | ||
| + | for item in item_list: | ||
| + | in_queue.put(item) | ||
| + | for i in xrange(len(item_list)): | ||
| + | t = Consumer(out_queue) | ||
| + | t.daemon = True | ||
| + | t.start() | ||
| + | in_queue.join() | ||
| + | out_queue.join() | ||
| + | </code> | ||
| ===== Algoritmos para detectar un bucle ===== | ===== Algoritmos para detectar un bucle ===== | ||
| Si en una linked list queremos detectar si hay un bucle infinito podemos hacerlo de varias formas. La más sencilla es la de ir marcando los elementos que vamos comprobando, así al comprobar un elemento si tiene marca entonces significa que sí que existe un bucle. Otra forma sería ir guardando los elementos ya comprobados en una nueva lista luego, al comprobar un nuevo elemento si este existiese en la lista nueva es que, en efecto, hay un bucle. Pero hay otros algoritmos que simplifican esta operación y no gastan tantos 'recursos' (la segunda forma, por ejemplo, si la linked list fuese muy larga gastaría mucho). \\ \\ | Si en una linked list queremos detectar si hay un bucle infinito podemos hacerlo de varias formas. La más sencilla es la de ir marcando los elementos que vamos comprobando, así al comprobar un elemento si tiene marca entonces significa que sí que existe un bucle. Otra forma sería ir guardando los elementos ya comprobados en una nueva lista luego, al comprobar un nuevo elemento si este existiese en la lista nueva es que, en efecto, hay un bucle. Pero hay otros algoritmos que simplifican esta operación y no gastan tantos 'recursos' (la segunda forma, por ejemplo, si la linked list fuese muy larga gastaría mucho). \\ \\ | ||
| Línea 145: | Línea 190: | ||
| </code> | </code> | ||
| + | ==== Potencia de 10 ==== | ||
| + | <code> | ||
| + | i = 1; | ||
| + | while((i * 10) < x) | ||
| + | i *= 10; | ||
| + | </code> | ||
| ==== Movimiento por array circular ==== | ==== Movimiento por array circular ==== | ||
| * C | * C | ||