`
Megi
  • 浏览: 1127 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

开发过程中遇到的依据断号最小值插入新单据算法

阅读更多
  在做现在的这个产品的时候,碰到一个常见的单据插入场景。
场景描述如下:
   工厂里的一种单据,这种单据的单号(单号为字符串类型)生成须有如下的限制条件:
插入时按顺序插入,即单号生成为递增1。工人进行操作时,如遇到删除单据的情形,是随机的删除。在这时候,如果继续插入一条新单据,新单据单号满足的条件是,必须为整个单号序列中,最小连续完整序列的最大单号加1
例如:原单号序列为:1,2,3,4,5,6,7。
(1) 随机删除单号为4的单据,这个时候的序列号为1,2,3,5,6,7,如果此时插入新单据的话,最小完连续整序列为(1,2,3),新增单号为4。
(2) 随机删除3,5,7,此时的序列号为1,2,4,6,如果此时插入新单据,单号应为剩余单号的最小连续完整序列(1,2),新增单号为3。

问题其实很简单。
<1> 当然如果是很小规模的数据,完全可以直接用循环直接扫描到最小的断号。
     代码如下:
int minLackNum;
if (reslut.Count != max)
{
   for (int i = 0; i < reslut.Count; i++)
   {
     if (Convert.ToInt16(reslut[i][0], CultureInfo.CurrentCulture) != i + 1)
      {minLackNum = i; break;
      }
   }
}

<2>咱们的这个产品是服务于制造业的,所以里面涉及到的单据数量可能比较大,从性能角度考虑,这个地方可以设计一个比较好的算法,来降低一下复杂度。本人首先想到的变是二分查找法,利用二分查找法的衍生算法可以很快的找到断号中的最小号,这时需要插入的新单号就很容易算出。

伪码如下:
int max=20;
Array[] arr = new Array[max];
int left = 0;right = max-1;
while(left <= right){
int midd = (left+right)/2;
if(arr[midd]==midd+1){
left = midd+1;
continue;
}else if(arr[midd]==null || arr[midd] != midd+1){
right = midd -1;
continue;
}
}
return right+1;
具体C#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = new int[] {1,2,3,4,5,6,7,9,10,11,12};
            int left = 0;
            int right = arr.Length - 1;
            
            while (left <= right)
            {
                Console.WriteLine("*");
                int midd = (left + right) / 2;
                if (arr[midd] == midd + 1)
                {
                    left = midd + 1;
                    continue;
                }
                else if (arr[midd] != midd + 1)
                {
                    right = midd - 1;
                    continue;
                }
                Console.WriteLine("*");
            }
            Console.Write(right + 2);
            Console.ReadKey();
        }
    }
}


相信这个算法基本能解决在生产中碰到的同一类问题了,不过有没有更简单的,不需要代码的方法呢?以下给出第三种解决方法,这种方法不需要代码,只用SQL就行。

<3> 给出表结构。表A,只有一个字段A_ID,nchar类型。A_ID为不连续升序列。
   
Select MIN(A_NID) from  (Select CAST(A_ID AS Int)+1 as A_NID from A) as B where A_NID not in (select A_ID from A);

使用上述SQL,可以直接求出所需单号!

以上为本人碰到这个问题的一点心得,还望各位多多指教~

0
1
分享到:
评论

相关推荐

    遗传算法GA求函数最小值

    在寻找函数最小值的过程中,遗传算法通过不断迭代,逐渐逼近最优解。选择、交叉和变异操作的巧妙结合,使得算法能够在复杂函数的搜索空间中探索并优化解决方案。 四、案例分析 在“计算智能函数最小值”这个案例中...

    利用遗传算法求函数最小值-实例验证

    在本例中,“利用遗传算法求函数最小值”是一个典型的优化问题,通常应用于数学建模、工程设计等领域。 `Sheffield的遗传算法工具箱` 是一个专门用于实现遗传算法的MATLAB工具包,可能包含了各种遗传算法的基本操作...

    粒子群算法计算二元函数的最小值

    在每一代迭代过程中,粒子会依据自身经验和群体经验调整速度,进而更新位置。 在实现过程中,我们需要定义以下参数: 1. 粒子数量:决定群体的规模,更多粒子能更全面地探索搜索空间。 2. 最大迭代次数:算法执行的...

    matlab开发-计算函数遗传算法的最小值

    微积分在寻找函数最小值中的作用主要体现在以下几个方面: 1. **导数测试**:通过对目标函数求导,我们可以找到可能的极值点。如果导数在某点为零,那么该点可能是函数的极大值或极小值。 2. **二阶导数判别法**:...

    用遗传算法求解Rastrigin函数的最小值问题

    遗传算法是一种模拟自然选择和遗传机制的全局优化方法,它通过模拟生物进化过程中的适者生存和遗传变异,逐步逼近问题的最优解。 首先,我们来看遗传算法的基本流程。遗传算法通常包括初始化种群(initpop.m)、...

    使用模拟退火算法求函数的最小值

    实验中可能会遇到的挑战包括如何选择合适的参数组合、如何优化算法以减少计算时间、以及如何确保在复杂函数中找到真正的全局最小值。需要注意的是,模拟退火算法并不能保证总是找到全局最优解,但可以通过调整参数...

    最小值算法

    为了确保生成的知识点内容丰富且详细,我们将分别从最小值算法的原理、C语言实现逻辑以及代码片段中潜在的完整算法进行详细阐述。 首先,关于最小值算法的概念,它是计算机科学和数值分析中一个基础而广泛使用的...

    蚁群算法求最小值

    利用智能算法之一的蚁群算法求最小值的MATLAB实现

    自适应遗传算法 求解函数最小值(Matlab程序)

    自适应遗传算法是一种基于生物进化理论的全局优化方法,它在搜索最优解的过程中具有较强的探索性和鲁棒性。在Matlab环境下,自适应遗传算法被广泛应用于解决各种复杂的非线性优化问题,如函数最小值的求解。下面将...

    使用遗传算法解决ackley函数的最小值

    在C++编程语言中实现遗传算法求解 Ackley 函数最小值的过程包括以下关键步骤: 1. 初始化种群:随机生成一定数量(种群大小)的个体,每个个体代表一个可能的解决方案,其基因编码为一组数值向量,对应 Ackley 函数...

    python+遗传算法求解Ackley函数最小值问题

    计算智能大作业,帮你们到这里了

    matlab遗传算法求二元函数最小值.zip

    在本项目中,我们利用MATLAB来实现一个遗传算法,以寻找给定二元函数f(x1,x2)=x1^2+x2^2的最大值。遗传算法是一种模拟自然选择和遗传学原理的优化方法,它能有效地解决复杂的全局优化问题。在这个案例中,我们关注的...

    粒子群优化算法求解函数最大值和最小值问题

    在实际应用中,为了提高PSO算法的性能,常常会进行一些改进,比如引入惯性权重、自适应学习因子、混沌操作、遗传操作等,以平衡探索和开发的能力,增强算法的全局搜索能力。 在这个特定的案例中,提供的文件可能...

    萤火虫算法求解目标函数最小值,萤火虫算法求解目标函数极值,FA萤火虫算法寻优

    MATALB编程实现,用FA萤火虫算法进行目标函数寻优,求解目标函数最小值,代码详细注释,可以运行

    遗传算法求最小值

    遗传算法是一种模拟自然界生物进化过程的优化算法,广泛应用于寻找复杂问题的全局最优解,包括在数学函数最小化中的应用。在这个场景中,"遗传算法求最小值"指的是利用遗传算法来找到某个数学函数的最小值。这个...

    模拟退火算法优化粒子群算法求解目标函数最小值,模拟退火算法优化粒子群算法求解测试函数

    在本文中,我们将深入探讨如何使用MATLAB编程实现模拟退火算法(SA)优化粒子群算法(PSO)来寻找目标函数的最小值。首先,我们要理解这两种算法的基本原理。 **模拟退火算法(Simulated Annealing Algorithm, SA)...

    【单目标优化求解】基于matlab遗传算法求解非线性目标函数最小值问题【含Matlab源码 1574期】.zip

    在本资源中,我们关注的是使用MATLAB进行单目标优化问题的解决,特别是利用遗传算法来寻找非线性目标函数的最小值。遗传算法是一种基于自然选择和遗传原理的全局优化方法,它模拟了生物进化过程中的适应度、交叉和...

    遗传算法求最小值(matlab源代码和实验报告)

    这种算法模拟了自然选择、基因重组和突变等生物学过程,寻找问题空间中的最优解。在本案例中,我们将探讨如何使用MATLAB实现遗传算法来求解最大值和最小值问题。 ### 一、遗传算法基本概念 1. **种群(Population...

    新的全局—局部最优最小值粒子群优化算法.pdf

    吴琳丽等人在全局—局部最优粒子群优化算法(Global-Local Best Particle Swarm Optimization, GLBest-PSO)的基础上提出了一种新的改进算法——全局—局部最优最小值粒子群优化算法(Global-Local Best Minimum ...

    遗传算法求解函数最小值问题及改进-自编程matlab代码.rar

    通过编写MATLAB代码,我们可以直观地理解和调试算法过程,同时利用MATLAB的内置函数加速计算。在运行这个代码时,用户需要定义目标函数、定义域范围以及遗传算法的参数,如种群大小、交叉概率、变异概率等,然后程序...

Global site tag (gtag.js) - Google Analytics