0

私は、週の特定の時間に会うためにグループの可用性のすべてのメンバーに関する情報を含むグーグルドキュメントスプレッドシートを持っています。週に複数の会議を開催する必要があり、グループのさまざまなメンバーが特定の会議に参加する必要があります。これに基づいて、ほとんどのメンバーが各会議に参加できるようにスケジュールを作成する方法が必要です。同じ時間帯に会議を開催することはできません。

このテーブルには、開催される各会議の行が含まれています。各列は、会議を開催できる時間枠(たとえば、月曜日の午後6時30分から午後8時)を表します。特定の会議と特定のタイムスロットに対応するセルには、各会議に参加できる人数を表す数字が含まれています。セルに会議に登録したメンバーの数と同じ数が含まれている場合、セルはGoogleドキュメントによって自動的に強調表示されます。

私はこれを行うためにグーグルドキュメントのスクリプト機能を使用してこの問題を解決しようとしていますが、アルゴリズムを理解するのに問題があります。本当に必要なのは擬似コードだけで、それを書くことができます。

スクリプトで、セルの2次元配列と、セルが強調表示されているかどうかに対応する2次元ブール配列があると仮定します(つまり、最大メンバーが参加できることを意味します)。

テーブルの例を次に示します。

|Meeting    |Mon 6:30-8:30pm |Mon 8:30-10:30pm |Tue 6:30-8:30pm |Tue 8:30-10:30pm |
|-----------|----------------|-----------------|----------------|-----------------|
|Meeting 1  |7               |9                |8               |6                |
|Meeting 2  |3               |5                |1               |4                |
|Meeting 3  |10              |15               |12              |8                |
|-----------|----------------|-----------------|----------------|-----------------|

助けてくれてありがとう!

4

1 に答える 1

0

私があなたの言っていることを理解していると仮定すると、あなたは会議をスケジュールする順序を選択することから始めなければならないでしょう。他のすべてが同じように聞こえることを考えると、私が考えることができる最善の方法は、ほとんどの人が参加できる会議を選択することから始めることです。

firstScheduled = max(max(meeting1), max(meeting2), max(meeting3));

その後、残りの会議を見て、現在予定されていない日に可能な限り多くの出席者がいる会議を確認します。

foreach meeting as m
    foreach day as d
        if d is currently scheduled
            m = 0  // set all attendees to 0; no one can come, since the'll be
                   // at the other meeting
        end if
    end for

    highestAttendanceDate = max(meeting1)
end for

次に、すべての会議がスケジュールされるまで、それを繰り返します。

于 2011-04-15T20:11:32.887 に答える