树和二叉树|数据结构-C语言

练习4.1 根据后序和中序遍历输出先序遍历 (25分) 练习4.1 根据后序和中序遍历输出先序遍历 (25分) 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。 输入格式: 第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。 输出格式: 在一行中输出Preorder: 以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。 输入样例: 7 2 3 1 5 7 6 4 1 2 3 4 5 6 7 输出样例: Preord 阅读详情

目录

1、 还原二叉树

 2、 朋友圈

 3、 修理牧场

4、 玩转二叉树

5、 根据后序和中序遍历输出先序遍历

 6、 完全二叉树的层序遍历

 7、 列出叶结点

8、 部落

9、 建立与遍历二叉树

 10、 交换二叉树中每个结点的左孩子和右孩子

11、 树的遍历


1、 还原二叉树

给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。

输入格式:

输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。

输出格式:

输出为一个整数,即该二叉树的高度。

输入样例:

9
ABDFGHIEC
FDHGIBEAC

输出样例:

5

#include<stdio.h>
#include<string.h>
typedef struct node{
    char data;
    struct node *lchild,*rchild;
}Tree;
Tree* CreatTree(char before[],char middle[],int n)
{
    if(n==0)
        return NULL;
    int i;
    Tree *tree=(Tree*)malloc(sizeof(Tree));
    tree->data=before[0];
    for(i=0;i<n;i++)
        if(middle[i]==before[0])
            break;
    tree->lchild=CreatTree(before+1,middle,i);
    tree->rchild=CreatTree(before+i+1,middle+i+1,n-i-1);
    return tree;
}
int CountTree(Tree* tree)
{
    if(tree==NULL)
        return 0;
    int l,r,max;
        l=CountTree(tree->lchild);
        r=CountTree(tree->rchild);
        if(l>r)
            return l+1;
    return r+1;
}
int main()
{
    int n,i,j;
    char before[101],middle[101];
    scanf("%d",&n);
    getchar();
    for(i=0;i<n;i++)
        scanf("%c",&before[i]);
    getchar();
    for(i=0;i<n;i++)
        scanf("%c",&middle[i]);
    Tree* tree=CreatTree(before,middle,n);
    int max=CountTree(tree);
    printf("%d",max);
}

 2、 朋友圈

某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友,且B和C是朋友,则A和C也是朋友。请编写程序计算最大朋友圈中有多少人。

输入格式:

输入的第一行包含两个正整数N(≤30000)和M(≤1000),分别代表学校的学生总数和俱乐部的个数。后面的M行每行按以下格式给出1个俱乐部的信息,其中学生从1~N编号:

第i个俱乐部的人数Mi(空格)学生1(空格)学生2 … 学生Mi

输出格式:

输出给出一个整数,表示在最大朋友圈中有多少人。

输入样例:

7 4
3 1 2 3
2 1 4
3 5 6 7
1 6

输出样例:

4
#include<stdio.h>
int pre[50000];
int find(int x)//查找x的根节点-路径压缩(优化find函数)
{
    if(x==pre[x])
        return pre[x];
    return find(pre[x]);//将所有的节点的前驱变为根节点
}
void join(int x,int y)
{
    int fx=find(x),fy=find(y);//寻找x和y的根节点
    if(fy!=fx)//若两个元素的根节点不同,则进行合并
        pre[fy]=fx;
}
int main()
{
    int n,m,i,j,k,t,first,num[300002];
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        pre[i]=i;
    while(m--)
    {
        scanf("%d%d",&k,&first);
        for(i=1;i<k;i++)
        {
            scanf("%d",&t);
            join(first,t);
        }
    }
    for(i=1;i<=n;i++)
        num[pre[find(i)]]++;
     int max = num[1];
    for(i = 1;i<=n;i++)
    {
        if(num[i]>max)
        {
            max = num[i];
        }
    }
    printf("%d",max);
}

 3、 修理牧场

农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li​个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是Li​的总和。

但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(大于32)。

