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

最小序列问题

阅读更多

由于工作安排的原因,可能暂时不会再学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,...

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

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

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

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

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

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

    动态规划划分最小和

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

    svm_序列最小优化算法

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

    m序列与Gold序列比较.pdf

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

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

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

    【时间序列预测】基于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, ...

    数据挖掘之序列模式挖掘之GSP算法

    3. **修剪阶段**:根据共享阶段得到的支持度,删除那些不满足最小支持度阈值的序列模式,以降低内存需求和提高效率。 在实际应用中,GSP算法可以用于多种场景,如市场篮子分析,其中我们寻找顾客购买商品的常见序列...

Global site tag (gtag.js) - Google Analytics