![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 61
Oreooooooooo
这个作者很懒,什么都没留下…
展开
-
算法——程序的灵魂
算法——程序的灵魂 “算法+数据结构=程序”(Niklaus Wirth)如果将程序比作人的话,那么数据结构相当于骨架肉体,而算法,则是其思想和灵魂。原创 2017-09-13 21:18:05 · 1020 阅读 · 0 评论 -
算法基础:排序(四)——二叉堆、优先队列、堆排序——Python实现
1. 堆 Heap堆是利用完全二叉树的结构来维护数据的一种的数据结构,因此堆也叫做二叉堆。借助下面这张图可以直观的理解二叉堆的结构和特点: 大家不难发现,元素的标号与其父节点的标号n的关系为: 左节点n’=2n,右节点n’=2n+1。 这为我们递归的查找节点提供了路径。正是因为堆这种二叉树的结构特性,一般利用堆进行一次查找的时间复杂度在O(1)~O(logN)之间,这也正是我们后面利用堆实现优原创 2017-10-17 10:29:12 · 836 阅读 · 0 评论 -
算法基础:排序(一)——选择排序、插入排序、Shell排序——Python实现
输入:由n个数构成的一个序列1. 洗牌(Knuth Shuffle)如何洗牌,即打乱一个序列,Knuth洗牌算法可以做到遍历一遍数组便将其完全打乱,即时间复杂度O(n)。import random# random、numpy.random模块都有shuffle方法,这里顺便自己实现一下class Shuffle: @staticmethod def knuthShuffle(a):原创 2017-09-15 15:29:29 · 695 阅读 · 0 评论 -
算法基础:排序(二)——归并排序——Python实现
1. 归并排序与分治策略归并排序的核心思想就是 分而治之。先介绍下分治法,设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。分治策略:对于一个规模为N(N较大)的问题,将其划分为K个规模较小的子问题,若子问题相互独立且与原问题形式相同,我们则可以使用递归不断地将子问题进行划分,将一个大问题自顶向下一层层划分为容易解得小问题,得到小问题的解后再自底向上逐层合原创 2017-10-11 17:59:35 · 3209 阅读 · 0 评论 -
算法基础:排序(三)——快速排序——Python实现
快速排序也是一种采用分治策略的排序算法,它将一个数组分成两个子数组,取数组第一个元素作为切分点P,使左侧子数组任意元素不大于P,右侧不小于P;然后将两部分独立地排序,便完成了整个数组的排序。引用一张图可能更好理解(截图自http://algs4.cs.princeton.edu/23quicksort/): 快速排序和归并排序是互补的,下面比较一下两种排序: 在算法流程方面, 快速排序:切分–原创 2017-10-16 11:27:05 · 454 阅读 · 0 评论 -
编程练习:N皇后问题 (JAVA)
N-Queens基本解法,使用二维数组,for循环两次,效率低import java.util.*;public class Queens { private int chessBoard[][]; private int N; Queens(int N) { this.N = N; this.chessBoard = n...原创 2018-03-20 17:33:07 · 523 阅读 · 0 评论