`
lanqiu17
  • 浏览: 17665 次
社区版块
存档分类
最新评论

最小序列问题

阅读更多

由于工作安排的原因,可能暂时不会再学python了。因此有关python的文章,这可能是最后一篇(目前)。但我会继续更新其他的东西。
这篇关于最小序列的问题。我目前知道的就两种方法,一种就是穷举,这种就是我这种吊丝程序员常用的方法。方法很有效,但遇到数据很大的时候,性能就很差。或者对时间复杂度有要求的话,再使用这种方法就行不通了。我这里使用的是下面一种方法。是通过建堆的方式。这种方式会牺牲一点内存空间。但性能很好。具体的就不说了。 看代码吧

 

# -*- coding: cp936 -*-
#---------------------------------------------
#                                            -
#author  chile                                    -
#version   1.0                                  -
#since                                       -
#date  2014-02-27                                      -
#desc  最小序列                                    -
#                                            -
#                                            -
#                                            -
#---------------------------------------------

def mink(srcArr,mink):
    minArr = initSerial(srcArr,mink) #初始化目标数组
    minArr = buildHeap(minArr) #将目标数组键最大堆
    index = mink
    step = 1;
    while(index < len(srcArr)):
        print '构造步骤 ', step , ': ',minArr 
        if srcArr[index] < minArr[0]: #当前堆与原数组中后面的数比较 
            minArr[0] = srcArr[index] #如果存在比当前堆中小的数,则替换
            minArr = maxHeap(minArr,1,mink) #在重新键最大堆
        index += 1
        step += 1
        
    return minArr

#键最大堆
def buildHeap(minArr):
    heapsize = len(minArr)
    index = heapsize / 2;
    while(index > 0):
        temp = maxHeap(minArr,index,heapsize)
        minArr = temp
        index -= 1
    return minArr

#调整堆大小
def maxHeap(minArr,i, heapsize): 
    largest , left , right = i , 2 * i , 2 * i + 1
    if left <= heapsize and minArr[i - 1] < minArr[left - 1]:
        largest = left
    if right <= heapsize and minArr[largest - 1] < minArr[right - 1]:
        largest = right
    if largest != i:
        temp = minArr[i - 1]
        minArr[i - 1] = minArr[largest - 1]
        minArr[largest - 1] = temp
        maxHeap(minArr,largest,heapsize)
    return minArr
        
def initSerial(srcArr,k):
    minArr = []
    index = 0;
    for val in srcArr:
        if index == k:
            return minArr
        minArr.append(val)
        index += 1
    return minArr

srcArr = [4, 7, 8, 6, 10, 14, 16 ,5, 3, 1, 2]
mixK = 4
print '原序列:  ',srcArr
minArr = mink(srcArr,mixK)
print '最小序列:',minArr

 

0
0
分享到:
评论

相关推荐

    最小序列算法及多核学习

    最小序列算法(Sequential Minimal Optimization, SMO)是支持向量机(Support Vector Machine, SVM)的一种高效优化算法,由John Platt在1998年提出。SVM是一种监督学习模型,广泛应用于分类和回归问题,尤其在处理...

    动态规划划分最小和 连续子序列

    把一个包含n个正整数的序列划分成m个连续的子序列,每个整数刚好属于一个序列。设第i个序列的各数之和是S(i)。要求:让所有的S(i)的最大值尽量小。例如:序列1,2,3,2,5,4划分成3个序列的最优方案为123|25|4,...

    分治法求解序列最大最小元素【算法设计与分析】

    在“分治法求解序列最大最小元素”的问题中,我们将探讨如何利用这种策略找到一个序列中的最大值和最小值。 首先,分解阶段,我们需要将给定的序列分割成两个或更多的子序列,每个子序列大约包含原序列的一半元素。...

    基于Java语言的最小长度加法生成序列算法优化.pdf

    文章首先介绍了贪心算法的概念和特点,然后对最小长度加法生成序列问题进行了定义和分析。接着,文章讨论了贪心算法在解决最小长度加法生成序列问题中的应用,并提出了基于Java语言的解决方案。 关键词:贪心算法、...

    Minimal m Sums 给定n 个整数组成的序列,现在要求将序列分割为m 段,每段子序列中的数在原序列中连续排列。如何分割才能使这m段子序列的和的最大值达到最小?

    - 目标是最小化这些子序列的和的最大值。 #### 输入输出格式 **输入**: - 第一行包含两个整数 n 和 m,分别表示序列的长度和分割的段数。 - 第二行包含 n 个整数,表示序列中的元素。 **输出**: - 输出一行,包含...

    动态规划划分最小和

    本问题要求将一个由`n`个正整数组成的序列划分为`m`个连续的子序列,且每个整数恰好属于一个子序列。定义`S(i)`为第`i`个子序列中的整数之和。目标是最小化所有`S(i)`的最大值。 **示例说明**: 假设有一个序列`1,...

    svm_序列最小优化算法

    为了解决这一问题,提出了序列最小优化算法(Sequential Minimal Optimization, SMO)。SMO是一种用于训练SVM的高效算法,它将原始的二次规划问题分解成一系列简单的子问题来求解,每个子问题都只涉及两个变量的更新...

    动态规划划分最小和_把一个包含n个正整数的序列划分成m个连续的子序列,每个整数刚好属于一个序列。设-专业指导代码类资源

    把一个包含n个正整数的序列划分成m个连续的子序列,每个整数刚好属于一个序列。设第i个序列的各数之和是S(i)。要求:让所有的S(i)的最大值尽量小。例如:序列1,2,3,2,5,4划分成3个序列的最优方案为123|25|4,...

    m序列与Gold序列比较.pdf

    - **周期**:Gold序列的周期通常是两个m序列周期的最小公倍数。 - **相关性**:Gold序列的互相关性通常优于单一的m序列,从而降低了多址干扰的可能性。 - **地址数**:通过组合不同的m序列,可以生成大量的Gold序列...

    【时间序列预测】基于matlab最小均方(LMS)算法时间序列预测【含Matlab源码 1335期】.zip

    在这个项目中,我们将关注一种基于最小均方(LMS)算法的时间序列预测方法,该方法利用了MATLAB编程环境来实现。MATLAB是数学计算和数据分析的强大工具,它提供了丰富的库函数和优化工具,使得复杂算法的实现变得...

    最长公共子序列问题最长公共子序列问题

    在这个问题中,序列最小化优化算法是一种解决复杂度较高的问题的有效手段,通过动态规划将问题分解为更小的子问题,降低计算复杂度,从而找到最优解。在实际应用中,LCS问题常用于生物信息学中的DNA序列比对、文本...

    数据与算法——实验报告——数列递增子序列

    这篇实验报告主要探讨了在数据与算法领域...总的来说,这个实验报告详细展示了如何运用动态规划解决最长递增子序列问题,同时指出在实际操作中可能出现的挑战和改进方向,为读者提供了深入理解动态规划算法的一个实例。

    1. 科普特序列和格雷码序列_格雷差分序列_科普特序列和格雷码序列_

    科普特序列和格雷码序列在信息技术领域中扮演着重要的角色,特别是在数字信号处理、通信系统和编码理论中。这两种序列都有独特的性质,...通过学习和掌握这两种序列,我们可以更好地理解和利用它们在实际问题中的潜力。

    最小公共序列

    可稳定处理至多10k大小的文件间的对比。最小公共序列. 使用了三种方法实现

    最长子序列什么是最长递增子序列呢

    1. 使用数组 \( c \) 来存储最长递增子序列的“最小尾”值,即对于长度为 \( i \) 的最长递增子序列,数组 \( c \) 的第 \( i \) 个元素存储的是所有长度为 \( i \) 的递增子序列中的最小尾元素。 2. 使用二分查找来...

    c# 序列与反序列

    二进制序列化则可以创建最小化的、平台特定的文件,但可能不那么易于跨平台。 `ThSerializer.cs`文件很可能包含一个自定义的序列化类,它可能针对特定的需求进行了优化,比如性能、可读性或自定义格式。在自定义...

    计算机算法分析与设计最大连续子序列

    最大连续子序列问题的描述是:给定 K 个整数的序列 { N1, N2, ..., NK },其任意连续子序列可表示为 { Ni, Ni+1, ..., Nj },其中 1 。最大连续子序列是所有连续子序列中元素和最大的一个。 例如,给定序列 { -2, ...

Global site tag (gtag.js) - Google Analytics