一问都不知 2020-07-03 18:45 采纳率: 0%
浏览 169

求大佬看下时间复杂度和空间复杂度

求大佬看下这段代码的时间复杂度和空间复杂度,一直不太会算这个

#include <stdio.h>
typedef struct
{
    double weight;
    int parent;
    int lchild, rchild;
}Node;
typedef struct
{
    int node[12];
    int s;
}Code;
Node HN[12];//因为有六个叶子节点所以定义十二个节点
Code HC[12];
int n;
#define MAX 59
void CreateTree()//构建哈夫曼树
{
    int i, j;
    printf("输出叶子节点个数\n");
    scanf("%d", &n);
    for (i = 1; i < 2 * n; i++)
    {
        HN[i].parent = -1;
        HN[i].weight = 0;
        HN[i].lchild = -1;
        HN[i].rchild = -1;
    }
    double a, b;
    int    x1,x2;
    printf("输入各个节点权重:\n");
    for (i = 1; i <= n; i++)//输入权值
    {
        scanf("%lf", &HN[i].weight);
    }
    for (i = 1; i < n;i++){
        a = MAX;
        b = MAX;
        x1 = 0;
        x2 = 0;
        for (j = 1; j < n + i; j++)
        {
            if (HN[j].parent == -1 && HN[j].weight < a)
            {
                b = a;
                x2 = x1;
                x1 = j;
                a = HN[j].weight;
            }
            else{
                if (HN[j].parent == -1 && HN[j].weight < b)
                {
                    x2 = j;
                    b = HN[j].weight;
                }
            }
        }
        HN[x1].parent = n + i;
        HN[x2].parent = n + i;
        HN[n + i].lchild = x1;
        HN[n + i].rchild = x2;
        HN[n + i].weight = HN[x1].weight + HN[x2].weight;
    }
}
void CreateNode()
{
    Code tem;
    int i, j;
    int t, p;
    for (i = 1; i <= n; i++)
    {
        tem.s = n;
        t = i;
        p = HN[t].parent;
        while (p != -1)
        {
            if (HN[p].lchild == t)
            {
                tem.node[tem.s] = 0;
            }
            else if(HN[p].rchild == t)
            {
                tem.node[tem.s] = 1;
            }
            tem.s--;
            t = p;
            p = HN[t].parent;
        }
        for (j = tem.s + 1; j <= n; j++)
        {
            HC[i].node[j] = tem.node[j];
        }
        HC[i].s = tem.s;
    }
}
void Printf()
{
    int i, j;
    printf("每个叶子节点的哈夫曼编码:\n");
    for (i = 1; i <= n; i++)
    {
        for (j = HC[i].s + 1; j <= n; j++)
        {
            printf("%d", HC[i].node[j]);
        }
        printf("\n");
    }
}
int main()
{
    CreateTree();
    CreateNode();
    Printf();
    return 0;
}
  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-08-14 08:05
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)