Skip to main content

How I Used a Classic Algorithm to Solve a Real-Life Restaurant Problem

Algorithms and data structures often feel like abstract, academic exercises when you first encounter them. Many of us in university wondered, Will I ever use this in real life? Fast forward to the working world, and the answer is often a resounding yes. Here’s a story of how I used Breadth-First Search (BFS), a classic algorithm, to solve a seemingly impossible problem for a restaurant inventory system.


The Restaurant Dilemma

Imagine you’re designing a system for a restaurant chain. The system needs to handle recipes, track ingredient usage, and calculate costs for menu items. Sounds straightforward, right? Let’s complicate it.

Consider a dish like Lasagna. To make lasagna, you need:

  • Pasta Sheets
  • Bolognese Sauce
  • Cheese

But here’s the twist:

Bolognese Sauce is itself a recipe that requires:

  • Ground Meat
  • Tomatoes
  • Spices

Every ingredient comes from an inventory with details like:

  • Unit of Measurement (UOM): Grams, Liters, etc.
  • Cost per Unit: Calculated based on the last purchase price or weighted average.

Now, when a customer orders lasagna, the system needs to:

  1. Break down the recipe into its components, all the way to the raw ingredients.
  2. Calculate the exact quantities of each ingredient used.
  3. Determine the total cost of making one lasagna.
  4. Deduct the ingredients from the inventory.

This process is manageable for simple, two-level recipes like Lasagna → Bolognese Sauce → Ground Meat. But what happens when we introduce deeper nesting?


A Deeper Nested Recipe

Consider a Vegetarian Pizza as an example of a more nested recipe:

  • Vegetarian Pizza
    Dough
    Flour
    Water
    Yeast
  • Tomato Sauce
    Tomatoes
    Olive Oil
    Herbs
  • Cheese
  • Toppings
    Grilled Vegetables
    — Zucchini
    — Bell Peppers
    — Eggplant

This structure involves:

  1. A top-level recipe (Vegetarian Pizza).
  2. Mid-level recipes (Dough, Tomato Sauce, Toppings).
  3. Raw ingredients at the leaf level (Flour, Water, Tomatoes, etc.).

When a customer orders a pizza, the system must calculate the total cost by traversing all five levels and summing up the costs of every ingredient.


A Simple Calculation Example

Let’s use the Vegetarian Pizza example to calculate the total cost step by step.

Ingredients and Costs

  • Vegetarian Pizza requires:
    - Dough
     — 500g Flour (cost per gram = $0.01)
     — 300ml Water (cost per ml = $0.002)
     — 10g Yeast (cost per gram = $0.05)
    - Tomato Sauce
     — 200g Tomatoes (cost per gram = $0.03)
     — 50ml Olive Oil (cost per ml = $0.1)
     — 5g Herbs (cost per gram = $0.2)
  • Cheese
     — 200g Cheese (cost per gram = $0.05)
  • Toppings
    -100g Grilled Vegetables
     — 50g Zucchini (cost per gram = $0.02)
     — 30g Bell Peppers (cost per gram = $0.03)
     — 20g Eggplant (cost per gram = $0.025)

Step-by-Step Calculation

Dough Cost:

  • Flour: 500g × $0.01 = $5
  • Water: 300ml × $0.002 = $0.60
  • Yeast: 10g × $0.05 = $0.50
    Total Dough Cost = $6.10

Tomato Sauce Cost:

  • Tomatoes: 200g × $0.03 = $6
  • Olive Oil: 50ml × $0.1 = $5
  • Herbs: 5g × $0.2 = $1
    Total Tomato Sauce Cost = $12

Cheese Cost:

  • 200g × $0.05 = $10

Toppings Cost:

  • Zucchini: 50g × $0.02 = $1
  • Bell Peppers: 30g × $0.03 = $0.90
  • Eggplant: 20g × $0.025 = $0.50
    Total Toppings Cost = $2.40

Vegetarian Pizza Cost:

  • Dough: $6.10
  • Tomato Sauce: $12
  • Cheese: $10
  • Toppings: $2.40
    Total = $30.50

Cost Relationships in Pricing

Once the total cost is calculated, it’s important to set prices effectively using markup cost, portion cost, and selling price. These relationships depend on business logic, but they can be defined as follows:

Cost Calculation Logic

Explanation

  1. Option 1: If you know the markup percentage, calculate the selling price and cost.
  2. Option 2: If you know the cost percentage, calculate the selling price and markup percentage.
  3. Option 3: If you know the selling price, calculate the cost and markup percentage.

Bringing It All Together

With BFS to traverse recipes and a clear cost calculation logic, the restaurant system now:

  1. Handles recipes with any level of nesting.
  2. Dynamically calculates costs and prices for dishes.
  3. Automates inventory management and updates.

 

Comments

Some of My Bests

ডাটা স্ট্রাকচার- স্ট্যাক (Stack)

