楽しいので、私は学校のためにpythonでタイムテーブル作成者を書いています。私。学校が自分の部屋、教師、クラス、科目、いくつかの嗜好を入力し、各クラス/教師/部屋の時間割を出力するプログラム。私はこれの背後にあるロジックに問題はありません(これは私が最も関心を寄せている部分です)。しかし、デザインには問題があります。タイムテーブル作成者のプログラム設計
私は部屋のリスト(101,102、...)、教師のリスト(Mr A、Mrs B ...)、科目のリスト(数学、英語、... )とクラス(5,6、...)のリストが含まれています。
いくつかの部屋は異なる科目に適しています(例えば、101は数学には良いですが、&英語ですが、可能ならば地理学は102でなければなりません)。もちろん、すべての教師は、彼が教える科目の特定のセットを持っています。
また、クラスは異なるグループに分かれています。私。スポーツを除くすべての被験者(5群Xおよび5群Yでもよい)および別の被験者(5群1、5群2および5群3)で5年生および5年生に分けられます。
このデータを効率的に保存する方法やクラスをデザインする方法についてアドバイスをいただけるといいですが、いいコードを書くことができます。
私の最初の推測では(pseudeコード)のようになります。
class Room:
string name # e.g. r102.name = "102"
int id # that should be unique?
class Subject:
string name
int id
map RoomPref # like geography.Roompref[r102.id] = 1.0
# or math.Roompref[r101.id] = 0.75
class Teacher:
list Subjects # like MrsB.Subjects = {geography.id, math.id}
など、など、このアプローチが良いですし、素敵なコードにつながるかどうかはわかりません。特に、すべての異なる相互接続は私に問題を引き起こす。 (別のIDを割り当てるのは良い解決策ですか?)
アドバイスや読書は大歓迎です。
これは基本的には正しく答えることができません。あなたはNP完全コンビナトリアル問題を見ているようです。おそらく、これを解決するために使用するヒューリスティックにあなたの懸念があるはずです。暫定的な解決策を査定/採点し、その状態を保存することははるかに複雑です。提案されたヒューリスティックを知らなくても、データ構造は推奨するのが難しいでしょう。確かにそれらの3つの項目のプールが必要なので、クラスを使用することは、あなたの問題の個々の単位を定義する悪い方法ではありません...あなたのコスト関数に従うならば。 – roganjosh
小さなものを書く。それに追加してください。もう少し追加してください。あなたが愚かなことをしたことを実感してください。コードをリファクタリングして、それほど愚かではありません。泡立ち、すすぎ、繰り返します。 – dbugger