0

言語は JavaScript ですが、この質問は言語に依存しないと思います。問題は次のとおりです。

問題

テーブルにサービスを提供する 2 人のウェイター。1 つは掃除、もう 1 つは新しい皿を出すことです。バスボーイは、入れたての食器を片付けないようにしなければなりません。バスボーイとサーバーが小さな作業単位でタスクを実行し、食事が迅速に提供されていることを顧客に見せるために、サーバーはバスボーイと同時に動作する必要があります. これはローエンドのビュッフェなので、完成した/持ち帰った料理は再び持ち帰ることができます(パンケーキがもっとありますか?)

手順:

  1. バスボーイが来て、テーブルにある 15 皿の中から 5 皿を取り出し、キッチンに持っていきます。
  2. サーバーが来ると、注文シートに 35 種類の料理のうち 5 種類の新しい料理が表示されます。カップルディッシュ(パンケーキとブルーベリー)は、テイクアウトしたばかりのものと同じ種類で、残りは新しいものです。
  3. これは、busboy とサーバーの両方が完了するまで続きます。バストボーイは3合で15枚のプレートをケア。サーバーには 35 皿の料理があり、7 回の注文で持ち込むことができます。
  4. その後テーブルに残ったもの 35枚。

制限:

  • サーバーは、顧客第一に最も近い方向で機能する必要があります。
  • バスト ボーイは、パンケーキとブルーベリーの 2 枚の新鮮なプレートを取り除かないようにする必要があります。これは、サーバーが新しいプレートを古いプレートの上に置いた後にそれらを片付けに来た場合に発生する可能性があります。

JavaScript には、UI をクリーンアップする setInterval(bust, 50) 関数と、新しい要素を UI に追加する setInterval(serve, 50) があります。2 つのシミュレートされたスレッドが同時に動作しています。これは、シリアル シーケンスでのクリーンアップに 10 秒かかり、処理にさらに 20 秒かかる場合があるためです。代わりに、特に目に見える領域で、進歩が見られるようにしたいと思います。上記のプレートは実際には html id であり、DOM が操作されています。操作しているアイテムの配列/ハッシュテーブルを保持しています。

私のアルゴリズムは何ですか?

編集:グラフィックスでは、通常、非表示のバッファーにペイントしてから、表示されているバッファーを非表示のバッファーに切り替えます。この概念を自分の問題に適用する方法がわかりません。これらは、ピクセルではなく、何千もの dom 要素です。要素を削除して破棄し、新しい要素を追加すると、コストがかかる可能性があります。

4

1 に答える 1

0

これは、典型的なキャパシテイテッド ビークル ルーティングの問題のように見えます。この問題では、倉庫、コンテナー、およびトラックがあり、コンテナーにサービスを提供するための最短ルートを見つけたいと考えていますが、トラックごとに x 個のコンテナーを運ぶことが制限されています。これは、ビンパッキング問題と旅行セールスマンの問題を組み合わせたものです。倉庫をキッチンに、トラックをウェイターに、コンテナを食器に置き換えることができると思います。

于 2012-10-12T21:57:58.120 に答える