Programming is all about data manipulation. Data structure is way of storing data for further manipulation. ডাটা স্ট্রাকচার আমাদেরকে বিভিন্ন ডাটা সাজিয়ে রাখার ব্যবস্থা করে দেয়। ডাটা সাজিয়ে রাখার অনেক গুলো "তরিকা" আছে। কোনকিছু আমরা কেন সাজিয়ে রাখি? যেন পরে নির্দিষ্ট একটা ডাটা সহজে খুঁজে পেতে পারি। "তরিকা" গুলোর নাম Array, Stack, Queue, Linked List, Tree, Graph. এগুলা শ খানেক ডাটা স্ট্রাকচারের মধ্যে কিছুর নাম, যেগুলো অনেক বেশি ব্যবহার হয়। এই পোস্টটা স্ট্যাক বুঝানোর জন্য। স্ট্যাক খুবই ইন্টেরেস্টিং একটা ডাটা স্ট্রাকচার। অনেক কারনেই এটা ব্যাবহার হয়। আগে স্ট্যাক কনসেপ্টটা নিয়ে আলোচনা করা যাক। স্ট্যাক বলতে বোঝায় একটার উপর একটা সাজায়ে রাখা। বিয়ের বাড়িতে আগে মেলামাইনের গ্লাস দেখা যেত একটার ভেতর আরেকটা ঢুকায়ে লম্বা একটা পাইল তৈরি করে একসাথে ক্যারি করা হচ্ছে। এটা একটা স্ট্যাক। প্রোগ্রামিং এর ভাষায় স্ট্যাক এক্সাক্টলি সেইম জিনিসই। তবে একটু ঘষামাজা আছে। আরেকটা উদাহরণ দেয়া যেতে পারে। বয়ামের ভেতর একটার পর আরেকটা বিস্কিট ঢুকিয়ে রাখা হয়। হ্যা, এইটা পারফেক্ট উদাহরণ হয়েছে। এই...

ডাটা স্ট্রাকচার- কিউ (Queue)

Programming is all about data manipulation. Data structure is way of storing data for further manipulation. ডাটা স্ট্রাকচার আমাদেরকে বিভিন্ন ডাটা সাজিয়ে রাখার ব্যবস্থা করে দেয়। ডাটা সাজিয়ে রাখার অনেক গুলো "তরিকা" আছে। কোনকিছু আমরা কেন সাজিয়ে রাখি? যেন পরে নির্দিষ্ট একটা ডাটা সহজে খুঁজে পেতে পারি। "তরিকা" গুলোর নাম Array, Stack, Queue, Linked List, Tree, Graph. এগুলা শ খানেক ডাটা স্ট্রাকচারের মধ্যে কিছুর নাম, যেগুলো অনেক বেশি ব্যবহার হয়। এই পোস্টটা কিউ বুঝানোর জন্য। কিউ জিনিসটার সাথে আমরা সবাই পরিচিত। জীবনে আমরা সবাই কখনো না কখনো লাইনে দাঁড়ায়ছি। কিউ এর বেসিক ক্যারেক্টারিস্টিকসের সাথে মিলিয়েই প্রোগ্রামিং এ কিউ এর কনসেপ্ট। বাস্তব জীবনে একটা কিউ তে কি হয়? সবাই লাইন ধরে দাঁড়ায় কিছু একটা কারনে। যে সবার আগে দাঁড়ায় সেই সবার আগে কার্জসিদ্ধি করে। সবার পরের জন সবার পরে। স্ট্যাকের ক্ষেত্রে আমরা পড়েছিলাম Last In First Out (LIFO) or First In Last Out (FILO)। কেমন আনফেয়ার শোনায় না? সবার পরে আসবে, আবার সবার আগে চলে যাবে। অ্যাটলিস্ট আমার আনফেয়ার লেগেছিলো যখন স্ট্যাক শিখছিল...

কম্পিউটার বচন

কম্পিউটারের সাথে আমার পরিচয় খুব ছোট বয়সে না। অন্তত চেনাপরিচিত বন্ধুমহলের অনেকের তুলনায় আমি বাচ্চাই বলা চলে। ক্লাস ২ বা ৩ তে পড়ি যখন ফুফাতো ভাই প্রথম কম্পিউটার কেনে। ফুফুর বাসা কাছেই হওয়ায় মাঝে মাঝেই সেটা দেখার সৌভাগ্য হতো। কিন্তু ছুয়ে দেখার সাহস তখনও হয়নি। সেই বছর থেকে আমাদের রেওয়াজ, ঈদের দিন নামাজ পড়েই সোজা ভাইয়ার রুমে। ভাইয়া নতুন একটা গেম ইন্সটল করে রাখতো আর আমরা কাজিনেরা লাইন দিয়ে সেটা খেলতাম (যদিও আমার ভাগে কমই পড়তো :p )  ক্লাস সিক্সে নতুন স্কুলে ভর্তি হলাম। এ এক আজব জায়গা। সবাই বড়লোকের পোলাপাইন। কতজন গাড়িতে করে আসে। তাদের তো কথাই নাই। যাদের গাড়ি নাই তাদেরও রোজকার বাজেট বিশাল। ইচ্ছামত উড়ায়। আর আমি মধ্যবিত্তের ছেলে। যাওয়া আসার ভাড়া বাদে কোনো টাকা পেতামনা। টিফিন বাসা থেকে বানায়ে দিতো। এই যখন আমার অবস্থা তখন ক্লাসমেটরা নিত্যনতুন গ্যাজেটের সাথে শুধু পরিচয়ই না, পকেটে নিয়ে ঘুরে (যদিও স্কুলে নিষিদ্ধ ছিলো )। সবাই এসব নিয়ে কত গল্প চালায় যায়। আর আমার মত বোকা কিছু পাবলিক হা করে এদের গল্প শুনি। কম্পিউটারের কত বচন, কত আড্ডা। এসব আড্ডায় ঢুকতে কত ইচ্ছা করতো, কিন্তু ঢুকবো কি করে? আমার কম্প...