请编写程序帮助农夫计算将木头锯成N块的最少花费。

输入格式:

输入首先给出正整数N(≤104),表示要将木头锯成N块。第二行给出N个正整数(≤50),表示每段木块的长度。

输出格式:

输出一个整数,即将木头锯成N块的最少花费。

输入样例:

8
4 5 1 2 1 3 1 1

输出样例:

49

#include<stdio.h>
void swap(int *a,int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}
void Sort(int data[],int n)
{
    int i;
    for(i=1;i<n;i++)
    {
        if(data[i]<data[i+1])
            swap(&data[i],&data[i+1]);
    }
    for(i=1;i<n-1;i++)
    {
        if(data[i]<data[i+1])
            swap(&data[i],&data[i+1]);
    }
}
int main()
{
    int n,data[300001],i,sum=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&data[i]);
    while(n>=2)
    {
        Sort(data,n);
        data[n-1]=data[n-1]+data[n];
        sum=sum+data[n-1];
        n--;
    }
    printf("%d",sum);
}

4、 玩转二叉树

给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。

输入格式:

输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。

输出格式:

在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:

7
1 2 3 4 5 6 7
4 1 3 2 6 5 7

输出样例:

4 6 1 7 5 3 2

#include<stdio.h>
int pre[1000000],in[1000000],n,level[1000000]={0};
void dfs(int pre[],int in[],int n,int index)
{
    if(n==0)
        return;
    level[index]=pre[0];
    int i;
    for(i=0;i<n;i++)
        if(pre[0]==in[i])
            break;
    dfs(pre+1,in,i,index*2+2);
    dfs(pre+i+1,in+i+1,n-1-i,index*2+1);
}
int main()
{
    int num=0,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&in[i]);
    for(i=0;i<n;i++)
    scanf("%d",&pre[i]);
    dfs(pre,in,n,0);
    for(i=0;i<1000000;i++)
    {
        if(num!=n-1&&level[i]!=0)
        {
            printf("%d ",level[i]);
            num++;
        }
        else if(level[i]!=0)
        {
            printf("%d",level[i]);
            break;
        }
    }
}

5、 根据后序和中序遍历输出先序遍历

本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。

输入格式:

第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。

输出格式:

在一行中输出Preorder: 以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。

输入样例:

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

输出样例:

Preorder: 4 1 3 2 6 5 7
#include<stdio.h>
typedef struct node{
    int data;
    struct node *lchild,*rchild;
}Tree;
Tree* CreatTree(int in[],int post[],int n)
{
    if(n==0)
        return NULL;
    int i;
    Tree *tree=(Tree*)malloc(sizeof(Tree));
    tree->data=post[n-1];
    for(i=0;i<n;i++)
        if(post[n-1]==in[i])
            break;
    tree->lchild=CreatTree(in,post,i);
    tree->rchild=CreatTree(in+i+1,post+i,n-i-1);
    return tree;
}
void CountTree(Tree* tree)
{
    if(tree!=NULL)
    {
          printf(" %d",tree->data);
          CountTree(tree->lchild);
          CountTree(tree->rchild);
    }
    
}
int main()
{
    int n,i,j;
    int post[100001],in[100001];
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&post[i]);
    for(i=0;i<n;i++)
        scanf("%d",&in[i]);
    Tree* tree=CreatTree(in,post,n);
    printf("Preorder:");
    CountTree(tree);
}

 6、 完全二叉树的层序遍历

一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树。

给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。

输入格式:

输入在第一行中给出正整数 N(≤30),即树中结点个数。第二行给出后序遍历序列,为 N 个不超过 100 的正整数。同一行中所有数字都以空格分隔。

输出格式:

在一行中输出该树的层序遍历序列。所有数字都以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

8
91 71 2 34 10 15 55 18

输出样例:

