2012-02-01 4 views
0

Мне нужно смоделировать покер-столовую очередь, где пользователи берут свои позиции на основе первого доступного места. Я видел это со списками, но я решил его использовать побитовые операционные системы.Является ли это наиболее эффективным способом симуляции «стола для покера»?

def add_user_to_table(max_users=8): 
    global tbl 
    # simulate the first position: 00000001 
    pos = 1 
    # iterate through all positions. break once found empty position 
    for i in range (0, max_users): 
     if not (tbl & pos): 
      # found an empty position... 
      # return position, break, etc... 
     else: 
      # shift the bit 1 position left to check the next position 
      # so after the 1st iteration pos will be 00000010 
      pos = pos << 1 

# main. Define a table with some users seated 
# a table with seats 1, 3, 4, 6 taken 
tbl = int('00101101', 2) 
# now place the user on the first available seat (second seat in this example) 
add_user_to_table() 

С точки зрения производительности (я нужны тысячи таблиц с десятками пользователей), будет ли это самый быстрый и эффективный способ?
Были ли списки/очереди/deques и т. Д. Нарушать этот метод?

+2

возможно больше подходит для http://codereview.stackexchange.com? –

+0

благодарит за заметку. исправлено. – user1102018

ответ

1

Ваш метод, вероятно, превосходит списки/очереди, но есть только один способ узнать. Имитировать! Инициирует процессы/потоки с 1000 таблицами с различными конфигурациями пользователей. Бьюсь об заклад, вы все равно должны были это сделать, прежде чем выпускать свою систему.

0

Если вы собираетесь поиграться битами для эффективности вы можете также пройти весь путь и использовать один из многих прохладных битных вертел хаков для выполнения такого рода вещи - см Position of least significant bit that is set

В частности, для петли вы дали для поиска низкого четкого бита в таблице могут быть заменены:

пос = ~ TBL & ~ (~ TBL -1)

Если вам нужно найти количество бит вместо фактический бит, есть множество прохладных хаков, чтобы сделать это быстро, а также.

+0

Это похоже на интересное решение. Я посмотрю. Благодаря! – user1102018

Смежные вопросы