cinema sit-in lab 2 (java). problem 1.chairs in the cinema are arranged in rows 2.each row has a...
TRANSCRIPT
![Page 1: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/1.jpg)
CinemaSIT-IN LAB 2 (JAVA)
![Page 2: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/2.jpg)
Problem1. Chairs in the cinema are arranged in rows
2. Each row has a name, and a capacity
3. Allocate groups of people to the rows
4. When a group arrive, we’ll allocate as many of them as possible to the row with the lexicographically smallest label, and then the next one, and so on.
5. So, a group might need to split to a few different groups if needed.
6. Print number of available seats and number of groups in rows
7. Print all rows group occupied
![Page 3: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/3.jpg)
Object Classes
Cinema
Group
Row
![Page 4: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/4.jpg)
Setup
![Page 5: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/5.jpg)
Constraints
1) Group and Row names are unique;
2) Search queries provide existing keys (name);
![Page 6: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/6.jpg)
Group – Row allocation1) Groups are processed one at a time;
2) Fill the lexicographically smallest unfilled Row with the Group’s members;
3) If the Group has more members than can fit into that row:
do the same for the next lexicographically smallest Row;
4) Repeat until you run out of Rows or Group members;
5) Success: If you ran out of Group members before Rows;
6) Failure: If you ran out of Rows, then cancel all prior Row allocations;
![Page 7: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/7.jpg)
Setupo Provided with all Rows at start
o The collection of Rows will never change:o No new Rowso No removal of existing Rowso No renaming of Rowso No resizing of existing Rows
o Rows are already provided in lexicographical order (names)
![Page 8: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/8.jpg)
Queries
![Page 9: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/9.jpg)
Queries (overview)o 1 GROUP_NAME NUM_PEOPLE
o Allocate Group to Rows using previous rules;o If successful, output number of Rows the Group split into;o If failed, output “not possible”;
o 2 ROW_NAMEo Output number of remaining available seats in the Row;o Output a space;o Output number of different groups currently in the Row;
o 3 GROUP_NAMEo Output names of all rows this group occupies, separated by spaces, o In lexicographical order;
![Page 10: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/10.jpg)
Query 1o 1 GROUP_NAME NUM_PEOPLE
1) Create new Group;
2) Find next lexicographically smallest unfilled Row; (Get next in order from all Rows)(Count free seats in Row)
3) Assign Row to Group and decrement unseated members; (Append to Groups in Row)4) Loop to 1 till out of Group members or Rows.
5) Add new group to collection of all groups if success; (Append to all Groups)6) Output number of Rows the Group splits into if not enough members;
Or “not possible” if not enough rows;
◦ Plan class fields based on query types!
![Page 11: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/11.jpg)
Query 2o 2 ROW_NAME
1) Find Row using name; (Search,Access from all Rows)2) Output number of available seats; (Count free seats in Row)3) Output space;4) Output number of different Groups in it; (Count allocated Groups in Row)
o Plan class fields based on query types!
![Page 12: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/12.jpg)
Query 3o 3 GROUP_NAME
1) Find Group using name; (Search, Access from all Groups)2) Output names of allocated Rows; (Ordered iteration of Rows in Group)
Separated by spaces;In lexicographical order;
o Plan class fields based on query types!
![Page 13: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/13.jpg)
Planning the Classes
Cinema
Group
Row
![Page 14: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/14.jpg)
All query operations
Cinema : All Groups Cinema : All Rows
• Search/Access• Append
• Search/Access• Get next in order
In Group In Row
• Count <free seats>• Count <allocated Rows>
• Ordered Iteration <allocated Groups>• Append <allocated Groups>
![Page 15: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/15.jpg)
Cinema (purpose)
Main class, program entry point;
Jobs (common among all main classes):
Parse setup input; (if any)Perform setup; (if any)
Parse query input;Perform queries;
Track all needed objects (maintain master collection of free floating objects)
![Page 16: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/16.jpg)
Cinema (data fields)
What floating objects are there?Rows , Groups
What operations are we supporting?Search/Access (both)
Append (Groups)Next in order (Rows)
Collection of all Rows;
Collection of all Groups;
![Page 17: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/17.jpg)
Cinema (data fields)
What collection type / interface to use?
List<Row> allRows; List<Group> allGroups;
All Rows All Groups• Operations: search/access , next in order• There are no duplicates.
• Operations : search/access , append• There are no duplicates.
• What type of collection maintains order and supports search/access?
List
• What type of collection optimizes for search/access/append, and excludes duplicates?
Set (not learnt)• Ok, what’s the next best collection you know?
List (for now..)
![Page 18: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/18.jpg)
Cinema (data fields)
What data structure implementation to use?
List<Row> allRows;allRows = new ArrayList<Row>();
List<Group> allGroups;allGroups = new
ArrayList<Group>();
LinkedList ArrayList
• Fast insert, delete, append, prepend• Slow search/access
• Fast search/access, append• Slow insert, delete, prepend
All Rows All Groups
ArrayList for fast search/access ArrayList for fast search/access, append
![Page 19: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/19.jpg)
All query operations
Cinema : All Groups Cinema : All Rows
• Search/Access• Append
• Search/Access• Get next in order
In Row In Group
• Count <free seats>• Count <allocated Groups>
• Ordered Iteration <allocated Rows>• Append <allocated Rows>
![Page 20: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/20.jpg)
Row (data fields)
What default data do Rows have?Name, Capacity
What operations are we supporting?Count <allocated Groups>
Count <free seats>
Count of allocated Groups;
Count of free seats;
![Page 21: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/21.jpg)
Row (data fields)
What collection types / interface to use?
You don’t need special collections / data structures for counts.
Just use an integer please.
int _numGroups;
int _numFreeSeats;
![Page 22: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/22.jpg)
All query operations
Cinema : All Groups Cinema : All Rows
• Search/Access• Append
• Search/Access• Get next in order
In Row In Group
• Count <free seats>• Count <allocated Groups>
• Ordered Iteration <allocated Rows>• Append <allocated Rows>
![Page 23: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/23.jpg)
Group (data fields)
What default data do Groups have?Name, Size
What operations are we supporting?Ordered Iteration <allocated Rows>
Append <allocated Rows>
Collection of allocated Rows;
![Page 24: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/24.jpg)
Group (data fields)
What collection type / interface to use?
Allocated Rows
• Operations : ordered iteration, append• There are no duplicates.
• What type of collection supports iteration of all elements in a specific order and appending?
List
List<Row> _rows;
![Page 25: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/25.jpg)
Group (data fields)
What data structure implementation to use?
List<Row> _rows;_rows = new LinkedList<Row>();
LinkedList ArrayList
• Fast insert, delete, append, prepend• Slow search/access
• Fast search/access, append• Slow insert, delete, prepend
Allocated Rows
Either will do.
![Page 26: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/26.jpg)
Planning the Classespublic class Cinema
List<Row> allRows = new ArrayList<>();List<Group> allGroups = new ArrayList<>();
class Group
String _name;int _size;
List<Row> allRows = new LinkedList<>();
class Row
String _name;int _capacity;
int _numFreeSeats;int _numGroups;
![Page 27: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/27.jpg)
Optimise QueriesUSING ADDITIONAL INFORMATION FROM THE PROBLEM STATEMENT
![Page 28: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/28.jpg)
Optimise – Query 1o Looking for next lexicographically smallest unfilled Row
• Rows already provided in order• Rows already filled in order• Maintain an index/pointer to the smallest unfilled Row from the last Query 1• Increment index/pointer every time you fill a Row during Query 1• No need to check all Rows to find next smallest unfilled
o Checking if Group can fit in Cinema
• Maintain a count of the remaining seats across all Rows• Decrement as you accommodate groups from Query 1• No need to keep checking all Rows
![Page 29: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/29.jpg)
Optimise – Query 2o Searching for Row by name
• Rows already provided in order• Perform binary search!
• Collections.binarySearch• Requires that Row implements Comparable interface,• Or you implement a Comparator<Row>• Exercise: read up on java Comparable and Comparator
• O(log(n)) time vs old O(n) time
![Page 30: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/30.jpg)
Optimise – Query 3o Get all allocated Rows in lexicographical order
o Already in lexicographical order (rows had to be allocated in order)o Just iterate through List from first to lasto No need to sort / search for next smallest
![Page 31: Cinema SIT-IN LAB 2 (JAVA). Problem 1.Chairs in the cinema are arranged in rows 2.Each row has a name, and a capacity 3.Allocate groups of people to the](https://reader036.vdocument.in/reader036/viewer/2022062805/5697c02b1a28abf838cd84eb/html5/thumbnails/31.jpg)
ENDNEVER TUNNEL VISION WHEN PLANNING