18 34 55 71 2 10 15 91
#include<stdio.h>
int n,tree[100001];
void CreatTree(int i)
{
    if(i>n)
        return;
    CreatTree(2*i);
    CreatTree(2*i+1);
    scanf("%d",&tree[i]);
}
int main()
{
    int i;
    scanf("%d",&n);
    CreatTree(1);
    for(i=1;i<n;i++)
    {
            printf("%d ",tree[i]);
    }
    printf("%d",tree[n]);
}

 7、 列出叶结点

对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶节点。

输入格式:

首先第一行给出一个正整数 N(≤10),为树中结点总数。树中的结点从 0 到 N−1 编号。随后 N 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 "-"。编号间以 1 个空格分隔。

输出格式:

在一行中按规定顺序输出叶节点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6

输出样例:

4 1 5

#include<stdio.h>
#include<string.h>
struct node{
    int lchild,rchild;
}t[20];
int main()
{
    int n,i,j,check[11]={0};
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        char l,r;
        getchar();
        scanf("%c %c",&l,&r);
        if(l=='-')
            t[i].lchild=-1;
        else {
            t[i].lchild=l-'0';
            check[t[i].lchild]=1;
        }
        if(r=='-')
            t[i].rchild=-1;
        else {
            t[i].rchild=r-'0';
            check[t[i].rchild]=1;
        }
    }
    int a[20];
    j=0;
    for(i=0;i<n;i++)
    {
        //只要不是根节点,就一定会是某个节点的孩子,该值一定会是1
        if(check[i]==0)
        {
            a[j++]=i;//a[0]=根节点的值
            break;
        }
    }
    i=0;
    while(i<n-1)//层次遍历树存入数组a中
    {
        if(t[a[i]].lchild!=-1)
            a[j++]=t[a[i]].lchild;
        if(t[a[i]].rchild!=-1)
            a[j++]=t[a[i]].rchild;
        i++;
    }
    int flag=0;
    for(i=0;i<n;i++)
    {
        //若左右孩子值均为-1,则不存在左右孩子,改节点为叶子节点
        if(t[a[i]].rchild==-1&&t[a[i]].lchild==-1)
        {
            if(flag==0)
                printf("%d",a[i]);
            else printf(" %d",a[i]);
            flag=1;
        }
    }
}

8、 部落

在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈。我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同一个部落。

输入格式:

输入在第一行给出一个正整数N(≤104),是已知小圈子的个数。随后N行,每行按下列格式给出一个小圈子里的人:

K P[1] P[2] ⋯ P[K]

其中K是小圈子里的人数,P[i](i=1,⋯,K)是小圈子里每个人的编号。这里所有人的编号从1开始连续编号,最大编号不会超过104。

之后一行给出一个非负整数Q(≤104),是查询次数。随后Q行,每行给出一对被查询的人的编号。

输出格式:

首先在一行中输出这个社区的总人数、以及互不相交的部落的个数。随后对每一次查询,如果他们属于同一个部落,则在一行中输出Y,否则输出N。

输入样例:

4
3 10 1 2
2 3 4
4 1 5 7 8
3 9 6 4
2
10 5
3 7

输出样例:

10 2
Y
N

#include<stdio.h>
#define N 100001
int pre[N];
int find(int x)
{
    if(x==pre[x])
        return x;
    else return pre[x]=find(pre[x]);
}
void join(int x,int y)
{
    int a=find(x),b=find(y);
    if(a!=b)
        pre[b]=a;
}
int main()
{
    int n,m,k,a,b,sum=0,num[N]={0},i,j;
    scanf("%d",&n);
    for(i=1;i<N;i++)
        pre[i]=i;
    for(j=0;j<n;j++)
    {
        scanf("%d",&k);
        scanf("%d",&a);
        if(num[a]==0)
        {
            num[a]=1;
            sum++;
        }
        for(i=1;i<k;i++)
        {
            scanf("%d",&b);
            if(num[b]==0)
            {
                num[b]=1;
                sum++;
            }
            join(a,b);
        }
    }
    int t=0;
    for(i=1;i<N;i++)
    {
        if(i==find(i)&&num[i])
            t++;
    }
    printf("%d %d\n",sum,t);
    scanf("%d",&m);
    int x,y;
    while(m--)
    {
        scanf("%d%d",&x,&y);
        if(find(x)==find(y))
            printf("Y\n");
        else printf("N\n");
    }
}

