data structures and algorithms · data structures and algorithms prof. ajit a. diwan prof. ganesh...

22
IIT Bombay Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering IIT Bombay Session: Mumbai Vada-Pav Restaurant (Randomized simulation) 1 Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay

Upload: others

Post on 09-Mar-2021

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Data Structures and AlgorithmsProf. Ajit A. Diwan

Prof. Ganesh RamakrishnanProf. Deepak B. Phatak

Department of Computer Science and EngineeringIIT Bombay

Session: Mumbai Vada-Pav Restaurant (Randomized simulation)

1Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay

Page 2: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Random Numbers

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 2

• In the previous example, we simulated the arrival time of customers using some ‘assumed’ time instances.

• In practice, such events will occur randomly• When we throw a dice, we get a random value between 1 and 6• We do not know, which will be next value• On an average, we make 600 throws, we will get 100 of each value

• It is possible to ‘simulate’ such events by generating random numbers• Called ‘pseudo’ random numbers, (generated by an algorithm)

• C++ provides functions to generate random numbers

Page 3: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Random Numbers

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 3

• Use ‘rand()’ to generate ‘uniformly distributed’ random numbers• Returns a number from 0 to RAND_MAX

int r, dice, i;

for (i=0; i<10; i++) {

r = rand();

dice = r%6 + 1;

cout << dice << “ “;

}

2 5 4 2 6 2 5 1 4 2

Page 4: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Random number generation

• We wish to generate a different sequence of numbers for each ‘run’

• Use ‘srand()’• Initialize random number generator with a ‘seed’

• Different seed ensures a different sequence to be generated • Use current time as seed for random generator

std::srand(std::time(0)); //use current time as seed

Output from two different executions:

4 2 6 5 5 1 6 1 1 2

1 2 1 3 1 3 6 5 6 6

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 4

Page 5: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Data Structures

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 5

Maintain information for food and customer arrival

• Structure 1: foodInfo• Contains information of food item (ID, name, and rate)

• Structure 2: customerInfo• Contains information of customer (ID and arrival time) that arrive and

stand in the queue to place an order

• Queue 1: customerQueue• It is of type structure, ‘customerInfo’• Contains information of customer

Page 6: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Data Structures

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 6

Maintain information of the orders placed and The order that goes to the kitchen for preparation

• Structure 3: orders• Contains information of the order placed by each customer (Token

ID, Items, Quantity, Cost, Number of items ordered, Total Cost to be paid, and time for placing order)

• Structure 4: kitchen• Contains the information stored in structure ‘order’, structure

‘customerInfo’, preparation and fulfilment time of order

Page 7: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Functions

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 7

• Function 1: loadMenu• Passes information of one menu item to the function

‘setFoodItems’

• Function 2: setFoodItems• Loads the menu of the restaurant

• Function 3: customerArrives• Pushes the information of the customer on the queue

‘customerQueue’ (includes customer id and arrival time)

Page 8: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Functions

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 8

• Function 4: placeOrder• Generates token ID• Randomizes

• Number of items• Item ID, Quantity of each item

• Calculates cost, and total cost• Calculates time for placing order (based on randomization)• Sends the order information to the kitchen• Customer exits from the queue and waits at a table

Page 9: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Functions

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 9

• Function 5: orderGoesToKitchen• Loads information of

• Order placed • Customer

• Calculates • Preparation time for the order• Order fulfilment time

• Updates the ‘listInKitchen’ list

• Function 6: dispatchOrders• Sorts the ‘listInKitchen’ list based on fulfilment time• Dispatches orders

Page 10: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Program

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 10

struct foodInfo{int foodID;string foodName;float rate;

}; //End of structure

struct customerInfo{int custID;int arrivalTime;

}; //End of structure

struct orders {int tokenID;int numberOfItems;int item[20];int qty[20];int cost[20];float totalCost;int placingOrderTime;

}; //End of structure

struct kitchen {struct orders order;struct customerInfo cinfo;int orderfulfilmentTime;int preparationTime;

}; //End of structure

Page 11: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Program

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 11

class restaurant {private:

static int custID, tokenID, foodIndex;struct foodInfo food[100]; struct orders order;list<kitchen> listInKitchen; queue<customerInfo> customerQueue;

public:void loadMenu();void setFoodItems(int id, string name, float amount);void customerArrives(int time);void placeOrder(); void orderGoesToKitchen();void dispatchOrders();

}; //End of class

Page 12: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Program

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 12

