2012-02-01 34 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() 

在性能方面(我將需要數千個用戶數以千計的表),這將是最快和最有效的方式嗎?
list/queues/deques等會超出這個方法嗎?

+2

也許更適合在http://codereview.stackexchange.com? – 2012-02-01 15:35:10

+0

感謝您的注意。固定。 – user1102018 2012-02-01 15:38:50

回答

1

您的方法可能會超出列表/隊列,但只有一種方法可以找出。模擬!用不同配置的用戶產生具有1000個表格的進程/線程。 我敢打賭,你必須在釋放你的系統之前這樣做。

0

如果你要玩弄求效益位,你還不如去所有的方式,並使用許多很酷位擺弄黑客的一個做這種事情 - 看Position of least significant bit that is set

特別是,對於循環你給查找表中的最低清除位可以替換爲:

POS =〜TBL &〜(〜TBL -1)

如果你需要找到位的數量,而不是實際上,有很多很酷的黑客可以很快做到這一點。

+0

這看起來像一個有趣的解決方案。我會研究它。謝謝! – user1102018 2012-02-01 19:33:21

相關問題