📌  相关文章
📜  制作完整图形所需的给定类型的最小操作

📅  最后修改于: 2021-04-29 03:44:26             🧑  作者: Mango

给定N个顶点,其中N偶数。最初,任何一个顶点之间都没有边。
您可以执行如下所示的操作:

  • 在一次操作中,总节点可以分为两组,并且可以为uv的所有可能值绘制边(u,v) ,以使uv都属于不同的组。

任务是找到将这些顶点转换为完整图形所需的最小给定操作数。
例子:

方法:当每对顶点之间都有一条边时,一个图将被称为完整图。这里的问题可以通过分而治之的方法解决。要执行最少数量的操作,请将顶点分为两组,每组分别具有N / 2个顶点,并绘制所有可能的边。现在观察我们必须在同一组顶点之间创建边。因此,我们将它们分为两半,然后将它们放在不同的组中。
重复这些步骤,直到绘制完所有边缘为止,即最大max log2(N)倍,因为操作会将边缘分成相等大小的两半。
下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Function to return
// the minimum number of steps required
int minOperations(int N)
{
    double x = log2(N);
 
    int ans = ceil(x);
 
    return ans;
}
 
// Driver Code
int main()
{
    int N = 10;
    cout << minOperations(N);
 
    return 0;
}


Java
// Java implementation of the approach
 
class GFG
{
     
    // Function to return the minimum
    // number of steps required
    static int minOperations(int N)
    {
        double x = Math.log(N) / Math.log(2);
     
        int ans = (int)(Math.ceil(x));
     
        return ans;
    }
     
    // Driver Code
    public static void main(String[] args)
    {
        int N = 10;
        System.out.println(minOperations(N));
    }
}
 
// This code is contributed by Ryuga


Python3
# Python 3 implementation of the approach
from math import log2, ceil
 
# Function to return the minimum
# number of steps required
def minOperations(N):
    x = log2(N)
 
    ans = ceil(x)
 
    return ans
 
# Driver Code
if __name__ == '__main__':
    N = 10
    print(minOperations(N))
 
# This code is contributed by
# Surendra_Gangwar


C#
// C# implementation of the approach
using System;
class GFG
{
     
// Function to return the minimum
// number of steps required
static int minOperations(int N)
{
    double x = Math.Log(N, 2);
 
    int ans = (int)(Math.Ceiling(x));
 
    return ans;
}
 
// Driver Code
static void Main()
{
    int N = 10;
    Console.WriteLine(minOperations(N));
}
}
 
// This code is contributed by mits


PHP


Javascript


输出:
4