int restaurant::custID = 0;int restaurant::tokenID = 1000;int restaurant::foodIndex = 0;

int generateRandom(int low, int high) {//Return a random number between low and highreturn ((rand() % (high-low+1)) + low);

} //End of function

Page 13: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Program

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 13

void restaurant::setFoodItems(int id, string name, float rate) {food[foodIndex].foodID = id;food[foodIndex].foodName = name;food[foodIndex].rate = rate;foodIndex++;

} //End of function

void restaurant::loadMenu() {setFoodItems(1,"Vada Pav",10.0);setFoodItems(2,"Uttappa",18.0);…setFoodItems(25,"Kothmir Wadi",26.0);

} //End of function

Page 14: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Program

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 14

void restaurant::customerArrives(int time) {struct customerInfo cust;cust.custID = ++custID;cust.arrivalTime = time;customerQueue.push(cust);cout << "Customer: " << customerQueue.back().custID << ", "

<< customerQueue.back().arrivalTime << endl;} //End of function

Page 15: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Program

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 15

void restaurant::placeOrder() {int index=0, itemID, qty, i, low;order.tokenID = ++tokenID;int totalCost, ptime;

// Code for placing order // Code for calculating placing order time// Code to display order info of customer

} //End of function

Page 16: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Program

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 16

//Place order for numberOfItems items. where numberOfItems<=6order.numberOfItems = generateRandom(1,6);itemID = generateRandom(1,3);index = generateRandom(1,3);for (i=0;i<order.numberOfItems;i++) {

itemID = itemID + index;qty = generateRandom(1,10); //Qty is from 1 to 10order.item[i] = itemID;order.qty[i] = qty;order.cost[i] = food[itemID].rate * qty; totalCost = totalCost + order.cost[i];

}order.totalCost = totalCost;

Page 17: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Program

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 17

//Calculate placing order timelow = order.numberOfItems * 5;ptime = generateRandom(low, low+15);if (listInKitchen.empty())

order.placingOrderTime = ptime + customerQueue.front().arrivalTime;else {

if (customerQueue.front().arrivalTime > listInKitchen.back().order.placingOrderTime)order.placingOrderTime = ptime + customerQueue.front().arrivalTime;

elseorder.placingOrderTime = ptime + listInKitchen.back().order.placingOrderTime;

} //End of else

Page 18: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Program

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 18

//Display order info of customercout << "Order placed for customer " << customerQueue.front().custID

<< " with token " << order.tokenID << " and timetaken is " << ptime << endl;orderGoesToKitchen();customerQueue.pop();

} //End of function placeOrder()

Page 19: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Program

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 19

void restaurant::orderGoesToKitchen() {kitchen k;int pTime;k.order = order;k.cinfo = customerQueue.front();pTime = order.numberOfItems * 120;k.preparationTime = generateRandom(pTime,pTime+60) ;k.orderfulfilmentTime = k.preparationTime + order.placingOrderTime;

listInKitchen.push_back(k);cout << "List in kitchen updated for token id: " << listInKitchen.back().order.tokenID

<< ", Preparation time: " << listInKitchen.back().preparationTime << endl << endl;} //End of function

Page 20: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Program

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 20

bool compare(kitchen first, kitchen second) {return (first.orderfulfilmentTime < second.orderfulfilmentTime);

} //End of function

void restaurant::dispatchOrders() {listInKitchen.sort(compare);int i;while (!listInKitchen.empty()) {

cout << "Dispatched Token ID: " << listInKitchen.front().order.tokenID<< " fulfilled at: " << listInKitchen.front().orderfulfilmentTime << endl;

listInKitchen.pop_front();}

} //End of function

Page 21: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Program

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 21

int main() {std::srand(std::time(0)); restaurant MVPRestaurant; int i, custarrive=0;MVPRestaurant.loadMenu();

for (i=1; i<=5; i++) {custarrive = custarrive + generateRandom(1,20);MVPRestaurant.customerArrives(custarrive);

} cout << endl;for (i=1; i<=5; i++) {

MVPRestaurant.placeOrder();} cout << endl;MVPRestaurant.dispatchOrders();return 0;

} //End of main()

Page 22: Data Structures and Algorithms · Data Structures and Algorithms Prof. Ajit A. Diwan Prof. Ganesh Ramakrishnan Prof. Deepak B. Phatak Department of Computer Science and Engineering

IIT Bombay

Thank you

Ajit A. Diwan, Ganesh Ramakrishnan, and Deepak B. Phatak, IIT Bombay 22