其他分享
首页 > 其他分享> > 东北大学842(13)——没考过的知识点

东北大学842(13)——没考过的知识点

作者:互联网

笔记所有内容参考《东大红皮书》《王道》《天勤》,由本人分析整理。
842没考过的数据结构内容,稍微总结,基本不会考

算法5个特性

数据的存储结构(物理结构)

数据的存取方式

求时间复杂度

静态链表

卡特兰数(Catalan)

1 / (n+1) * c{n, 2n}

双端队列

1、2、3、4入队

三元组

广义表

A = ( ) 长度0,深度1
B = (d, e) 长度2,深度1
C = (b, (c, d)) 长度2,深度2
D = (B, C), 长度2,深度3
E = (a, E),长度2,深度无限

树的双亲表示法

树的孩子表示法

并查集

分块查找

B树、B+树(没写得很细,没考过)

kmp

//kmp字符串从1开始
//主字符串从1开始
//先写index再写getNext,会容易记
void getNext(char substr[], int subLength, int next[]) {
    int i = 1;
    int j = 0;  //注意
    next[1] = 0; //注意
    while(i < subLength) {
        if(j == 0 || substr[i] == substr[j]) {
            ++i;
            ++j;
            next[i] = j; //注意
        } else {
            j = next[j];
        }
    }
}

int Index(char str[], int length, char substr[], int subLength, int next[], int pos) {
    int i = pos;
    int j = 1; //字符串从1开始,从0开始next数组不好写
    while(i < length && j < subLength) {
        //注意 j == 0 ||
        if(j == 0 || str[i] == substr[j]) { 
            ++i;
            ++j;
        } else {
            j = next[j];  // j = nextval[j];
            /*普通串的模式匹配,需要从新回到头,匹配
            i = i - j + 2;
            j = 0
            */ 
        }
    } 
    if(j >= subLength) {
        return i - subLength;
    } else {
        return 0;
    }
}

归并排序

  1. 把数列一分为二
  2. 两数列归并
  3. 把1,2递归
void MergeSort(int A[], int low, int high) {
    if(low < high) {
        int mid = (low + high) / 2;
        MergeSort(A, low, mid);
        MergeSort(A, mid + 1, high);
        Merge(A, low, mid, high);
    }
}

int B[Max];
void Merge(int A[], int low, int mid, int high) {
    //需要一个外部的数组拷贝
    for(int k = low; k <= high; ++k) {
        B[k] = A[k];
    }
    for(int i = low,int j = mid + 1, int k = i; i <= mid && j <= high; ++k) {
        if(B[i] < B[j]) {
            A[k] = B[i++];
        } else {
            A[k] = B[j++];
        }
    }
    while(i <= mid) {
        A[k++] = B[i++];
    }
    while(j <= high) {
        A[k++] = B[j++];
    }
}

外部排序

时间瓶颈->内外存IO耗时->减少外存到内存和内存到外存的次数->减少归并次数

  1. 置换——选择排序:
    • 目的:获得较长的初始有序归并段,减少归并次数
    • 原理:利用一个数组,预先存放一定的数,方便分配有序的归并段
  2. 最佳归并树:
    • 目的:使得总归并次数最小
    • 类似哈弗曼树,优先把较短的归并段归并,然后把较长的归并段归并
  3. 败者树:
    • 目的:在m段归并段中取得最小值
    • 类似堆,不破坏全部,调整局部就可以取得最小值;
      • 类似比赛:败者指叶子,胜者(值小的)往上走,最后决出一个胜者(最小的)

标签:知识点,13,下标,842,int,结点,next,数组,归并
来源: https://www.cnblogs.com/vergilwu/p/11704391.html