算法 订阅
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、Jacques Herbrand和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。 展开全文
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、Jacques Herbrand和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。
信息
特    征
有穷性 确切性 输入 输出 可行
常    用
计算、数据处理和自动推理
外文名
Algorithm
中文名
算法
学    科
数学 计算机
算法特征
一个算法应该具有以下五个重要的特征:(Finiteness)算法的有穷性是指算法必须能在执行有限个步骤之后终止;(Definiteness)算法的每一步骤必须有确切的定义;(Input)一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;(Output)一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;(Effectiveness)算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。
收起全文
精华内容
参与话题
问答
  • 数据结构算法视频教程

    万人学习 2015-01-29 08:45:17
    数据结构算法视频培训课程,该教程主要是介绍在游戏开发中经常使用的数据结构,例如数组,链表,栈,队列,二叉树,递归等重要知识点讲解以及将它们里灵活的运用到算法里面。
  • 自动还原魔方算法数据结构

    万次阅读 多人点赞 2015-12-11 11:36:48
    今天看到一个有趣的问题,魔方还原问题,仔细思考了一下,关键点在于数据结构设计。 分析如下,简单设置魔方剖面图如下。 魔方的点主要分为三面相接的 角点 ,面相接的边点,面中心的基本点 基本点是固定的,魔方...

    今天看到一个有趣的问题,魔方还原问题,仔细思考了一下,关键点在于数据结构设计。
    分析如下,简单设置魔方剖面图如下。
    魔方剖面图

    魔方的点主要分为三面相接的 角点 ,面相接的边点,面中心的基本点
    基本点是固定的,魔方在变形过程中,基本点是没有办法进行改变的,图中1-1,2-2,3-3的相对位置是固定的,改变的只能是角点和边点,基于此,基本位置衡量必须基于基本点
    基本点

    根据基本点,设置边点编号如下图,相同编号表示为同一边块
    边点
    设置角点编号如下图,相同编号表示为同一角块
    角点

    根据上图不难看出,不论边块还是角块位置,只需要四面就可以确定全部边块及角块位置,因此设置最小确定点如图
    最小确定点

    此间需要确定一点,魔方不论如何变换,其角块对于基本点相对位置是对应的,不可能出点所以基本点按照正确位置排列,但具体色块颜色位置出现问题

    基于此,我们设置魔方基本变换方法两种,边点变换和角点变换
    基本变换

    角点变换不存在什么问题,但是边点变换存在基本点变换的问题,由于我们设置基本数据结构基于基本点,因此基本点不能进行变换,故

    边点变换=左角变换+右角变换

    根据最小确定点,可以设置数据结构为一维数组或二维数组。
    根据基本变换方法,可以设置基本方法如下(不涉及基本点变换)
    Method turnRightClockwise()
    Method turnRightAnit()
    Method turnLeftClockwise()
    Method turnLeftAnit()
    Method turnTopClockwise()
    Method turnTopAnit()
    Method turnTBottomClockwise()
    Method turnTBottomAnit()
    Method turnOutsideClockwise()
    Method turnInsideClockwise()
    设置扩展方法如下(涉及基本点变换,转化为基本方法)
    Method turnTransverseClockwise()中心横向顺时针
    Method turnTransverseAnit()中心横向逆时针
    Method turnLongitudinalClockwise()中心纵向顺时针
    Method turnLongitudinalAnit()中心纵向逆时针

    可以设置值栈进行路径探索,接下来就是路径搜索问题,之后附上代码。

    展开全文
  • 算法数据结构 一:算法 1. 算法的几个特征是什么。 2. 算法复杂性的定义。大O、θ、Ω、小o分别表示的含义。 3. 递归算法的定义、递归算法的两要素。 4. 分治算法的思想,经典的分治算法(全排列...

    算法、数据结构


    一:算法


    1. 算法的几个特征是什么。

    2. 算法复杂性的定义。大O、θ、Ω、小o分别表示的含义。

    3. 递归算法的定义、递归算法的两要素。

    4. 分治算法的思想,经典的分治算法(全排列、二分搜索、归并排序、快速排序、线性时间选择、最接近点对问题)

    5. 动态规划算法解题框架,动态规划算法的两个要素是什么?备忘录方法是什么?

    6. 经典的动态规划问题(矩阵连乘问题、最长公共子序列问题、0-1背包问题)。

    7. 贪心算法的思想,贪心算法的两个要素。

    8. 经典的贪心问题(活动安排问题、背包问题、装载问题、哈夫曼编码、单源最短路径、最小生成树问题)。

    9. 回溯法的思想,回溯法中有哪两种典型的模型。

    10. 经典的回溯算法(n后问题、0-1背包问题、旅行售货商问题)。

    11. 分支限界法思想,有哪两种分支限界法。

    12. 经典的分支限界算法(0-1背包问题、旅行售货商问题)。


    二:数据结构


    1. 数据结构的定义。

    2. 栈的两个应用:括号匹配和表达式的计算。是怎么应用的?表达式计算用的是哪种表达方式?有什么好处?

    3. 字符串匹配算法:朴素的匹配算法、KMP算法

    4. 二叉树前序、中序、后序递归遍历算法。二叉树前序非递归遍历算法。

    5. ,建堆算法,堆的插入和删除算法,堆排序

    6. 哈希。哈希函数的有哪些种?余数的取法? 处理冲突的方法? 闭散列方法有哪些?

    7. 二叉搜索树的搜索、插入、删除。时间复杂度。

    8. 二叉平衡树的插入结点的原理,有哪几种旋转方式?分别适用于哪种情况。分析二叉平衡树的时间复杂度。

    9. 红黑树的定义,红黑树的性能分析和与二叉平衡树的比较

    10. 图有哪些储存表示。

    11. 链表插入排序、链表归并排序。

    12. 常见的有哪几种排序算法,试比较其时间复杂度,以及是否稳定,及各自使用的情形。

    13. 常用分配排序有哪几种? 基数排序的定义,分类及原理。

    14. B树、B+树、Trie的概念及用途,添加删除结点的原理。


    展开全文
  • 算法导论第九章开始的算法 同时查找最大值和最小值的算法。 本算法并不是直接拿数组中的元素来和最大值和最小值比较的,而是先比较数组中两个数组,然后那其中小的和最小值对比,其中大的和最大值对比,那么算法就...

    算法导论第九章开始的算法 同时查找最大值和最小值的算法。

    本算法并不是直接拿数组中的元素来和最大值和最小值比较的,而是先比较数组中两个数组,然后那其中小的和最小值对比,其中大的和最大值对比,那么算法就可以由原来需要对比2n次,降到只需要对比3n/2次了。

    对于一个无序查找最小值的算法一般都如下:

    template<typename T>
    T minimum(vector<T>& vt)
    {
    	T min = vt[0];
    	for(auto x: vt)
    	{
    		if (min >x)
    		min = x;
    	}
    	return min;
    }//The simple way to find a min.


    这就没什么优化的办法了,但是同时查找最大值和最小值就有办法优化了,程序如下:

    //Calculate minimum and maximum at the same time to optimize the algorithm
    #include<iostream>
    #include<vector>
    
    using namespace std;
    
    template<typename T>
    void minmaxComp(const T v1, const T v2, T& min, T& max)
    {
    	if(v1<=v2)
    	{
    		min = v1;
    		max = v2;
    	}
    	else
    	{
    		min = v2;
    		max = v1;
    	}
    }//辅助函数
    
    
    template<typename T1, typename T2>
    void myMinMax(typename T1 vt, T2& min, T2& max)
    {
    	//初始化min和max;
    	auto vtI = vt.begin();
    	minmaxComp(*vtI, *(vtI+1), min, max);
    
    	//如果元素为基数,则从第二个值开始
    	if(vt.size()%2 != 0)	vtI++;
    
    	for(; vtI != vt.end(); vtI+=2)
    	{
    		if(*vtI<=*(vtI+1))
    		{
    			if(*vtI<min)		min = *vtI;
    			if(*(vtI+1)>max)	max = *(vtI+1);
    		}
    		else
    		{
    			if(*(vtI+1)<min)	min = *(vtI+1);
    			if(*vtI>max)		max = *vtI;
    		}
    	}
    }//at most 3(n/2) comparisons
    
    
    void test()
    {
    	//初始化数组
    	double a[18] = 
    	{32., 12., 0.7, 5., 0.1, 0.7, 0.8,0.7, 99., 0.4, 1., 2.5, 3.6, 5., 9., 12., 19.,23.};
    	vector<double> vtd(a, a+18);
    
    	//前
    	for(int j=0; j<18; j++)
    	{
    		cout<<a[j]<<" ";
    	}
    	cout<<endl<<endl;
    
    	double myMin = 0;
    	double myMax = 0;
    
    	//调用函数
    	myMinMax(vtd, myMin, myMax);	
    	
    	//后
    	cout<<"Minimum is: "<<myMin<<"\nMaximum is: "<<myMax<<endl;
    }
    
    int main()
    {
    	test();
    	return 0;
    }
    


    总结:

    本算法还是挺巧妙的,算是introduction to algorithm 中比较容易的算法了。

    展开全文
  • 计算机基础什么的都不知道,像什么操作系统啊,计算机组成原理啊,还有什么数据结构算法,完全懵啊,咋整?“ 其实这些就是一个计算机基础知识的问题,那么这些不会,影响你学习编程吗?答案是不影响你开始学习编程...

    不知道大家在当初是一个什么都不懂的小白的时候会不会想一些下面这些问题:

    我不是科班的,转行的,计算机零基础,啥也不懂,学计算机可以吗?计算机基础什么的都不知道,像什么操作系统啊,计算机组成原理啊,还有什么数据结构和算法,完全懵啊,咋整?“

    其实这些就是一个计算机基础知识的问题,那么这些不会,影响你学习编程吗?答案是不影响你开始学习编程,但是影响你未来可以走多远,学多深!

    作为程序员,我们都清楚学习的重要性,毕竟时代在发展,互联网之下,稍有一些落后可能就会被淘汰掉,因此我们需要不断去审视自己,通过学习来让自己得到相应的提升。

    计算机基础该怎么学

    大部分人眼里的计算机基础就是计算机专业基础了,这对一个学编程的来说问题不大,但是对于那些真的是计算机小白的话,这些也显得有点专业了,但是无论你是学习Java还是Python,无论是前端还是后端,只要你是个程序员,敲代码的,搞编程的,这些知识都是你所需要的,就像前面说的,这是可以让你突破瓶颈,拓展知识上下限的一个东西。

    下面这位大佬总结的学习笔记可以说是可以手把手带你学习参考的。

    • 冯诺依晏体系结构与哈佛结构
    • 一个程序在计算机中是如何运行的?
    • CPU
    • 内存
    • 内存和磁盘
    • 二进制
    • 新建一个TXT, 会发生什么?
    • 编译和解释

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

     

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

     

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

     

    需要这份计算机基础学习笔记的话,点赞+评论后访问Github地址获取:传送门

    数据结构与算法

    不知道你们是什么样,反正我大学的时候数据结构与算法那是惨的一批,上课就是听天书,但是在后来的工作与学习中会要面对数据结构与算法。虽然一般用到数据结构与算法的时候真的蛮少的,但是面试的时候必考啊,一般人就是临时抱佛脚呗,大概率也能搞定面试.....但是对于这个大家都是短板的的地方也是你与其他开发的好兄弟拉开差距的地方,但是知识在于积累,学习需要耐心!很多人的学习数据结构与算法都是还没开始就结束了......(手动狗头)那么数据结构与算法到底怎么学?当然是站在巨人的肩膀上学!

    下面这份数据结构与算法学习指南,可能是最适合新手的了!

    • 数据结构与算法中的复杂度
    • 不一样的数组深入讲解
    • 轻轻松松学会栈和队列(附有顺序栈的实现思路分析)
    • 链表
    • 手写一个单链表
    • 哈希表
    • 数据结构之树
    • 二叉搜索树
    • 数据结构与算法必懂知识点

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

     

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

     

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

     

    需要这份计算机基础学习笔记的话,点赞+评论后访问Github地址获取:传送门

    操作系统

    操作系统这块在面试时也是经常被问到的点,下面我也是为大家整理出一些操作系统方面的面试题,大家可以查漏补缺一波。

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

    操作系统导图

    • 解释一下什么是操作系统
    • 解释一下操作系统的主要目的是什么
    • 操作系统的种类有哪些
    • 操作系统结构
    • 什么是按需分页
    • 多处理系统的优势
    • 什么是内核
    • 什么是实时系统
    • 什么是虚拟内存
    • 什么是进程和进程表
    • 什么是线程,线程和进程的区别
    • 使用多线程的好处是什么
    • 什么是RR 调度算法
    • 导致系统出现死锁的情况
    • RAID的不同级别
    • 什么是DMA
    • 多线程编程的好处是什么
    • 什么是设备驱动程序
    • 进程间的通信方式
    • 进程间状态模型
    • 调度算法都有哪些
    • 页面置换算法都有哪些
    • 影响调度程序的指标是什么
    • 什么是僵尸进程

    怎么样这些面试题大家是否都能答出来,不会没关系我也不会(狗头),不过我有学习文档,为了不影响大家的阅读体验,就不能将全部内容展示出来了。

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

     

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

     

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

     

    除了面试题当然还有基础知识点总结,点赞+评论后访问Github地址获取:传送门

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

     

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

     

    615页程序员进阶神笔记!计算机基础+OS+算法数据结构

     

    结语

    还是那句话,学习不会辜负任何人。我们作为程序员一般很少直接操控硬件,我们一般通过C、Java 等高级语言编写的程序起到间接控制硬件的作用。所以大家很少直接接触到硬件的指令,而硬件的控制是由Windows 操作系统全权负责的,操作系统也是我们程序员绕不过的一个坎。需要这份操作系统笔记以及上面的计算机基础+数据结构与算法笔记,关注小编支持一下,点赞+评论后访问Github地址获取:传送门

    展开全文
  • 数据结构算法

    千次阅读 多人点赞 2017-02-07 17:53:54
    数据结构算法
  • 数据结构算法书籍推荐

    万次阅读 多人点赞 2019-03-16 18:49:31
    学习数据结构算法,还是很有必要看几本相关的书籍,但根据不同基础的人,合适看的书也不一样,因此,针对不同层次、不同语言的人,推荐几本市面上口碑不错的书。 1. 入门级 针对刚入门的同学,建议不要急着去看...
  • 数据结构算法中的经典算法

    万次阅读 多人点赞 2018-07-19 21:47:12
    数据结构算法之经典算法 常见数据结构算法整理总结(上) 常见数据结构算法整理总结(下) 二、针对性参考 1) 排序 数据结构算法之经典排序 2)二叉树 数据结构算法之二叉树+遍历+哈夫曼树 ...
  • 通过“比较”找n个整数中最大数时,算法至少要做_次。 A、log n B、nlog n C、n-1 D、n
  • 数据结构算法:为什么要学习数据结构算法 数据结构算法到底是什么 数据结构数据结构指的是计算机中数据的组织形式,分为逻辑结构和物理结构两个维度。其中,逻辑结构是对数据组织形式在逻辑上的抽象,物理...
  • 使用java语言来实现数据结构中涉及到的算法,并针对每个算法搭配习题进行实现。
  • 数据结构算法绪论标签(空格分隔): 数据结构本节学习路线图与学习要点学习要点: 1.了解数据结构的相关概念 2.了解算法的相关概念 3.熟悉时间复杂度的计算 4.了解空间复杂度的概念,闰年表空间换时间的...
  • 这是《数据结构算法 Python 语言实现》 (古德里奇)版,每一章书后习题和解答,我已经买了这本书, 因为想在看完每一章后,完成习题,所以记录下来! 这篇文章是第一章的习题内容!因为题目太长,懒得自己书写,...
  • 数据结构核心原理与算法应用

    千人学习 2019-09-03 17:50:03
    数据结构”,编程者如果没有掌握数据结构算法,就说明没有真正掌握程序设计的能力,也就是不没有真正的学会编程。 从编程的角度来看,数据结构算法几乎是最朴素的基础知识了,这一关,是每一个立志当好程序员的...
  • 数据结构

    千次阅读 多人点赞 2018-10-06 17:40:36
    数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或者多种特定关系的数据元素集合。通常情况下,精心选择的数据...算法是为了解决问题而设计的,数据结构算法需要处理问题的载体。 ...
  • 数据结构》— 数据结构图文解析系列

    千次阅读 多人点赞 2017-08-11 11:54:52
    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 数据结构...
  • Java数据结构算法(一)——开篇

    万次阅读 多人点赞 2014-09-15 07:03:40
    看的是——《Java数据结构算法》一书,作者Robert Lafore。 目录 1)数据结构算法有什么用? 2)技术与通俗 3)驱动力学习 1)数据结构算法有什么用? 当你用着java里面的容器类很爽的时候,你有没有想过,怎么...
  • using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi.Models; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc;...
  • 微软等数据结构+算法面试100题全部答案集锦

    万次下载 热门讨论 2011-10-15 00:28:43
    一年之前的10月14日,一个名叫July 的人在一个叫csdn 的论坛上开帖分享微软等公司数据结构+算法 面试100题,自此,与上千网友一起做,一起思考,一起解答这些面试题目,最终成就了一个名为:结构之法 算法之道的编程...
  • 图解数据结构算法

    千人学习 2020-07-27 10:56:16
    【为什么学习数据结构算法】     程序=数据结构+算法数据结构算法是程序的基础,没有系统地学习过数据结构算法的程序员只能称作是coder,知道我们写的代码使用了什么数据结构,它的特征是什么。...
  • 数据结构排序算法系列】数据结构八大排序算法

    万次阅读 多人点赞 2016-03-25 22:36:40
    如Windows操作系统的文件管理中会自动对用户创建的文件按照一定的规则排序(这个规则用户可以自定义,默认按照文件名排序)因此熟练掌握各种排序算法是非常重要的,本博客将对数据结构中常见的八大排序算法进行详细...
  • 数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合用计算机存储、组织数据的方式。数据结构分别为逻辑结构、(存储)物理结构和数据的运算三个部分。 为什么要学数据结构? 首先,因为数据结构作为...
  • 算法数据结构

    千次阅读 2011-08-18 17:00:59
    算法数据结构 算法数据结构——千丝万缕的联系 纵观各种算法书籍,大多都是将算法数据结构作为一个整体来讲述。 数据结构就是数组、树结构等存储或表现对象数据的结构。 将算法数据结构作为整体讲述,是...
  • using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi.Models; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc;...
  • using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi.Models; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc;...
  • using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi.Models; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc;...
  • using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi.Models; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc;...
  • using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi.Models; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc;...
  • 书本下载链接:链接:https://pan.baidu.com/s/1jgVnbBZoLgA8pshpxbapOQ 密码...虽说数据结构以美国人Mark Allen Weiss 写的《数据结构算法分析——C语言实现》最好,但是我发现他的书让人很不容易理解,可能我们...
  • Java经典算法讲解

    万人学习 2015-05-01 04:13:33
    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。一个算法的好坏,直接影响一个方法调用的性能,进而影响软件的整体性能。算法...

空空如也

1 2 3 4 5 ... 20
收藏数 2,058,339
精华内容 823,335
关键字:

算法