python使用分治法找序列最大值

最近上算法导论课,说道分治法,回来想用python写写程序练练手,于是模仿一通写了如下的代码:

__author__ = ‘day‘

def ArrayMaxMin(Array):
    return max(Array)
def Sort(init_Array):
    if len(init_Array) <= 2:
        print (ArrayMaxMin(init_Array))
    else:
        init_Array=[init_Array[i:i+2] for i in range(0,len(init_Array),2)]
        max_init_Array=[]
        for Array in init_Array:
            max_init_Array.append(ArrayMaxMin(Array))
        Sort(max_init_Array)

if __name__ == ‘__main__‘:
    Array = [2,5,5,3,6,37,7,8]
    Sort(Array)

方法实现了,可是现在问题来了。直接用max内建函数不是直接就解决问题了吗,为什么要使用分治法呢??

时间: 2024-11-06 11:46:30

python使用分治法找序列最大值的相关文章

python实现分治法排序

# -*- coding: utf-8 -*- """ Created on Wed May 14 16:14:50 2014 @author: lifeix """ def merge(a, start, mid, end): if start == end: return a if mid == 0: return a temp1 = a[start:mid] m1 = len(temp1)/2 print temp1,'----',m1 n

数据结构与算法分析——分治法

#include<stdio.h> int bigger(int a,int b) { return (a>b?a:b); } int max(int a,int b,int c) { return bigger(a,bigger(b,c)); } int maxsubsequencesum(const int A[],int left,int right) { int maxleftsum,maxrightsum; int maxleftbordersum,maxrightborder

分治法求数组的最大值最小值

实现求数组的最大值最小值,蛮力法要容易的多.本着重在体验分治法的思想的原则: 1 int main(void) 2 { 3 void Maxmin(int a[],int low,int high,int maxmin[2]); 4 int a[10],maxmin[2]; 5 6 printf("Enter 10 integer numbers:\n"); 7 for(int i=0;i<10;i++) 8 scanf("%d",a+i); 9 10 Max

用分治法解决最近点对问题:python实现

最近点对问题:给定平面上n个点,找其中的一对点,使得在n个点的所有点对中,该点对的距离最小.需要说明的是理论上最近点对并不止一对,但是无论是寻找全部还是仅寻找其中之一,其原理没有区别,仅需略作改造即可.本文提供的算法仅寻找其中一对. 解决最近点对问题最简单的方法就是穷举法,这样时间复杂度是平方级,可以说是最坏的策略.如果使用分治法,其时间复杂度就是线性对数级,这样大大提高了效率. 首先用分治法解决该问题的基本思路可以参考 http://blog.csdn.net/lishuhuakai/arti

分治法计算最大字数组(Python)

比如你获得了一个投资某个股票的机会,并且,你已经准确知道了将来几天这一只股票的相对于前一天的插值,比如为[13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7],那么就有一个问题,从那一天买入,哪一天卖出获益最大?这里就是一个最大字数组问题. 最大字数组问题:在一个数组中找出最大的非空连续子数组 常见方法,暴力求解找出所有的组合,共有C(n,2)种选择,时间复杂度Theta(n^2) 分治法求解最大字数组问题,计算复杂度theta(nlogn) 分

基于分治法的找秩(maxium rank finding)策略

rank finding 问题的概述如下: 在一群离散的点中,检查对于每个点,是否有x值和y值都小于它的点,若有,则该点的秩为这些小于它的点的数量. 分治法思想: 以界面上所有点中x值的中位数为基准,递归地把目标区域分成两部分,直到每个区域中的点在一个以下,对于每一个细小的区域,检查其left child区域中的点的y值和right child区域中的点的y值,以对right child中的点的秩进行统计. 该方法通过分治排除了水平位置不符合标准的点,有效的减少了统计次数. 代码示例如下: #i

专题:分治法

分治法(Divide and Conquer) 作为五大算法之一的分治法,可算是最早接触的一种算法.分治法,与其说是一种算法,不如将其称为策略来的更贴切一些.算法的思想就是将大问题分成小问题,并解决小问题之后合并起来生成大问题的解. 分治法的精髓: 分--将问题分解为规模更小的子问题: 治--将这些规模更小的子问题逐个击破: 合--将已解决的子问题合并,最终得出“母”问题的解: 分治法的作用,自然是让程序更加快速地处理问题.比如一个n的问题分解成两个n/2的问题,并由两个人来完成,效率就会快一些

查找最大和次大元素(JAVA版)(分治法)

问题描述:对于给定的含有n个元素的无序序列,求这个序列中最大和次大的两个不同元素. 问题求解分析(分治法):先给出无序序列数组a[low...high].第一种情况为当数组中只有一个元素时,此时只存在一个最大值即为本身,次大值为负无穷,在这里我设置为-999999,第二种情况为数组中只有两个元素,此时最大值和次大值很显然将两个元素比较即可.第三种情况为数组中的元素大于两个,此时用分治法,将数组中元素砍为两半,像我们将香肠折半,注意的是此时中间的点归为前半部分,接着我们对前半部分再次进行判断三种情

分治法-最近距离问题Java实现

分治算法,有很多典型的问题,如最近点问题.线性选择问题.整数划分问题.大整数成绩问题.棋盘覆盖问题.循环赛日程表.二分搜索.Strassen矩阵乘法.汉诺塔等.准备花些时间逐个解决这些问题,并用Java实现,从最近点问题开始.网上找到一些代码,标题如"java 用蛮力法和分治法求解最近对有关问题",虽然体现了分治,但划分不够彻底,因此我重新对其进行了实现. 一.基本思想及策略: 首先,说说分治的思想.分治, "分而治之",就是把一个复杂的问题分成两个或更多的相同或相