Является ли это наиболее эффективным способом моделирования очереди за столом «покерного стола»? - PullRequest
0 голосов
/ 01 февраля 2012

Мне нужно смоделировать очередь, похожую на покерный стол, где пользователи занимают свои позиции на основе первого доступного места.Я видел, что это сделано со списками, но я решил это с помощью побитовых операций.

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()

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

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

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

0 голосов
/ 01 февраля 2012

Если вы собираетесь использовать биты с двойным поворотом для повышения эффективности, вы также можете пройти весь путь и использовать один из множества крутых битов с двойным битом для такого рода действий - см. Положение младшего значащего бита, который установлен

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

pos = ~ tbl & ~ (~ tbl -1)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...