• 内功提升:数据结构与算法


    1. 为什么要学数据结构和算法?

    1.数据结构与算法
    2.5大线性数据结构对比,源码解读
    3.3类排序算法对比,理解排序
    4.2类查找算法对比,理解查找


    程序=数据结构+算法
    数据结构是一个容器,用来存放数据,好的容器事半功倍,不同的数据结构有不同的特点,为了完成数据的存储和管理

    算法就是为了如何去管理数据,如何去操作数据,更高效的查询

    查询本质是找最短路径

    大厂面试的必备内容
    方便理解设计思想
    写代码性能保障
    锻炼思维逻辑,增加内功

    2. 怎么学?
    理解--写一遍--思考总结
    不需要创造数据结构,理解,使用好数据结构

    3.有哪些数据结构:
    3.1 数组:array: 类型相同的连续存放容器,节约空间,查找块,增删满
    多维数组:int[,] a=new [3,4]{{1,2,3,4},{5,6,7,8},{9,10,11,12}}
    锯齿数组:int[2,3]

    3.2 arrayList:动态数组,边长,里面的元素是object,有装箱,拆箱, ,默认长度为4,超过长度length *2 翻倍长度
    trimToSize() 收缩空间,把开辟的多余的收缩掉,查找块,增删慢
    runtime-main 源码

    3.3 泛型list<string>:也是array,和arrayList基本一样,类型确定,不需要装箱拆箱,性能比arrayList好

    3.4 sortedList,sortedList<int,str>,LinkedList<model>

    3.5 堆stack(FILO),实际上是数组
    stack<T>:先进后出,方便实现算法:回文 abba,abccba

    3.6 队列queue:本质是数组,fifo

    3.7 优先级队列:priorityQueue c#10新增的
    权重队列:有性能损失

    不同的数据结构,满足不同的需求

    基类库BCL:https://github.com/dotnet/runtime 0415version

    二,算法
    10 大排查算法:冒泡,选择,插入排序
    1. 冒泡算法:两两交换,比较,依次和后面的比较,直到大的靠右
    选择排序:从第一个开始和后面的所有比较,将最小的放在第1个,依次循环,移动少,速度快
    插入排序:从左开始,从小到大插入值

    选择 》 冒泡 > 插入 的效率

    2.查找算法:
    顺序查找:forearch, 最大值,最小值
    二叉查找:先排序在查询,判断索引(length-1 + i )/2的值和查找的值的是否相等,能提升性能

    3. 自组织查找算法: 热数据:将每次查找的数据向前移动一位(除第1位),二 八原则:将每次查找的数据向前移动一位(除前面的20%不移动,后面的80%移动)


    二叉查找:
    public static int show(int[] arr,int value)
    {
    int right=arr.lenght -1;
    int left=0;
    int middle;
    while(left < right)
    {
    middle =(left + right)/2;
    if(arr[middle]==value)
    {
    return middle;
    }
    else if (value <arr[middle])
    {
    right =middle -1;
    }
    else{
    left=middle +1;
    }
    }

    return -1;
    }

    递归二叉查找:性能不好,空间乱费

    public static int bshow(this int[] arr,int value,int left,int right)
    {
    if(left >right)
    {
    return -1;
    }
    int middle=(int)(right+left)/2;
    if(value < arr[middle])
    {
    return arr.bshow(value,left,middle -1);
    }
    else if(value ==arr[middle])
    {
    return middle;
    }
    else
    {
    return arr.bshow(value,middle+1,right);
    }
    }

    屏幕录像专家2020


    1.各种链表结构学习,对比数组差异
    2.各种二叉树结构,理解线性存储,非线性存储
    3.hash存储 存取都快,是如何实现的
    4.数据结构总结,从内存角度理解数据结构


    链表:linkedList,数据随机存放,不是连续存放,增加删除简单,访问慢
    线性结构分:数组和链表(栈和队列),元素的前后只有一个元素
    非线性结构:元素的前后可能有多个,多维数组,树,图

  • 相关阅读:
    TortoiseSVN是windows平台下Subversion的免费开源客户端。
    Lotus Sametime 服务器的安装和配置
    群件
    Lotus Sametime
    软件项目经理
    PMP考试
    IT项目经理
    什么是模式呢?
    上下文(context):相关的内容
    设计模式-四要素
  • 原文地址:https://www.cnblogs.com/csj007523/p/16350084.html
Copyright © 2020-2023  润新知