9、 建立与遍历二叉树

以字符串的形式定义一棵二叉树的先序序列,若字符是‘#’, 表示该二叉树是空树,否则该字符是相应结点的数据元素。读入相应先序序列,建立二叉链式存储结构的二叉树,然后中序遍历该二叉树并输出结点数据。

输入格式:

字符串形式的先序序列(即结点的数据类型为单个字符)

输出格式:

中序遍历结果

输入样例:

在这里给出一组输入。例如:

ABC##DE#G##F###

输出样例:

在这里给出相应的输出。例如:

CBEGDFA
#include<stdio.h>
typedef struct node{
char data;
    struct node *lchild,*rchild;
}Tree;
Tree* CreatTree()
{
    Tree* tree=(Tree*)malloc(sizeof(Tree));
    char n;
    scanf("%c",&n);
    if(n!='#')
    {
        tree->data=n;
        tree->lchild=CreatTree();
        tree->rchild=CreatTree();
    }
    else tree=NULL;
    return tree;
}
void PrintTree(Tree* tree)
{
    if(tree==NULL)
        return;
    PrintTree(tree->lchild);
    printf("%c",tree->data);
    PrintTree(tree->rchild);
}
int main()
{
    Tree* tree=(Tree*)malloc(sizeof(Tree));
    tree=CreatTree();
    PrintTree(tree);
}

 10、 交换二叉树中每个结点的左孩子和右孩子

以二叉链表作为二叉树的存储结构,交换二叉树中每个结点的左孩子和右孩子。

输入格式:

输入二叉树的先序序列。

提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。

输出格式:

输出有两行:

第一行是原二叉树的中序遍历序列;

第二行是交换后的二叉树的中序遍历序列。

输入样例:

ABC##DE#G##F###

输出样例:

CBEGDFA

AFDGEBC

#include<stdio.h>
typedef struct node{
char data;
    struct node *lchild,*rchild;
}Tree;
Tree* CreatTree()
{
    Tree* tree=(Tree*)malloc(sizeof(Tree));
    char n;
    scanf("%c",&n);
    if(n!='#')
    {
        tree->data=n;
        tree->lchild=CreatTree();
        tree->rchild=CreatTree();
    }
    else tree=NULL;
    return tree;
}
void PrintTree(Tree* tree)
{
    if(tree==NULL)
        return;
    PrintTree(tree->lchild);
    printf("%c",tree->data);
    PrintTree(tree->rchild);
}
void SwapTree(Tree* tree)
{
    if(tree==NULL)
        return;
    Tree *t=tree->lchild;
    tree->lchild=tree->rchild;
    tree->rchild=t;
    SwapTree(tree->lchild);
    SwapTree(tree->rchild);
}
int main()
{
    Tree* tree=(Tree*)malloc(sizeof(Tree));
    Tree* swaptree=(Tree*)malloc(sizeof(Tree));
    tree=CreatTree();
    swaptree=tree;
    PrintTree(swaptree);
    printf("\n");
    SwapTree(tree);
    PrintTree(tree);
}

11、 树的遍历

给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。

输入格式:

输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。

输出格式:

在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

输出样例:

4 1 6 3 5 7 2
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
    int data;
    struct node *lchild,*rchild;
}Tree;
Tree *queue[100];

Tree* CreatTree(int in[], int post[], int n)
{
    if(!n) return NULL;
    Tree *T = (Tree*) malloc(sizeof(Tree));
    T->data = post[n-1]; //后序遍历的最后一个节点就是树的根节点
    //从中序遍历中找到根节点的位置
    int i;
    for(i=0; i<n; i++)
    {
        if(in[i] == post[n-1]) break;
    }
    T->lchild = CreatTree(in, post, i);
    T->rchild = CreatTree(in+i+1, post+i, n-i-1);
    return T;
}

