2017-01-12 12 views
1

私は教室のリストと学生グループのリストを持っています。各クラスルームはx人の生徒しか受け入れられません。私は学生グループごとに最高の教室を見つけたいと思っています。リストの一番近い番号を見つけよう

次の例があります。

List<Classroom> classRooms = new ArrayList<>(); 

classRooms .add(new Classroom("Lecture Room 1", 40)); 
classRooms .add(new Classroom("Lecture Room 2", 32)); 
classRooms .add(new Classroom("Lecture Room 3", 80)); 
classRooms .add(new Classroom("Lecture Room 4", 50)); 
classRooms .add(new Classroom("Lecture Room 5", 26)); 

教室クラスは(classroomname、maxCapicity) のコンストラクタを持つ基本であるグループは教室が利用可能であるべきではない教室に割り当てられている場合、私は学生グループ

List<StudentGroup> studentGroups= new ArrayList<>(); 

studentGroups.add(new StudentGroup("Group 1", 70)); 
studentGroups.add(new StudentGroup("Group 2", 40)); 
studentGroups .add(new StudentGroup("Group 3", 10)); 
studentGroups.add(new StudentGroup("Group 4", 45)); 

のリストを持っていますもう(groupname、totalStudents)

私はこのMost efficient way to find the nearest number in a listを見ましたが、私は整数のリスト(教室サイズ)を使用せず、リストからそれぞれの時間を削除することをお勧めします。より良い選択肢がありますか?

ありがとうございます。

編集これを試しました。しかし、これが最良の結果をもたらすとは思わない。

Collections.sort(courseList, (a, b) ->   a.getStudentCount().compareTo(b.getStudentCount())); 
    Collections.sort(classList, (a, b) -> a.getMaxStudente().compareTo(b.getMaxStudente())); 

    // more course than classes 
    if (courseList.size() > classList.size()) { 

    } else { // more clases than courses 

     for (int i = 0; i < courseList.size(); i++) { 
      courseList.get(i).setDedicatedKlas(classList.get(i + 1)); 
     } 
    } 
+0

その後、我々は唯一の45で一つのグループと選択するどのような能力50と100との2つだけの部屋は持っています、50または100?私の意見では、将来的には75の別のグループがあるかもしれないので、50を選ぶほうが良いです。アルゴリズムが50だけでなく100も取ることができるならば、違いがあります。 –

+0

私の意見はこの場合50を使うことです。クラスとグループのサイズはいつでも変更できます。あなたは正しいです。最も近いが小さいものを選択するアルゴリズムはありますか?maxSize –

答えて

0

まず、教室とグループを並べ替える必要があります。次に、最大のグループと最大の教室への移動が必要です。次の反復で、2番目のグループを受講し、2番目の教室に配置します。 いくつかの大きなグループのためには、教室を取ることができない私はケースに何をすべきかを理解しようとしている

classRooms = Collections.sort(classRooms , new Comparator<Classroom>() { 
    public int compare(Classroom o1, Classroom o2) 
    { 
     return o1.getSize() < o2.getSize(); 
    } 
}); 

studentGroups = Collections.sort(studentGroups, new Comparator<StudentGroup>() { 
    public int compare(StudentGroup o1, StudentGroup o2) 
    { 
     return o1.getSize() < o2.getSize(); 
    } 
}); 

int classRoomIndex = 0; 
for(StudentGroup group : groups){ 
    while(classRoomIndex < classRooms.size()){ 
     Classroom classRoom = classRooms.get(classRoomIndex++); 
     if(classRoom.getSize() >= group.getSize()) 
     { 
      // place group to classroom 
      break; 
     } 
    } 
    if(classRoomIndex == classRooms.size()){ 
     // no classrooms for groups 
     notInClass.addAll(groups.subList(groups.indexOf(group), groups.size())); 
     break; 
    } 
    notInClass.add(group); 
} 
+0

私はこれを試みたが、結果は信頼できるとは思わない。よりダイナミックに、またはアルゴリズムでこれを行う方法はありますか? –

+0

@TinusJackson、「動的」とはどういう意味ですか?リストは時間の間に変更することができます。はいの場合、教室にグループを配置する予定はいつですか? –

+0

1.教室やグループなどの実際のリストサイズが変更されることがあります。 2.教室サイズとグループサイズが変更されることがあります。これは理にかなっていますか? それをよりよく説明する方法がわかりません。特定の時間に科目が同じで、教室で許可されている場合、教室を共有するグループがあります。 (これは今考えられていません)グループの可能な教室を見つける必要があります –

-2

リストを並べ替えてから、上から割り当てるのはなぜですか?

+0

これはコメントでなければなりません。 –

+1

私は宿題にエッセイを書くことになっていますか? :-) –

+0

私は途中であなたにdownvoteしなかった。 –

関連する問題