`
aa8945163
  • 浏览: 275265 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个剩余算法的分析

阅读更多
在博客园上看到一个小牛发啦一个剩余算法的分析:
    一个婚宴,安排来客,5个人一桌剩余4人,7个人一桌剩6桌,9个人一桌剩余8人,11个人一桌正好,当时看到那个哥们又是剩余算法又是加密算法的,最后抽象出一个算法,如下:
import junit.framework.TestCase;


public class ShareTest1  extends TestCase {
  /** *//**
     * Return the greatest common divisor.
     */
    public static long gcd( long a, long b )
   {
        if( b == 0 )
           return a;
        else
            return gcd( b, a % b );
    }

      // Internal variables for fullGcd
    private static long x;
    private static long y;

   /** *//**
     * Works back through Euclid's algorithm to find
     * x and y such that if gcd(a,b) = 1,
     * ax + by = 1.
     */
    private static void fullGcd( long a, long b )
    {
        long x1, y1;

        if( b == 0 )
        {
            x = 1;
            y = 0;
        }
        else
        {
            fullGcd( b, a % b );
            x1 = x; y1 = y;
            x = y1;
            y = x1 - ( a / b ) * y1;
        }
    }

    /** *//**
    * Solve ax == 1 (mod n), assuming gcd( a, n ) = 1.
     * @return x.
     */
    public static long inverse( long a, long n )
    {
        fullGcd( a, n );
        return x > 0 ? x : x + n;
    }

    public static long china(long[] n, long[] a) {
        // TODO Auto-generated method stub
       long n_total = 1L;
        final int len = n.length;
        for(int i=0;i<len;i++){
            n_total *= n[i];
        }
       
        long []m = new long[len];
        for(int i=0;i<len;i++){
            m[i] = n_total / n[i];
        }
       
        long []c = new long[len];
        for(int i=0;i<len;i++){
            c[i] = m[i] * inverse(m[i],n[i]);
        }
       
        long a_total = 0L;
        for(int i=0;i<len;i++){
            a_total += (a[i]*c[i]) % n_total;
        }
        a_total %= n_total;
        return a_total;
    }

      
    /** *//**
     * @param args
     */
    public void test() {
        // TODO Auto-generated method stub
        long n[] = {5,7,9,11};
        long a[] = {4,6,8,0};
        //long n[] = {3,5,7};
        //long a[] = {2,3,2};
        System.out.println(china(n,a));
    }

}

我用单元测试一下使用时间:
[img]Finished after 0.005 seconds[/img]

我的算法不会,但是我也是软件工程出生的,略有稍懂,就自己写啦几句实现:
import junit.framework.TestCase;


public class ShareTest extends TestCase{
public void test() {
System.out.println(Long.MAX_VALUE);
for(int i=0;i<Long.MAX_VALUE;i++){
if(i%5==4 && i%7==6 && i%9==8 && i%11==0){
System.out.println("The number is :" + i);
break;
}
}
}
}

我用单元测试一下使用时间:
[img]Finished after 0.005 seconds[/img]
得出的结果竟然惊人的一样,不知道是他分析的算法有问题,还是现在java虚拟机进行拉算法的优化,他在哪撤啦半天的算法,也没有看到效率,哈哈......
分享到:
评论

相关推荐

    算法分析论文

    算法分析论文 本资源摘要信息涵盖了算法分析的基本概念和理论,特别是分支定界算法的原理和实现。通过对算法分析的研究,可以帮助读者更好地理解算法设计和优化的过程,并掌握解决实际问题的能力。 分支定界算法 ...

    算法分析试题答案

    "算法分析试题答案" 在这篇试题答案中,我们可以学到许多关于算法分析的知识点,下面我们将逐一对其进行解释。 首先,第一个问题是关于二分搜索算法的实现策略,该算法是利用分治策略来实现的。这意味着,二分搜索...

    算法分析与设计KMP算法字符串改进

    《算法分析与设计:KMP算法的字符串匹配优化》 KMP算法,全称为Knuth-Morris-Pratt算法,是计算机科学中一种用于字符串匹配的高效算法。它避免了在进行比较时出现的不必要的回溯,从而显著提高了匹配效率。在给定的...

    算法设计与分析习题答案 .pdf

    回溯算法通过探索所有可能的候选解来找出所有解,如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会丢弃该解,即“回溯”并且在剩余的解空间中继续寻找。回溯算法适合解决约束满足问题,例如八皇后...

    最短剩余时间优先算法(SRTF)C语言代码 简洁明了,初学者都可以看得懂!

    同时,需要一个变量来跟踪当前时间,以及一个变量来记录正在运行的进程。 通过这种方式,初学者不仅能理解SRTF算法的基本原理,还能实际操作,看到算法如何在不同进程组合下工作。这样的实践项目对于学习操作系统...

    算法设计与分析的经典问题

    给定一个棋盘和棋子,求出从一个位置移动到另一个位置的所有可能路径。 **解决方案**: 可以使用广度优先搜索算法或者深度优先搜索算法解决。根据棋子的具体移动规则进行搜索。 --- #### 题目19:求集合元素问题...

    论文研究-高效求解三维装箱问题的剩余空间最优化算法.pdf

    为实现三维装箱问题的高效求解,提出了一个三维的剩余空间最优化算法(Three-Dimensional Residual-Space-Optimized Algorithm,3D-RSO)。在满足3个著名约束的条件下,该算法将三维问题转化为带有高度约束的二维...

    acm 扩展欧几里德算法与中国剩余定理ppt教程 acmer教程系列

    其原理基于扩展欧几里德算法,即可以将每个方程转化为一个扩展欧几里德算法问题,然后通过递归的方式求出最终的解。 在实际应用中,扩展欧几里德算法和中国剩余定理广泛应用于密码学、加密算法、数据分析等领域。 ...

    100个经典C语言算法分析

    ### 100个经典C语言算法分析 #### 绘制余弦曲线 **知识点概述:** 本例通过使用C语言编程技术来绘制0至360度的余弦曲线,利用字符“*”在控制台上模拟曲线。该示例不仅涉及到基本的数学运算和循环结构,还引入了...

    西南交大算法分析实验实验报告1.4.docx

    首先,创建一个顶点数组,并对每个顶点设置一个标志位表示是否已被访问过。接着,遍历每个顶点,对于入度为0的顶点(没有前驱节点),将其加入到结果序列中,并从图中删除与其相连的边。然后,递归地处理剩余的顶点...

    算法设计与分析实验报告

    如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会丢弃该解,即回溯并且在剩余解中继续寻找。报告中以八皇后问题、生成集合全排序问题、生成集合r组合问题、子集和问题等为例,说明了回溯算法的...

    西南交大算法分析实验实验报告4.3.docx

    在上机实验阶段,学生需调试程序,确保程序输出与预期的算法分析结果一致。同时,需要撰写实验报告,包含实验目的、任务、环境、步骤、结果分析和总结等内容。 **5. 程序实现**中,`chessboard`函数是关键,它接受...

    数据结构经典问题和算法分析_经典版本

    方法是找到第一个从右向左看是递减序列的起始位置,然后在这个位置的右侧找到一个比它大的最小元素,将这两个元素交换位置,再将右侧剩余部分进行递减排序,即可得到下一个排列。 总之,迭代法和穷举搜索法在算法...

    算法设计与分析试题.docx

    它是衡量算法效率的一个重要指标,反映了随着输入规模n的增长,算法执行时间的增长趋势。 2. **问题P的时间复杂度**:是指解决一个问题实例所需的最佳算法的时间复杂度。这里的问题P特指某类问题,例如排序问题、...

    算法分析 递归算法 n个数据的排列数

    《算法分析:递归算法与数据集合的排列数》 在计算机科学中,算法是解决问题的核心,而递归算法作为算法设计的一种重要方法,经常被用于处理复杂的问题。本篇文章将深入探讨递归算法在计算数据集合排列数上的应用。...

    算法分析期末试卷6套

    算法分析是计算机科学中的核心课程,它关注的是如何理解和评估算法的效率,以及如何设计高效算法来解决实际问题。在给定的试卷内容中,我们可以提取出以下几个关键知识点: 1. **动态规划**:动态规划是一种解决...

    算法设计与分析报告

    在最优装载问题中,如果第一个被装载的集装箱是最轻的,那么剩下的集装箱在剩余载重下的装载问题也是一个最优装载问题。这种性质使得可以通过递归地解决子问题来证明整体解的最优性。 通过贪心选择性质和最优子结构...

Global site tag (gtag.js) - Google Analytics