
基础理论
张可_
热爱生活的有志青年。
展开
-
什么是信息熵?
1948 年,伟大的信息论之父**香农(Shannon)**将热力学中熵的概念引入到了信息论中,提出了“信息熵”这一概念。信息熵用于解决信息的量化问题,将原本模糊的信息概念进行计算得出精确的信息熵值,信息熵是描述消息中,不确定性的值。理解起来需要一点耐心,可以先这么说,信息熵就是用来描述信息中不确定性的值,熵越低,不确定性越低,我们也就更容易得到确定的信息。举个栗子,张三的女朋友小红又要过生日了,他现在挑选礼物有三个选择:口红、包、机械键盘。张三并不知道小红到底喜欢那种礼物,因此对于张三来说,小红喜欢原创 2020-07-27 11:25:58 · 5711 阅读 · 0 评论 -
回溯法:N皇后与解数独
好久没写博客了,最近比较忙,在系统学习一些知识,没学完之前不太容易输出高质量文章,等过段时间学完了再整理一下写几篇文章出来。但中间也在用零碎的时间学学别的,今天写总结一下回溯法。概念回溯法作为一种搜索算法,可以找出所有或一部分解的一般性算法,尤其适用于约束满足问题,例如今天要讲的N皇后、解数独等等。回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试原创 2020-05-22 15:02:02 · 615 阅读 · 0 评论 -
阅读源码的方法论
随着互联网行业的发展,优秀的开源框架越来越多,我们可以轻易地在 Github 上找到业界顶尖的大佬亲手写的代码,对于这种放在眼前的美食我们怎么能视而不见呢?但实际上,源码一般比较复杂,一个框架动辄上万行、几百个类,互相之间又有着各种各样奇奇怪怪的联系。想要从这一堆复杂冗长的代码中理清楚头绪实在是非常困难。下面这篇文章就总结了我在阅读源码时的一些方法与技巧,希望可以帮到大家。下面的框架我会按照 ...原创 2019-03-31 14:59:50 · 340 阅读 · 0 评论 -
快速排序与归并排序Java实现版
快速排序快速排序(Quicksort) 是一种排序算法,平均时间复杂度为:O(n log n),最坏需要 O(n²),但很少见,快速排序之所以叫快速排序,就是因为它比一般的排序算法要快。快速排序使用了分而治之的思想,步骤如下:选择基准值(pivot)将数组分成两个子数组:小于基准值的元素和大于基准值的元素对这两个子数组进行快速排序不同的选取基数值策略对排序性能都有很大的影响。递归...原创 2019-04-10 23:26:47 · 1059 阅读 · 0 评论 -
插入排序与希尔排序Java版
插入排序时间复杂度:O(n²)插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用 in-place 排序(即只需用到 O(1) 的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。——维基百科publ...原创 2019-04-12 00:00:09 · 271 阅读 · 0 评论 -
图论总结-拓扑排序以及最短路径问题(无权最短路径、Dijkstra算法、具有负边值的图)
图的定义一个图(graph)G = (V,E) 由 顶点(vertex) 集 V 和 边(edge) 集 E 组成。每一条边就是一个点对(v,w),其中 v,w∈ V,有时也被称为弧(arc)。如果点对是有序的,那么图就叫做是有向的(directed),有向的图有时也叫做有向图(digraph)。顶点 v 和 w 邻接(adjacent) 当且仅当(v,w)∈ E。有时边还有第三种成分,...原创 2019-04-28 21:30:57 · 2124 阅读 · 0 评论 -
最小生成树-Prim 算法与 Kruskal 算法 Java 实现版
最小生成树一个无向图 G 的最小生成树(minimum spanning tree) 就是由该图的那些连接 G 的所有顶点的边构成的树,且总价值最低。最小生成树存在当且仅当 G 是连通的。Prim 算法Prim 算法是使其连续的一步步长成。在每一步,都要把一个节点当做跟并网上加边,这样也就把相关联的顶点增长到了树上。/** * 类似 {@link Dijkstra} 算法。 ...原创 2019-04-28 21:35:54 · 1029 阅读 · 0 评论