0

かなり典型的なスケジューリング アプリの適切なデータ表現を見つけるのに少し苦労しています。少し混乱する要件は、毎日任意の可用性を持つ2つのパーティーがあり、2つのパーティーがあるかどうかに関係なく、決まった時間に多かれ少なかれ提供されるコースがあることです(ただし、ここでも例外が発生する可能性があります)。そのタイミングで利用できるかどうか。

後の課題の 1 つは、スケジュールされたコースで利用可能なプロバイダーを見つけることであるため、ビットマスクのようなものを使用して、これらの毎週の可用性パターンを 64 ビット整数に単純に格納することが迅速かつエレガントな方法ではないかと考えていました。 .

私の理論的根拠は、基本的に、毎日は 24 時間 (< 2^5) あり、1 日を 10 分間隔に分割すると、1 日あたり 144 スロット (2^8 よりはるかに少ない) になるということです。したがって、すべての人は、毎日がその日の 8 ビット アベイラビリティ マスク (7 x 8 ビット = 56 ビット、64 ビット int 未満) である週次スケジュールを取得できます。

潜在的なユーザーのフィルタリングと識別は、潜在的な予定を同じ種類のマスクに変換し、ビットごとの操作を実行して、そこで利用可能な候補者のみを選択することで、非常に迅速かつ簡単に実行できます。

私が疑問に思っているのは、ビットレベルでこれ以上のフィルタリングが行われていないのはなぜなのかということです。なぜなら、それはかなり単純明快に思えるからです。うまくいけば、実際には、より冗長なものよりもエレガントになることさえあると思います。明示的な論理、考え/アイデアはありますか?

4

1 に答える 1

3

時期尚早の最適化の典型的なケース。最初にプログラムを実行します。プログラムが遅い場合にのみ、ビット単位の操作で最適化することを検討する必要があります。たとえば、任意の長さ 64 に制限されていないベクトルまたはブール値のリストを使用するなど、可能な限りクリーンな方法で実装することから実際に開始する必要があります。

たとえば、 でnumpy配列を使用できますdtype=bool。これは、手作業でコーディングされたビットベクトルよりもコンパクトではないかもしれませんが、すべての論理演算を無料で取得でき ( のような演算子も使用できます|, ^, & and ~)、実質的に無制限のサイズを使用でき、スライスやインデックス作成などを行うことができます。

于 2013-10-22T19:59:28.877 に答える