void PrintTree(Tree *T)
{
    if(T)
    {
        int l = 0, r = 0;
        queue[r++] = T;
        while (l < r)
        {
            Tree *bt = queue[l++];
            if(bt == T) printf("%d", bt->data); //为根节点时,无空格输出
            else printf(" %d", bt->data);

            if(bt->lchild) queue[r++] = bt->lchild;
            if(bt->rchild) queue[r++] = bt->rchild;
        }
    }
}

int main()
{
    int in[100]; //中序遍历
    int post[100]; //后序遍历
    int n;
    scanf("%d", &n);
    for(int i=0; i<n; i++)
        scanf("%d", &post[i]);
    for(int i=0; i<n; i++)
        scanf("%d", &in[i]);
    Tree *T =(Tree*)malloc(sizeof(Tree));
    T=CreatTree(in, post, n);
    PrintTree(T);
    return 0;
}

PTA第六章二叉树:根据后序和中序遍历输出前序遍历 7-1 根据后序和中序遍历输出先序遍历 (25 分) 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。 输入格式: 第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。 输出格式: 在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格,行末不得有... 阅读详情

相关推荐

L2-011 玩转二叉树

L2-011玩转二叉树(25分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。 输出格式: ...

Beworth1207的博客 1733

2020年全国天梯赛赛前个人专题强化赛---H(并查集)

并查集讲解传送门 题目7-2 File Transfer (25分)7-3 朋友圈 (25分)7-4 部落 (25分)7-5 文件传输 (25分)7-6 秀恩爱分得快 (25分)7-7 社交集群 (30分) 7-2 File Transfer (25分) We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from o

qq_45830025的博客 927

【XR硬件介绍】PICO Space Pro(Project Swan)深度解析:字节 2026 旗舰 MR 头显延期背后

内部代号 Project Swan 的 PICO 年度旗舰 MR 头显正式定名PICO Space Pro,原本计划 2026 年 9 月对外发布,官方官宣推迟至 2026 年第四季度上市。硬件层面已经完成 FCC 认证,硬件成熟度较高,延期核心目标是打磨 PICO OS 6 空间操作系统,补齐空间计算软件能力。本文从产品背景、硬件架构、软件生态、延期逻辑、行业竞争格局几个维度拆解这款国产高端 MR 设备,分析它对国内 XR 产业的意义与待解的问题。

houdou112358的博客 1207

7-1 根据后序和中序遍历输出先序遍历 (25分)

7-1 根据后序和中序遍历输出先序遍历 (25分) 题目 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。 输入格式: 第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。 输出格式: 在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格,...

太菜了 3902

专有钉钉小程序(浙政钉)开发搭建流程总览

最近公司有一个项目要做浙政钉,让我来负责做。靠,我一脸懵,开发了两年多不知道浙政钉是啥,感觉我眼界还是低了。然后就去百度、同事问了一圈才知道就是个钉钉小程序嘛,然后发布到浙政钉上了。就搭建项目跑起来我都肥了很多事,中间走了很多坑。正好领导让我写《钉钉小程序前端开发流程》,这想着也写个博客吧。下面就是整个流程及我所遇到的坑!

m0_53910290的博客 6355

超级详细!!!新手使用AutoDL跑深度学习(MixVPR项目)的学习记录

新手第一次在AutoDL上跑深度学习的实验,遇到一些问题,简单记录一下。如果大家发现问题,欢迎和我讨论。

weixin_45152283的博客 5万+

数据结构(C语言)-树和二叉树

树和二叉树是计算机科学中非常重要的数据结构,它们具有丰富的性质和广泛的应用。通过深入了解树和二叉树的核心知识点,我们可以更好地理解它们的特性和应用,为解决实际问题提供更多的可能性。本篇博客将介绍树和二叉树的基本概念、常见操作和应用,并通过C语言编写代码和图例来解释。

Choulqt的博客 791

基于IC动态加权的机器学习多因子选股策略:从模型融合到实战回测

在量化投资领域,多因子选股模型通过挖掘市场数据中的有效信号来预测股票收益。其核心原理在于利用统计学与机器学习算法,从海量因子中识别出与未来收益具有稳定相关性的特征。这一技术的核心价值在于将主观投资决策转化为系统化、可重复的客观过程,从而在控制风险的前提下追求超额收益。其典型应用场景包括股票阿尔法策略构建、Smart Beta产品设计以及资产配置中的股票筛选环节。本文聚焦于如何通过信息系数(IC)这一关键指标,动态融合Ridge回归、MLP神经网络和随机森林等多个预测模型,构建一个能够自适应市场风格轮动的选股

weixin_34216614的博客 451

树和二叉树 (C语言)《数据结构与算法》

目录 序言 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用(表示文件系统的目录树结构) 2.二叉树概念及结构 2.1概念 2.2现实中的二叉树 2.3数据结构中的二叉树 2.4特殊的二叉树 2.5 二叉树的存储结构 2.6二叉树的性质 2.7二叉树的存储结构 2.7.1顺序存储 2.7.2链式存储 3.二叉树的顺序结构及实现 3.1 二叉树的顺序结构 4.二叉树链式结构的实现 ...

原来45的博客 8719

打开.nc降水气象数据制作年降水量地图

图层的单位为度,在反距离插值中也是以度为单位,比较麻烦,还是想用以m为单位的投影,这里是个bug,后续调整一下。该彩色部分是以2021年1月、2月、3月的降水数据分别作为RGB得到。因为该栅格的分辨率还是太大了,一个栅格就能覆盖一个县,若想要进行降尺度,可以做插值处理。下载的数据集为2021-2022年,因此有12+12=24个月,24个波段。想要得到廊坊市周围的数据,需要裁剪范围,在降水数据图层上导出数据。打开数据管理工具-投影和变换-定义投影。在降水数据图层上右击属性,添加投影。得到了降尺度的插值图。

所有专家都曾始于新手 4520

EtherCAT主站SOEM -- 24 -- 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站

以上就是EtherCAT主站SOEM – 23 – 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 3554

数据结构C语言版:树和二叉树

本文基于严微敏数据结构C语言版所总结得一些基础笔记,希望可以给初学者提供略微帮助

l5j12138的博客 618

TPAMI 2024 | 基于外观的深度学习凝视估计:综述与基准测试

人类目光提供了关于人类焦点和意图的有价值信息,使其成为研究的关键领域。最近,深度学习彻底改变了基于外观的眼神估计。然而,由于眼神估计研究的独特特征,如2D眼神位置和3D眼神向量之间的不公平比较以及不同的预处理和后处理方法,缺乏开发基于深度学习的眼神估计算法的明确指导方针。在本文中,我们系统回顾了使用深度学习的眼神估计方法。首先,我们沿着典型的眼神估计流程调查现有的算法:深度特征提取、深度学习模型设计、个人校准和平台。

小白学视觉 341

【C语言 数据结构】树和二叉树

树结构通常用来存储逻辑关系为 “一对多” 的数据。例如:这些元素具有的就是 “一对多” 的逻辑关系,例如元素 A 同时和 B、C、D 有关系,元素 D 同时和 A、H、I、J 有关系等。观察这些元素之间的逻辑关系会发现,它们整体上很像一棵倒着的树,这也是将存储它们的结构起名为“树”(或者 “树形”)的原因。存储具有 “一对多” 逻辑关系的数据,数据结构推荐使用树存储结构。有关树的术语结点:和链表类似,树存储结构中也将存储的各个元素称为 “结点”。在上图中,元素 A 就是一个结点。

HR的博客 686

数学向量空间的对偶空间解析

对偶空间是线性代数的"进阶语法",它不仅深化了我们对向量空间的理解,还为解决实际问题提供了强大工具。用生活类比解释对偶空间的核心概念,打破"抽象数学"的壁垒;建立对偶空间与原向量空间的直观联系,揭示"对偶"的本质;通过数学推导和代码实现,让读者掌握对偶空间的基本运算;展示对偶空间在科学和工程中的应用,体现其理论价值。范围:本文从有限维实向量空间入手(便于理解),逐步扩展到对偶基、双对偶空间,最后简要提及无限维空间的特殊性。

AI天才研究院 879

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C语言数据结构--树和二叉树

设二叉树的 根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然 后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问 树的结点的过程就是层序遍历。对 于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号 从1至n的结点一一对应时称之为完全二叉树。双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;如上图:A是B 的父节点。孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;

Sakura_j_h_的博客 592

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C语言数据结构:树和二叉树的基本概念

C语言数据结构:树和二叉树的基本概念

D180230的博客 832

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数据结构-树和二叉树(C语言)

数据结构-树和二叉树(C语言)

CC的博客 684

《数据结构 C语言版 严蔚敏 第2版》:树和二叉树

《数据结构 C语言版 严蔚敏 第2版》:树和二叉树

秋玄的博客 803

4.树和二叉树——数据结构 (严蔚敏C语言版)

1.树 1.1树的定义 树(Tree)是n(n≥0)个结点的有限集,它或为空树(n=0);或为非空树,对于非空树T: (1)有且仅有一个称之为根的结点; (2)除根结点以外的其余结点可分为m (m>0)个互不相交的有限集T1, T2,…,Tm,其中每一个集合本身又是一棵树,并且称为根的子树( SubTree )。 1.2树的基本术语 1.结点: 树中的一个独立单元。包含一个数据元素及若干指向其子树的分支,如中的A、B、C、D等。 2. 结点的度: 结点拥有的子树数称为结点的度。例如,A的度为3,

一个人的博客 1324

《数据结构》树和二叉树代码整理(C语言实现)

《数据结构》树和二叉树代码整理(C语言实现)。排版很难看,没办法,主要是因为。。。。。。算了不解释了我就是懒。

HowToPause的博客 2134

[读书笔记]树和二叉树[数据结构(c语言)严慧敏]

本篇文章主要解释树和二叉树里面的一些定义,以便对树的进一步学习提供有力的支持。     1.树:就是有N个结点的有限集合。     2.

2312

数据结构(C语言版)-第5章 树和二叉树

5.1 树和二叉树的定义 树(Tree)是n(n≥0)个结点的有限集,它或为空树(n = 0);或为非空树,对于非空树T:(1)有且仅有一个称之为根的结点;(2)除根结点以外的其余结点可分为m(m>0)个互不相交的有限集T1, T2, …, Tm, 其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。 二叉树的定义 二叉树(Binary Tree)是n(n≥0)个...

weixin_30848775的博客 415

《数据结构(C语言版)》课程学习(6)——第6章 树和二叉树

qq_34573534的博客 156

数据结构(C语言版)严蔚敏 吴伟民 编著 第6章 树和二叉树

数据结构(C语言版)严蔚敏 吴伟民 编著 第6章 树和二叉树前言6.1 树的定义和基本术语二、使用步骤 前言 树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用,直观看来,树是以分支关系定义的层次结构。树在计算机领域中也得到广泛应用,如在编译程序中,可用树来表示源程序的语法结构。又如在数据库系统中,树形结构也是信息的重要组织形式之一。本章重点讨论二叉树的存储结构及其各种操作,并研究数和森林与二叉树的转换关系。 6.1 树的定义和基本术语 树是n(n≥0)个结点的有限集。在任意一棵非空树中: (1)

小成星际的博客 820

C语言数据结构初学者笔记:四.树和二叉树

树和二叉树

low1234567的博客 361
上一篇: PTA-数据结构字符串与数组|C语言版
下一篇: 百度样式-html、css
var事如意
博客等级 码龄5年 18粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值