08 2023 档案
摘要:## 引言 今天在做一个设置文件夹路径的功能,就是一个文本框,加个按钮,点击按钮,弹出 `FolderBrowserDialog` 再选择文件夹路径,简单做法,可以直接 `StackPanel` 横向放置一个 `TextBox` 和一个 `Image Button`,然后点击按钮在 后台代码中给 `
阅读全文
摘要:## 引言 排序算法是最基础的算法,对于排序算法,除学习算法原理,代码实现之外,更重要的是学习每个算法的特点,知道在什么场景下选择那种算法。 那一定是选择时间复杂度最低的排序算法就是最优的吗? 可以从以下几个方面分析一下。 ## 排序算法的执行效率 对于排序算法的执行效率,一般从以下几个方面来分析:
阅读全文
摘要:## 介绍 **CAS**(Compare And Swap) 是一种无锁算法的实现手段,中文名称为比较并交换。它由 CPU 的原子指令实现,可以在多线程环境下实现无锁的数据结构。 ### 原理 **CAS** 的原理是:它会先比较内存中的某个值是否和预期值相同,如果相同则更新这个值,否则不做任何操
阅读全文
摘要:## 灵感 最近在做配置模块,然后整个配置的参数是非常多的,层级结构也很深。可能有几百个参数,三、四层的层级关系,想要捋顺所有的类和参数,太繁琐了,而且 Visual Studio 的类视图只能看到属性,却看不出层级关系来,所以花费些许精力,写一个控制台小程序,展示类结构。 原理就是通过反射得到所有
阅读全文
摘要:## 引言 最近想把一些英文官方文档的资料翻译成中文,然后转化为Markdown文档,然后发现[百度通用翻译的API](https://fanyi-api.baidu.com/doc/21)有不错的免费额度,个人申请也能申请到高级版。这个额度足够个人的日常使用了。 ](https://niuery.com/post/54)中,学习了冒泡排序,插入排序,选择排序这三种时间复杂度为 $O(n^2)$ 的算法。实时上 $O(n^2)$ 时间复杂度是非常高的,所以一般只适合小规模数据排序,那接下来,就在看一看时间复杂度
阅读全文
摘要:## 引言 按照时间复杂度,将一些常见排序算法进行分类,分为以下三类: - $O(n^2)$:冒泡排序,插入排序,选择排序。 - $O(nlogn)$:快速排序,归并排序。 - $O(n)$:桶排序,计数排序,基数排序。 本篇文章讨论以下第一类:冒泡排序,插入排序,选择排序。 上一篇[数据结构与算法
阅读全文
摘要:## 引言 上文[数据结构与算法 递归(一)](https://niuery.com/post/51) 讲述了什么是递归算法,如何编写递归算法及如何写好递归算法,本文着重讲述一下如何避免递归过深导致的堆栈溢出问题。 ## 探究产生堆栈溢出的原因 函数调用采用**函数调用栈**来保存当前“快照”(局部
阅读全文
摘要:## 什么是递归? **递归(Recursion)** 是一种解决问题的方法,它将问题分解为更小的子问题,并逐层解决这些子问题。递归算法的核心思想是:**一个函数可以直接或间接地调用自身**。通过这种自我调用,我们可以用简洁的代码来解决复杂问题。 ## 满足递归的条件 一般来说,满足下面三个条件就可
阅读全文
摘要:## 引言 深拷贝是指创建一个新对象,该对象的值与原始对象完全相同,但在内存中具有不同的地址。这意味着如果您对原始对象进行更改,则不会影响到复制的对象 常见的C#常见的深拷贝方式有以下4类: 1. 各种形式的序列化及反序列化。 2. 通过反射机制获取该对象的所有字段和属性信息。遍历所有字段和属性,递
阅读全文
摘要:## 引言 哨兵思想是指在算法中使用一个特殊值来检测或标记某些条件的发生,它的目的是为了简化代码,并使其更容易理解,常常用于在循环中优化边界条件的判断。 ## 介绍 在算法中,"哨兵"思想是指在循环中设置一个特殊的元素(称为哨兵),以便在循环过程中能够更高效地处理某些边界情况或结束条件。 这种思想可
阅读全文
摘要:继[数据结构与算法 组数、链表、栈和队列(一)](https://niuery.com/post/41)讲解完数组,链表及算法的优化策略之后,接下来继续讲解**两种特殊的线性表结构,栈和队列**。 ## 栈 对“栈”有一个很形象的比喻,栈就像一摞叠在一起的盘子,放盘子时,只能放在上面,不能将盘子插入
阅读全文
摘要:数组、链表、栈和队列是四种基础数据结构,他们是高级、复杂的数据结构和算法的基础。本篇先来讲述**数组,链表,及算法的优化策略**。 ### 数组 #### 定义 **数组:数组是一种线性表数据结构,它用一组连续的内存空间存储一组具有相同类型的数据。** 定义中有三个关键词: - **线性表** -
阅读全文
摘要:title: 数据结构与算法 复杂度分析专题(二) category: 数据结构与算法 tags: 算法 updatedAt: 2023-05-13T12:54:18.943Z createdAt: 2023-04-09T13:52:05.115Z ## 引言 在上一篇[复杂度分析专题(一)](ht
阅读全文
摘要:## 意义 算法复杂度分析的意义在于评估算法的执行效率,找出最优解决方案,是优化算法和改进程序性能的基础。通过对算法的时间复杂度和空间复杂度进行分析,可以帮助我们预估该算法运行所需的资源,从而提高程序的性能。 ## 大O复杂度表示法 ### 例1 有如下代码 ```csharp 1 public i
阅读全文
摘要:# 开场白 算法介绍从一个简单加法开始,现要求写一个求1+2+3+..+100的结果的程序,那我可以这样写: ```csharp int count = 100; int sum = 0; for (int i =1; i 这就是最简单的程序之一,这就是算法。但是它是最优的吗?是最高效的吗? 儿时数
阅读全文
摘要:## 数据结构起源 早期人们都把计算机理解为数值计算工具,就是感觉计算机当然是用来计算的,所以计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法,然后再编写程序,得到一个实际的软件。 可现实中,我们更多的不是解决数值计算的问题,而是需要一些更科学有效的手段(比
阅读全文
摘要:## 介绍 **Markdown** 是一种轻量级标记语言,它允许你使用易于阅读、易于编写的纯文本格式来创建富文本内容。通过简单的标记符号,如井号(\#)、星号(\*)和下划线(\_),可以快速地添加标题、粗体、斜体、链接等基本样式,从而使得排版和格式化变得非常简单。 这里一些[基础语法](http
阅读全文
摘要:世界上存在成千上万种学习法,如果上天只让我掌握一种,那一定就是“费曼学习法”。 ## 介绍 费曼学习法是由诺贝尔物理学奖获得者理查德·费曼提出的一种学习方法,其核心思想是将所学内容用自己的话表达出来,以此检验自己对知识的掌握程度。 费曼学习法可以简化为四个单词:**Concept**、**Teach
阅读全文
摘要:## 定义 [函数式编程](https://baike.baidu.com/item/%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B/4035031#ref_[1]_1711147)是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算
阅读全文
摘要:## 引言 `Span` 是C# 中的一种结构体,它是一种内存安全的类型,可以用来表示连续的内存区域。`Span` 可以被用于访问和操作数组、堆上分配的内存和栈上分配的内存。使用 `Span` 可以避免不必要的内存拷贝,从而提高性能。 ## 对数组使用Span 如果需要快速访问托管或非托管的连续内存
阅读全文
摘要:## 引言 在实际开发场景中,当ViewModel内的一个属性是一个 `ObservableCollection` 或者是一个多层级 `class` 的时候,有可能有的需求需要 `ObservableCollection`内的元素的子属性或多层级 `class` 的子属性,甚至子属性的子属性,变化,
阅读全文
摘要:## 引言 今天同事问了我一个问题,`System.Windows.Forms.Timer`是前台线程还是后台线程,我当时想的是它是跟着UI线程一起结束的,应该是前台线程吧? 我确实没有仔细研究过他们的异同,所以带着这个疑问探究一下`System.Windows.Forms.Timer`。 ## S
阅读全文

浙公网安备 33010602011771号