算法导论——基础知识(1)

算法定义:

描述一个特定的计算过程来实现输入输出关系

ps:通俗的说就是对给定的输入数据进行计算,得到一个正确的输出、

既然是一个过程吗,那么有效率问题,比如我们算1..n的和,

我们可以这样

sum = 1+2+..+n

也可以这样

sum = n(1+n)/2

实际表现为时间复杂度和空间复杂度

数据结构:

存储、组织数据的方式

ps:比如说一个学生,ta有学号、姓名等属性,那么我们可以这样定义一个学生类别

Student
{
    name
    number
}

 

ps:书中说道的NP问题,贴上一个连接P/NP/NPC

 

by 2015-07-08 23:16:19

时间: 2024-11-05 21:30:57

算法导论——基础知识(1)的相关文章

算法导论基础(第一~五章)

插入排序 最好情况输入数组开始时候就是满足要求的排好序的,时间代价为θ(n): 最坏情况输入数组是按逆序排序的,时间代价为θ(n^2). 归并排序 归并排序采用了算法设计中的分治法,分治法的思想是将原问题分解成n个规模较小而结构与原问题相似的小问题,递归的解决这些子问题,然后再去合并其结果,得到原问题的解. 分治模式在每一层递归上有三个步骤: 分解(divide):将原问题分解成一系列子问题. 解决(conquer):递归地解答各子问题,若子问题足够小,则直接求解. 合并(combine):将子

数据结构和算法一(基础知识)

一.数据结构与算法基础知识 从广义上讲,数据结构就是指一组数据的存储结构.算法就是操作数据的一组方法. 从狭义上讲,就是指某些著名的数据结构和算法,比如队列.栈.堆.二分查找.动态规划等. 数据结构和算法是相辅相成的,数据结构为算法服务,算法要作用在特定的数据结构之上. 数据结构思维导图 基础数据结构:数组.链表.栈.队列.散列表.二叉树.堆.跳表.图.Trie树 基础算法:地柜.排序.二分查找.搜索.哈希算法.贪心算法.分治算法.回溯算法.动态规划.字符串匹配算法 二.时间复杂度和空间复杂度

数据结构(一)之基础知识

学习数据结构主要源于以下原因: 在工作中我是用meteor在做项目,前后台都要写,服务端是用的node.之前有和同事做过一个邮箱功能,性能测试时并发量一高就发送失败.我认为处理并发量的问题应该需要数据结构与算法和设计模式这三点来优化.这是往大了说,细说就是工作中,功能每次都是加班超快赶,在多人合作下,如果代码结构与逻辑混乱,后期维护困难,功能不好扩展.由于我们组都是前端人员接下这个项目,对于数据库的设计经验缺乏,才一再出现性能问题,所以我认为学习数据结构与算法尤为重要.本人也是正在学习中,有问题

《计算机科学导论》之数据结构基础知识

<计算机科学导论(第二版)>  11章   数据结构 11.1  引言  1.为什么要使用数据结构? 尽管单变量在程序设计语言中被大量使用,但是它们不能有效地解决复杂问题.此时考虑使用数据结构. 2.数据结构是什么? 数据结构是相互之间存在一种或多种特定关系的数据元素的集合. 3.三种数据结构 数组: 记录; 链表: 大多的编程语言都隐式实现了前两种,而第三种则通过指针和记录来模拟. 11.2  数组 1.为什么使用数组? 为了处理大量的数据,需要一个数据结构,如数组.当然还有其他的数据结构.

[算法学习笔记]算法基础知识

算法基础知识 算法的五大要素 有穷性:算法必须能够在有限个步骤内完成. 确定性:算法的每一步必须有确定的定义. 输入 输出 可行性:算法的每个步骤都必须能分解为基本的可执行操作,每个步骤都必须能在有限时间内完成 循环不变式 循环中的循环不变式可以帮助我们理解算法的正确性.为了证明算法的正确,必须证明循环不变式的三个性质: 1. 初始化:循环不变式在循环开始之前是正确的. 2. 保持:循环不变式在循环的每一次迭代开始之前是正确的. 3. 终止:在循环结束时,不变式会给出一个可以对判断算法是否正确有

Levenberg-Marquardt算法基础知识

Levenberg-Marquardt算法基础知识 (2013-01-07 16:56:17) 转载▼ 什么是最优化?Levenberg-Marquardt算法是最优化算法中的一种.最优化是寻找使得函数值最小的参数向量.它的应用领域非常广泛,如:经济学.管理优化.网络分析.最优设计.机械或电子设计等等.根据求导数的方法,可分为2大类.第一类,若f具有解析函数形式,知道x后求导数速度快.第二类,使用数值差分来求导数.根据使用模型不同,分为非约束最优化.约束最优化.最小二乘最优化. 什么是Leven

重读算法导论之算法基础

重读算法导论之算法基础 插入排序 ? 对于少量数据的一种有效算法.原理: 整个过程中将数组中的元素分为两部分,已排序部分A和未排序部分B 插入过程中,从未排序部分B取一个值插入已排序的部分A 插入的过程采用的方式为: 依次从A中下标最大的元素开始和B中取出的元素进行对比,如果此时该元素与B中取出来的元素大小关系与期望不符,则将A中元素依次向右移动 ? 具体代码如下: public static void insertionSort(int[] arr) { // 数组为空或者只有一个元素的时候不

算法——基础知识

算法--基础知识 1.什么是算法? 答:算法(Algorithm):一个计算过程,解决问题的方法. 程序 =  数据结构 + 算法 2.时间复杂度(三连图) 时间复杂度小结: 1.时间复杂度是用来估计算法运行时间的一个式子(单位). 2.一般来说,时间复杂度高的算法比复杂度低的算法慢 3.常见的时间复杂度(按效率排序) -  O(1)  < O(logn) <O(n) < O(nlogn) <O(n2) <(n2logn) <O(n3) 4.不常见的时间复杂度 O(n!

学习算法你必须知道的一些基础知识(文末福利)

点击标题下「异步社区」可快速关注 机器学习是解决很多文本任务的基本工具,本文自然会花不少篇幅来介绍机器学习.要想搞明白什么是机器学习,一定要知道一些概率论和信息论的基本知识,本文就简单回顾一下这些知识. 1.1 概率论 概率就是描述一个事件发生的可能性.我们生活中绝大多数事件都是不确定的,每一件事情的发生都有一定的概率(确定的事件就是其概率为100%而已).天气预报说明天有雨,那么它也只是说明天下雨的概率很大.再比如掷骰子,我把一个骰子掷出去,问某一个面朝上的概率是多少?在骰子没有做任何手脚的情