N元树插入和搜索的复杂性是什么

本文关键字:复杂性 是什么 搜索 插入 | 更新日期: 2023-09-27 18:26:34

我正在C#中实现N-1ry树。我想知道如何计算以下方法的复杂性。这是我的代码:

结构:

public class Node
{
    public int Value { get; set; }
    public Node Children { get; set; }
    public Node Sibilings { get; set; }
}

这种搜索方法:

public Node search(Node root, int data)
{
    if (root == null)
        return null;
    if (data == root.Value)
        return root;
    Node t = search(root.Children, data);
    if (t == null)
        t = search(root.Sibilings, data);
    return t;
}

这种插入方法:

public void Add(int[] data)
{
    Node temp = null;
    temp = search(ROOT, data[0]);
    if (temp == null)
        temp = new Node(data[0]);
    if (this.ROOT == null)
        ROOT = temp;
    Node parent = temp;
    for (int j = 1; j <= this.NoOfChildrens; j++)
    {
        // for first child
        if (j == 1)
        {
            parent.Children = new Node(data[j]);
            parent = parent.Children;
        }
        //for all other childs
        else
        {
            parent.Sibilings = new Node(data[j]);
            parent = parent.Sibilings;
        }
    }
}

程序入口点:

static void Main(string[] args)
{
    NAryTree naryTree = new NAryTree(3);
    // 1st element in each row is node Value,>=2nd....=>value of child
    int[][] data = { new int[] { 1, 2, 3, 4 }, new int[] { 2, 1, 6,0 }, new int[] { 3, 8, 9, 10 }, new int[] { 4, 0, 0, 0 } };
    naryTree.Add(data[0]);
    naryTree.Add(data[1]);
    naryTree.Add(data[2]);
    naryTree.Add(data[3]);
    naryTree.Add(new int[] {10,3,6,4});
    naryTree.preorder(naryTree.ROOT);
    Console.ReadLine();
}

这些方法的最大复杂性是什么?

N元树插入和搜索的复杂性是什么

让我们看看Search方法中有什么。它不是一个二叉树,我们有递归。所以Search方法会调用N次,直到我们找到一个必要的值。因此,我们可以得出结论,我们有O(N),其中N是在最后一次迭代中找到值的最大(最差)迭代次数:

public Node search(Node root, int data)
{
    if (root == null)
        return null;
    if (data == root.Value)
        return root;
    Node t = search(root.Children, data);
    if (t == null)
        t = search(root.Sibilings, data);
    return t;
} 

For Addition方法更简单,因为我们有for语句,并且没有嵌套循环。因此,对于Addition方法,我们有O(N)

正如威斯康星大学所说:

因此,对于(i=0;i<N;i++)的循环{语句序列}循环执行N次,因此语句序列也执行N次。既然我们假设语句为O(1)、for循环的总时间为N*O(1,其总体上为O(N)。