[数据结构]一些常见的算法思想

1,分治思想
计算输入向量中任何连续子向量中的最大和。
[31,-41,59,26,-53,58,97,-93,-23,84]
直接算法:

[cpp] view plaincopy

  1. maxsofar=0
  2. for i = [0,n)
  3. sum = 0
  4. for j = [i, n)
  5. sum += x[j]
  6. maxsofar=max(maxsofar,sum)

分治思想:
将向量分解为两个子向量,求解每个向量最大和,或者最大值在子向量a和子向量b的边界处

[cpp] view plaincopy

  1. float maxsum3(l,u)
  2. if(l > u)
  3. return 0
  4. if(l == u)
  5. return max(0,x[1])
  6. m = (l + u)/2
  7. lmax = sum = 0
  8. for(i = m; i>=l;i--)
  9. sum += x[i]
  10. lmax=max(lmax,sum)
  11. rmax=sum=0
  12. for i = (m,u]
  13. sum+=x[i]
  14. rmax=max(rmax,sum)
  15. return max(lmax+rmax,maxsum3(l,m),maxsum3(m+1,u))

最初调用如下: answer=maxsum3(0,n-1)
将n向量分解为n-1和向量n

[cpp] view plaincopy

    1. maxsofar=0
    2. maxendinghere=0
    3. for i = [0,n)
    4. maxendinghere=max(maxendinghere+x[i],0)
    5. maxsofar=max(maxendinghere,maxsofar)
时间: 2024-08-24 21:37:42

[数据结构]一些常见的算法思想的相关文章

【转】常见面试之机器学习算法思想简单梳理

转:http://www.chinakdd.com/article-oyU85v018dQL0Iu.html 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大. 纵观IT行业的招聘岗位,机器学习之类的岗位还是挺少的,国内

机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

http://www.cnblogs.com/tornadomeet/p/3395593.html 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大.

常见面试之机器学习算法思想简单梳理

http://www.cnblogs.com/tornadomeet/p/3395593.html (转) 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大. 纵观IT行业的招聘岗位,机器学习之类的岗位还是挺少的,国内大

常见面试之机器学习算法思想简单梳理【转】

前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大. 纵观IT行业的招聘岗位,机器学习之类的岗位还是挺少的,国内大点的公司里百度,阿里,腾讯,网易,搜狐,华为(华为的岗位基本都是随机分配,机器学习等岗位基本面向的是博士)等

数据结构与算法 介绍以及常见的算法排序

介绍 数据结构: 计算机存储,组织数据的结构.指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 线性数据结构:数组,链表 应用:队列 栈 非线性数据结构:树,图 算法: 对数据结构中数据的操作 常见的算法排序 low B三件套 #冒泡排序 #时间复杂度:O(n2) #空间复杂度:O(1) def bubble_sort(li): for i in range(len(li)-1): flag = False for j in range(len(li)-i-1):

十种常见排序算法

1.常见算法分类 十种常见排序算法一般分为以下几种: (1)非线性时间比较类排序:交换类排序(快速排序和冒泡排序).插入类排序(简单插入排序和希尔排序).选择类排序(简单选择排序和堆排序).归并排序(二路归并排序和多路归并排序): (2)线性时间非比较类排序:计数排序.基数排序和桶排序. 总结: (1)在比较类排序中,归并排序号称最快,其次是快速排序和堆排序,两者不相伯仲,但是有一点需要注意,数据初始排序状态对堆排序不会产生太大的影响,而快速排序却恰恰相反. (2)线性时间非比较类排序一般要优于

基本算法思想

分治算法 一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关.问题的规模越小,越容易直接求解,解题所需的计算时间也越少.例如,对于n个元素的排序问题,当n=1时

Dremel: Interactive Analysis of Web-Scale Datasets 1~6节算法思想部分翻译

摘要: Dremel是一个具有可扩展性和交互性,专用于分析只读嵌套数据的查询系统.它本身对多级操作数和柱状数据布局的融合使它得以在秒级的反应时间内对有万亿数量级行记录的表进行集成语句查询.这个系统在谷歌包含数以千计的CPU和PT级的数据量,并有着上千名使用者.这篇论文中,我们将会介绍Dremel的体系结构以及其实现,并阐述它如何实现基于MapReduce的计算.我们将呈现一种全新的嵌套式数据柱状存储方式并通过一个基于几千节点的样例系统实验分析性能. 1.介绍: 大型数据分析性处理已经在互联网公司

几种常见排序算法的总结

下面总结几种常见的排序算法,包括插入排序.选择排序.快速排序.归并排序和堆排序. 时间复杂度: 插入排序 选择排序 快速排序 归并排序 堆排序 Ο(n2) Ο(n2) Ο(nlog(n)) Ο(nlog(n)) Ο(nlog(n)) 算法概述: 插入排序:每次从未排好序的数据堆中拿出一个数,插入到已排好序的数据队列的正确位置. 选择排序:每次从未排好序的数据堆中找到最小的数,插入到已排好序的数据队列的头部. 快速排序:以数据堆中的一个数为标准,将数据堆分为小于等于和大于该数的两堆,对于分割后的两