随笔分类 -  C# 数据结构与算法

摘要:简介 自动机理论是对抽象机 (abstract machines) 和自动机 (automata) 的研究,以及可以使用它们解决的计算问题。它是理论计算机科学中的一个理论。 自动机一词来自希腊语 αὐτόματος,意思是“自我行动、任性、自我行动”。自动机(复数自动机)是一种抽象的自行式计算设备, 阅读全文
posted @ 2024-05-28 01:07 小林野夫 阅读(172) 评论(0) 推荐(0) 编辑
摘要:1.BitMap的应用 在网络同步中(尤其是帧同步),往往需要找一种数据在序列化之后,体积小,数据信息量可观的数据存储方式。 以帧同步为例,一个相当复杂的ACT游戏,采用同步交互量最省的帧同步方式进行网络同步,每关键帧只同步玩家的键位操作数据,此时如果使用BitMap算法进行数据结构的设计,只要1b 阅读全文
posted @ 2022-06-16 21:41 小林野夫 阅读(1272) 评论(0) 推荐(0) 编辑
摘要:在WPF , silverlight ,WP7中经常会用到List<T>和ObservableCollection<T>。这里简单讲一下他们之间的相互转换。 1.List<T>的简单介绍: List<T>代表的是强类型的Ojbect集合,可以通过索引访问并且提供了查找、排序以及操作此集合的方法。Li 阅读全文
posted @ 2022-06-15 17:53 小林野夫 阅读(916) 评论(0) 推荐(0) 编辑
摘要:作的原理是将数组分到有限数量的桶子里。 每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。 桶排序是鸽巢排序的一种归纳结果。 当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间 桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射 阅读全文
posted @ 2022-06-15 00:33 小林野夫 阅读(162) 评论(0) 推荐(0) 编辑
摘要:视频地址:https://www.bilibili.com/video/BV1464y1F7Yx/?spm_id_from=autoNext 计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。计数排序(C 阅读全文
posted @ 2022-06-14 20:33 小林野夫 阅读(317) 评论(0) 推荐(0) 编辑
摘要:背景 计算机系统中经常会遇到这样一类问题:前一个任务已经执行完成,需要在待执行任务中挑选一个新的任务执行。最简单的方法就是将所有的任务排成一个队列,按照队列的先进先出(FIFO)的策略挑选要执行的任务。这种策略虽然保证了所有的任务都能被执行,但是往往会导致执行时间短的或者紧急度高的任务在队列中等待时 阅读全文
posted @ 2022-06-14 20:03 小林野夫 阅读(3792) 评论(1) 推荐(2) 编辑
摘要:System.Collections.Generic 集合和数据结构 接口 ADT IEnumerable 和IEnumberator public interface IEnumerator { bool MoveNext(); object Current { get; } void Reset 阅读全文
posted @ 2022-06-14 00:04 小林野夫 阅读(176) 评论(0) 推荐(0) 编辑
摘要:简介 HashSet<T>类,主要被设计用来存储集合,做高性能集运算,例如两个集合求交集、并集、差集等。HashSet<T> 类可以视为 Dictionary<TKey,TValue> 没有值的集合。 特性: 1.HasSet 中的值不能重复 2.HashSet中的值没有顺序 3.HashSet的容 阅读全文
posted @ 2022-06-13 23:56 小林野夫 阅读(211) 评论(0) 推荐(0) 编辑
摘要:定义 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlo 阅读全文
posted @ 2022-06-13 17:31 小林野夫 阅读(141) 评论(0) 推荐(0) 编辑
摘要:定义 归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 若将两个有序表合并成一个有序表,称为二路归并。 O ( n log ⁡ 阅读全文
posted @ 2022-06-13 14:30 小林野夫 阅读(327) 评论(0) 推荐(0) 编辑
摘要:一、枚举算法思想(暴力算法) 将问题的所有可能答案一一列举,根据判断条件判断此答案是否合适,一般用循环实现。 经典运用:百钱买百鸡、填写运算符 二、递推算法思想 1.顺推法:从已知条件出发,逐步推算出要解决问题的方法。 2.逆推法:从已知结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过 阅读全文
posted @ 2022-06-13 01:55 小林野夫 阅读(1899) 评论(0) 推荐(0) 编辑
摘要:原文:https://lotabout.me/2018/skip-list/ 跳表──没听过但很犀利的数据结构 跳表(skip list) 对标的是平衡树(AVL Tree),是一种 插入/删除/搜索 都是 O(log n) 的数据结构。它最大的优势是原理简单、容易实现、方便扩展、效率更高。因此在一 阅读全文
posted @ 2022-06-13 00:56 小林野夫 阅读(607) 评论(0) 推荐(1) 编辑
摘要:概览 定义 堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。 完全二叉树的知识 数组索引是从0开始 通常堆是通过一维数组来实现的。在阵列起始位置为0的情形中:父节点i的 阅读全文
posted @ 2022-06-12 15:24 小林野夫 阅读(522) 评论(1) 推荐(1) 编辑
摘要:概览 定义 选择排序:每一趟在待排序元素中选取关键字最小(或最大)的元素, 和首个待排序元素的做交换。 适用范围 适用性:既可以用于顺序表,也可用开链表 时间和空间复杂度 时间复杂度:O(N) 空间复杂度:O(1) 稳定性 简单选择排序是不稳定的 算法执行步骤 第一趟:从左往右扫描找出最小元素,和第 阅读全文
posted @ 2022-06-12 01:31 小林野夫 阅读(70) 评论(0) 推荐(0) 编辑
摘要:概览 定义 快速排序(英语:Quicksort),又称分区交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序 快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R.Hoare在1960年提出。它的基 阅读全文
posted @ 2022-06-11 23:09 小林野夫 阅读(703) 评论(0) 推荐(0) 编辑
摘要:概览 定义 冒泡排序(英语:Bubble Sort)又称为泡式排序,是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮” 阅读全文
posted @ 2022-06-11 19:30 小林野夫 阅读(431) 评论(0) 推荐(0) 编辑
摘要:概览 算法的思想 穷举(枚举)算法思想; 递推算法思想; 递归算法思想: 分治算法思想: 概率算法思想; 算法分类 按辅助空间分类 比较式排序法 比较排序法不需要太多的辅助空间 之前学习的冒泡、选择、插入、归并、快速、希尔、堆排序,都是基于比较的排序口平均时间复杂度目前最低是o(nlogn) 分配式 阅读全文
posted @ 2022-06-11 18:16 小林野夫 阅读(35) 评论(0) 推荐(0) 编辑
摘要:背景 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。 希尔排序是非稳定排序算法。 该方法因D.L.Shell 于1959 年提出而得名。 定义 希尔排序︰先将待排序表分割成若 阅读全文
posted @ 2022-06-11 18:15 小林野夫 阅读(180) 评论(0) 推荐(0) 编辑
摘要:概览 插入排序法(打牌) 算法思想:每次将一个待排序的元素按其关键字大小插入到前面已排好序的子序列中,直到全部记录插入完成。 例如:元素13要排序时候,可以认为13之前元素都已经排序完成,此时只要把13与之前元素一 一比较,然后找到合理位置插入。 代码 空间复杂度:(O(1)时间复杂度︰ O(n)~ 阅读全文
posted @ 2022-06-11 11:44 小林野夫 阅读(358) 评论(0) 推荐(0) 编辑
摘要:概览 分块查找 分块查找要求把一个数据分为若干块,每一块里面的元素可以是无序的,但是块与块之间的元素需要是有序的。对于一个非递减的数列来说,第i块中的每个元素一定比第i-1块中的任意元素大。同时,分块查找需要一个索引表,用来限定每一块的范围。在增加、删除、查找元素时都需要用到。 使用场景 字典 班级 阅读全文
posted @ 2022-06-10 00:39 小林野夫 阅读(330) 评论(0) 推荐(0) 编辑

原文链接:https://www.cnblogs.com/cdaniu/