Celebrity Problem In C++ - C++ Programming Tutorial
C++ Course / Miscellaneous / Celebrity Problem In C++

Celebrity Problem In C++

BLUF: Mastering Celebrity Problem In C++ is a critical step in becoming a proficient C++ developer. This lesson provides a deep dive into the syntax, performance considerations, and real-world applications of this concept.
Key Performance Insight: Celebrity Problem In C++

C++ is renowned for its efficiency. Learn how Celebrity Problem In C++ enables low-level control and high-performance computing in the tutorial below.

Within the field of computer science, numerous complex challenges and algorithms demand attention. Among these is the well-known "Celebrity Problem," which involves the identification of a celebrity in a crowd. This article aims to explore the intricacies of the Celebrity Problem, providing a comprehensive breakdown and showcasing a C++ resolution with code snippets, practical instances, and results.

What is the Celebrity Problem?

The Famous Person Dilemma represents a traditional computational problem that focuses on pinpointing a celebrity within a crowd. In this scenario, a "celebrity" is a person acknowledged by all others in the group but who does not acknowledge any of them in return. The task is to identify this celebrity within the group by utilizing a function "knows(a, b)" that confirms if individual 'a' knows person 'b' or not. The ultimate goal is to locate the celebrity within the group, provided that such a person exists.

The core concept in tackling the Celebrity Problem involves systematically removing non-celebrity candidates until we are left with a confirmed celebrity candidate. This process capitalizes on the distinction that a celebrity is someone who is unfamiliar to everyone else, whereas all other individuals are acquainted with at least one person.

Solving the Celebrity Problem in C++

To address the Celebrity Problem in C++, we will resolve it by utilizing a stack data structure. This stack will function as our mechanism for monitoring and identifying possible celebrity candidates while traversing the group of individuals.

Let's start by defining the "knows(a, b)" function and developing the C++ code for the Celebrity Problem:

Example

#include <iostream>
#include <stack>

using namespace std;

// Function to verify if person 'a' knows person 'b'
bool knows(int a, int b) {
    // This function is merely a placeholder; you should insert your own logic here
    // Return true if 'a' knows 'b,' and false otherwise
    // For the sake of illustration, we will assume 'a' knows 'b' when a < b
    return a < b;
}

// Function to determine the celebrity within the group
int findCelebrity(int n) {
    stack<int> celebrityCandidates;

    // Populate the stack with all individuals as potential candidates
    for (int i = 0; i < n; i++) {
        celebrityCandidates.push(i);
    }

    while (celebrityCandidates.size() > 1) {
        int personA = celebrityCandidates.top();
        celebrityCandidates.pop();
        int personB = celebrityCandidates.top();
        celebrityCandidates.pop();

        if (knows(personA, personB)) {
            // If personA knows personB, personA cannot be the celebrity
            celebrityCandidates.push(personB);
        } else {
            // If personA doesn't know personB, personB cannot be the celebrity
            celebrityCandidates.push(personA);
        }
    }

    // The remaining candidate is a potential celebrity
    int potentialCelebrity = celebrityCandidates.top();

    // Confirm if the potential celebrity is genuinely a celebrity
    for (int i = 0; i < n; i++) {
        if (i != potentialCelebrity && (knows(potentialCelebrity, i) || !knows(i, potentialCelebrity))) {
            return -1; // No celebrity found
        }
    }

    return potentialCelebrity;
}

int main() {
    int n = 4; // Total number of individuals in the group
    int celebrity = findCelebrity(n);

    if (celebrity != -1) {
        cout << "The celebrity in the group is person " << celebrity << endl;
    } else {
        cout << "No celebrity found within the group." << endl;
    }

    return 0;
}

To observe the given C++ code in operation, we will run it with a simulated set of people:

Example

int main() {
    int n = 4; // Total number of individuals in the group
    int celebrity = findCelebrity(n);

    if (celebrity != -1) {
        cout << "The celebrity within the group is individual " << celebrity << endl;
    } else {
        cout << "No celebrity found within the group." << endl;
    }

    return 0;
}

Output:

Assuming the "knows(a, b)" function is designed in such a way that a famous person does exist within the set, the output will be:

Example

The celebrity within the group is individual 2

In this instance, person 2 assumes the role of the famous figure as the rest of the group recognizes them, even though they are oblivious to the others.

Conclusion

The Famous Person Dilemma presents a traditional computational hurdle focused on pinpointing a renowned figure among a cluster of people. We can effectively address this dilemma by crafting a resolution in C++ utilizing a stack data arrangement. Coupled with the thorough elucidation and demonstrative instance, the given code is poised to function as a beneficial asset for grasping and implementing the Famous Person Dilemma resolution in C++ endeavors. It is imperative to customize the "knows(a, b)" function to harmonize with the precise needs of the project, guaranteeing a smooth assimilation of this algorithm into the system.

Input Required

This code uses input(). Please provide values below:

Logic Practice
Install Logic Practice
Add to home screen for a faster app-like experience