最近在研究算法,发现其实算法也并不是特别难,只要抓住算法的核心思想,再静下心来,都可以自己实现的。在计算机领域,有一些常见的而且又经常使用的算法,这些算法我们应该掌握,比如常见的排序算法;还有一些算法就是特定领域中经常使用的算法了,这些算法我们只有必须使用时再去学习使用就行了,比如图像处理中的快速傅里叶变换算法。
算法定义
让我们来看看算法的定义吧。(以下定义摘自中文维基百科)
在数学和计算机科学/算学之中,算法/演算法/算则法(Algorithm)为一个计算的具体步骤,常用于计算、数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。算法应包含清晰定义的指令用于计算函数。
算法中的指令描述的是一个计算,当其运
继续阅读 »
算法:由输入经过一系列的计算步骤得到输出
排序问题:将无序的输入经过处理按照一定的孙徐输出
优秀的算法:
- 正确性(思路清晰)
- 高效(算法分析)
- 易于实现(现成的算法)
算法的用处:
- 生物信息学
- 网络(图论,字符串查找)
- 信息安全(RSA..)
- 优化(调度)
算法问题:
- 图论(最短路径...)
- LCS(动态规划...)
- 拓扑排序
- 凸包
数据结构:
C++ STL 优缺点 效率
难解问题:
并行算法
CPU效率
算法技术
算法的效率
渐近记号
问题规模量 时间T(n)
数组去重
继续阅读 »
网上有很多关于KMP算法的文章。用google搜“kmp算法”,第一页的文章我都看过,唯一能看懂并看完的就只有阮一峰的这篇。
继续阅读 »
最近整理了一些常见的排序算法,资料基本上都来自网上,大部分参考了维基百科,分析了常见算法的原理,并举例分步说明,有的还给出了排序动画演示,但没有涉及算法复杂度等方面的概念,最后对每一种排序算法都给出了至少一种 JavaScript 的实现方法(因为我是做前端方面的,所以只给出了 JavaScript 代码)。
由于自己能力和经验有限,难免出现某些纰漏和错误,欢迎指正。
日本程序员 norahiko,写了一个排序算法的动画演示,非常有趣。另外,今天一同事告诉我有一个排序算法的舞蹈,请点击【程序员的艺术:排序算法舞蹈】。
常见排序算法 - 冒泡排序 (Bubble Sort)
常见排序算法 - 快速排序 (Quick Sort)
继续阅读 »
content
{:toc}
简单来说 Fisher–Yates shuffle 算法是一个用来将一个有限集合生成一个随机排列的算法(数组随机排序)。这个算法生成的随机排列是等概率的。同时这个算法非常高效。
本文主要介绍这个算法的来源、演变、原理。并举出一个例子为大家清晰的描述每次迭代过程。最后使用 JavaScript 代码将算法实现。
继续阅读 »
一.实验名称:银行家算法
二.实验目的:
银行家算法是避免死锁的一种重要方法,通过编写 一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。
三.实验原理说明:
银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。
银行家算法是由操作系统执行,每当一个进程请求资源。算法由拒绝或延期的请求,如果它确定接受该请求可以把系统处于不安全状态(即一个可能发生死锁)来避免死锁。当一个新进程进入一个系统,它必须声明它可能曾经声称每
继续阅读 »
算法原理
归并排序(Merge Sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
归并操作(Merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。归并排序有多路归并排序、两路归并排序 , 可用于内排序,也可以用于外排序。这里仅对内排序的两路归并方法进行讨论。
算法思路:
1. 把 n 个记录看成 n 个长度为 l 的有序子表
2. 进行两两归并使记录关键字有序,得到 n/2 个长度为 2 的有序子表
3. 重复第 2 步直到所有记录归并成一个长度为 n 的有序表为止。
m
继续阅读 »
TBOX提供了各种常用算法,对容器中的元素进行各种操作,这里主要介绍下排序和查找算法。
排序算法目前支持如下几种:
快速排序:tb_quick_sort
堆排序: tb_heap_sort
插入排序:tb_insert_sort
冒泡排序:tb_bubble_sort
并且提供通用的tb_sort接口,对各种排序算法进行自动适配,使得任何情况下,性能都是最优的。
例如:
对具有随机迭代特性的容器,采用快速排序来优化
对具有随机迭代特性,并且是超大规模的容器,采用堆排序
对只能线性迭代的容器采用冒泡排序
继续阅读 »
定义
希尔排序(英语:Shell sort),也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。
希尔排序是基于插入排序的以下两点性质而提出改进方法的:
插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率
但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位
more
算法步骤
希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。
选择步长
按照选择的步长对序列进
继续阅读 »
排序的定义及分类
排序的目标:将无序输入的数据按有序排列
计算的时间复杂度(最差、平均、和最好性能),依据列表(list)的大小(n)。一般而言,好的性能是O(n 3log n),且坏的性能是O(n2)。对于一个排序理想的性能是O(n)。仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要O(n log n)。
内存使用量(以及其他电脑资源的使用)
稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。
依据排序的方法:插入、交换、选择、合并等等。
more
分类
1.按稳定性(在待排序的
继续阅读 »