精华内容
下载资源
问答
  • 数据结构KMP算法例题

    2020-03-23 19:59:23
    KMP算法例题 今天遇到一个数据结构的问题,索性就把KMP算法的题总结一下,有不对的地方希望指正。 串“ababaabab”的nextval为( A)。 A.010104101 B.010102101 C.010100011 D.010101011 ①i从0开始 方法一: 第...
                              KMP算法例题
     今天遇到一个数据结构的问题,索性就把KMP算法的题总结一下,有不对的地方希望指正。
    

    串“ababaabab”的nextval为( A)。

    A.010104101
    B.010102101
    C.010100011
    D.010101011

    ①i从0开始

    方法一:
    在这里插入图片描述

    第0位:Next[0]为定值-1
    第1位:Next[1]看前一位a的Next[0]的值位-1,由于i是从0开始的,无法再向前匹配,所以Next[1]的值位0	
    第2位:Next[2]看前一位b的Next[1]的值位0,0对应的字符是a,a与第1位的字符b不相同,所以看第0位a的Next值为-1,由于i是从0开始的,无法再向前匹配,所以Next[2]的值位0
    第3位:Next[3]看前一位a的Next[2]的值为0,0对应的字符是a,a与第2位的字符a相同,所以Next[3]=Next[2]+1=1
    第4位:Next[4]看前一位b的Next[3]的值为1,1对应的字符是b,b与第3位的字符b相同,所以Next[4]=Next[3]+1=2
    第5位:Next[5]看前一位a的Next[4]的值为2,2对应的字符是a,a与第4位的字符a相同,所以Next[5]=Next[4]+1=3
    第6位:Next[6]看前一位a的Next[5]的值为3,,3对应的字符是b,b与第5位的字符a不相同,所以看第3位的b的Next值为1,1对应的字符是b,b与第5位的字符a不相同,所以看第1位b的Next的值为0,0对应的字符是a,a与第5位的字符a相同,所以Next[6]=Next[1]+1=1
    第7位:Next[7]看前一位b的Next[6]的值为1,1对应的字符是b,b与第6位的字符b相同,所以Next[7]=Next[6]+1=2
    第8位:Next[8]看前一位a的Next[7]的值为2,2对应的字符是a,a与第7位的字符a相同,所以Next[8]=Next[7]+1=3
    

    方法二:Next[i]的值主要看s[i]之前的字符中重复的长度
    在这里插入图片描述

    Next[0]:为定值Next[0]=-1
    Next[1]:s[1]之前的字符a重复的长度为0,所以Next[1]=0
    Next[2]:s[2]之前的字符a、b重复的长度为0,所以Next[2]=0
    Next[3]:s[3]之前的字符a、b、a重复的字符为s[0]与s[2]长度为1,所以Next[3]=1
    Next[4]:s[4]之前的字符a、b、a、b重复的字符为s[01]与s[23]长度为2,所以Next[4]=2
    Next[5]:s[5]之前的字符a、b、a、b、a重复的字符为s[012]与s[234]长度为3,所以Next[3]=2
    Next[6]:s[6]之前的字符a、b、a、b、a、a重复的字符为s[0]与s[5]长度为1,所以Next[6]=1
    Next[7]:s[7]之前的字符a、b、a、b、a、a、b重复的字符为s[01]与s[56]长度为2,所以Next[7]=2
    Next[8]:s[7]之前的字符a、b、a、b、a、a、b、a重复的字符为s[012]与s[567]长度为3,所以Next[8]=3
    

    ②i从1开始
    在这里插入图片描述

    第1位:Next[1]为定值0
    第2位:Next[2]看前一位a的Next的值为0,由于i是从1开始,不能继续向前匹配,所以Next[2]的值为1
    第3位:Next[3]看前一位b的Next的值为1,1对应的字符为a,a与第2位的字符b不相同,所以看第1位a的Next的值为0,由于i是从1开始,不能继续向前匹配,所以Next[3]的值为1
    第4位:Next[4]看前一位a的Next的值为1,1对应的字符为a,a与第3位的字符a相同,所以Next[4]=Next[3]+1=2
    第5位:Next[5]看前一位a的Next的值为2,2对应的字符为b,b与第4位的字符a不相同,所以看第2位字符b的Next的值为1,1对应的字符为a,a与第4位的字符a相同,所以Next[5]=Next[2]+1=2
    第6位:Next[6]看前一位b的Next的值为2,2对应的字符为b,b与第5位的字符b相同,所以Next[6]=Next[5]+1=3
    第7位:Next[7]看前一位c的Next的值为3,3对应的字符为a,a与第6位的字符c不相同,所以看第3位的a的Next的值为1,1对应的字符为a,a与第6位的字符c不相同,所以看第1位的a的Next的值为0,由于i是从1开始,不能继续向前匹配,所以Next[7]的值为1
    第8位:Next[8]看前一位a的Next的值为1,1对应的字符为a,a与第7位的字符a相同,所以Next[8]=Next[7]+1=2
    

    ②Nextval的值:比较s[Next[i]]与s[i]的值是否一致,一致则用s[Next[i]]的Nextval
    的值作为Nextval[i]的值,不一致则用Next[i]的值作为Nextval[i]的值
    在这里插入图片描述

    s[Next[0]]=-1与Next[0]一致
    s[Next[1]]=s[0]=a≠s[1]=b ==> Nextval[1]=Next[1]=0
    s[Next[2]]=s[0]=a = s[2]=a ==> Nextval[2]=Nextval[0]=-1
    s[Next[3]]=s[1]=b = s[3]=b ==> Nextval[3]=Nextval[1]=0
    s[Next[4]]=s[2]=a = s[4]=a ==> Nextval[4]=Nextval[2]=-1
    s[Next[5]]=s[3]=b≠s[5]=a ==> Nextval[5]=Next[5]=3
    s[Next[6]]=s[1]=b = s[6]=b ==> Nextval[6]=Nextval[1]=0
    s[Next[7]]=s[2]=a = s[7]=a ==> Nextval[7]=Nextval[2]=-1
    s[Next[8]]=s[3]=b = s[8]=b ==> Nextval[8]=Nextval[3]=0

    这里Nextval的下标从0开始,如果Nextval的下标从1开始则以上Nextval的值加1即可,即0、1、0、1、4、1、0、1

    展开全文
  • 贪心算法例题

    2012-11-19 21:57:00
    例1:均分纸牌 int main() { int i, n, s = 0; long v = 0; printf("请输入纸牌堆数:"); scanf("%d", &n); ... printf("请输入%d堆纸牌各堆数目\n", n); int t; f...

    例1:均分纸牌

    int main()
    {
        int i, n, s = 0;
        long v = 0;
        
        printf("请输入纸牌堆数:");
        scanf("%d", &n);
        
        int a[n];
        printf("请输入%d堆纸牌各堆数目\n", n);
        
        int t;
        for(t = 0; t < n; t++){
                scanf("%d", &a[t]);
                v = v + a[t];        
        }           
        
        printf("各堆纸牌的数量为:\n");
        int m;
        for(m = 0; m < n; m++)
                printf("%d\t", a[m]);
        printf("\n");
        
        v = v/n;
        printf("每堆牌的平均数为%d \n", v);
        
        for (i =0; i < n-1; i++){
            if(a[i] != v){
                    t = a[i];
                    a[i] = v;
                    a[i+1] = a[i+1] + t - v;
                    s++;
            }    
        }
        
        printf("一共移动了%d步。\n",s);
        printf("现在每堆纸牌数量是:\n");
        for(m = 0; m < n; m++)
                printf("%d\t", a[m]);
        printf("\n");
                
        system("pause");
        return 0;
    }   

     

    例2: 设有n 个正整数,将他们连接成一排,组成一个最大的多位整数。例如:n=3时,3个正整数13, 312, 343,连接成的最大整数为343312213.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int i,j,n;
        char s[20][20] = {"\0"};
        char t1[20] = {"\0"};
        char t2[20] = {"\0"};
        
        printf("请输入有多少个正整数:");
        scanf("%d", &n);
        
        for (i=1; i<n+1; i++)
            scanf("%s", s[i]); // 直接存储为字符串数组
            
        for(j=1; j<= n-1; j++)    // 冒泡排序 
           for(i=1;i<=n-j; i++)
           {
               strcpy(t1, s[i]);
               strcat(t1, s[i+1]);   // 把相邻的两个数组分别进行连接 a+b 和 b+a 
               strcpy(t2, s[i+1]);   // 操作,并分别存放在 t1 t2 临时数组里 
               strcat(t2, s[i]);
               if(strcmp(t1,t2) < 0)
               {
                   strcpy(t1, s[i+1]);  // 如果 a+b < b+a,则交换顺序 
                   strcpy(s[i+1], s[i]);
                   strcpy(s[i], t1);
               }   
           }
        
        printf("\n连接的最大正整数是:");
        for (i=1; i<=n; i++)
            printf("%s", s[i]);
        printf("\n");
        
        system("pause");
        return 0; 
    }

    转载于:https://www.cnblogs.com/lcj011/archive/2012/11/19/2778075.html

    展开全文
  • 贪心算法例题(五)

    2020-08-20 08:58:12
    贪心算法例题(五) 最优加油方法 题目描述: 已知一条公路上,有一个起点与一个终点,这之间有n个加油站;已知从这n个加油站到终点的距离d与各个加油站可以加油的量 l,起点位置至终点的距离L与起始时刻油箱中汽油量...

    贪心算法例题(五)

    最优加油方法
    题目描述:
    已知一条公路上,有一个起点与一个终点,这之间有n个加油站;已知从这n个加油站到终点的距离d与各个加油站可以加油的量 l,起点位置至终点的距离L与起始时刻油箱中汽油量P;假设使用1个单位的汽油即走一个单位的距离,油箱没有上线,最少加几次油,可以从起点开至终点?(如果无法到达,返回-1)
    思考:
    汽车经过n个加油站,对于这n个加油站,应该在哪个加油站停下来加油,最终既能到达终点,又使加油次数最少?
    若按顺序遍历加油站,则面临:
    如果在某个加油站停下来加油,可能是没有必要的,有可能不进行这次加油也能到达终点;
    如果在某个加油站不停下来加油,可能由于汽油不够而无法到达终点或者后面要更多次的加油才能到达终点
    贪心:
    在油用光的时候加油最合适!
    在油量最多的加油站加油最合适!
    算法思路:
    1、设置一个最大堆,用来存储经过加油站的汽油量
    2、按照从起点至终点的方向,遍历各个加油站之间的距离
    3、每次需要走两个加油站之间的距离d,如果发现汽油不够走距离d时,从最大堆中取出一个油量添加,直到可以足够走距离d
    4、如果把最大堆的汽油都添加仍然不够进行距离d,则无法达到终点
    5、当前油量p减少d
    6、将当前加油站油量添加至最大堆

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<cstring>
    #include<string>
    #include<queue>
    using namespace std;
    bool comp(const pair<int, int>& p, const pair<int, int>& p1)
    {
        return p.first > p1.first;
    }
    int function(int L,int P,vector<pair<int, int> >& stop)
    {
        priority_queue<int> Q;
         int result = 0;
         stop.push_back(make_pair(0, 0));
         sort(stop.begin(), stop.end(), comp);
         
         for (int i = 0;i < stop.size();i++)
         {
             int dis = L - stop[i].first;
             while (!Q.empty()&&P<dis)
             {
                 P += Q.top();
                 Q.pop();
                 result++;
             }
             if (Q.empty() && P < dis)
             {
                 return -1;
             }
             P -= dis;
             L = stop[i].first;
             Q.push(stop[i].second);
    
         }
    }
    int main()
    { 
        vector<pair<int, int>> stop;
        int N;
        int L;
        int p;
        int distance;
        int fuel;
        cin >> N;
        for (int i = 0; i < N; i++) {
            cin >> distance >> fuel;
            stop.push_back(make_pair(distance, fuel));
        }
        cin >> L >> p;
        cout << function(L, p, stop);
    
        return 0;
    }
    
    展开全文
  • 作用: 防止死锁. 防止所有人都抱着资源不放手等...A B C D A B C D A B C D P0 1 1 0 0 1 5 5 0 1 4 1 0 P1 1 3 5 4 3 3 5 6 P2 0 0 0 2 0 0 1 2 P3 0 6 3 2 0 6 5 2 P4 0 0 1 4 0 4 2 5 填写需求矩阵 Need = Ma

    作用: 防止死锁. 防止所有人都抱着资源不放手等其他资源, 导致死锁.

    假设系统有4类资源 A, B, C , D, 5个进程P0, P1, P2, P3 ,P4

    Allocation	Max	Available
    A	B	C	D	A	B	C	D	A	B	C	D
    

    P0 1 1 0 0 1 5 5 0 1 4 1 0
    P1 1 3 5 4 3 3 5 6
    P2 0 0 0 2 0 0 1 2
    P3 0 6 3 2 0 6 5 2
    P4 0 0 1 4 0 4 2 5

    1. 填写需求矩阵
      Need = Max – Allocation

      Need
      A B C D
      P0 0 4 5 0
      P1 2 0 0 2
      P2 0 0 1 0
      P3 0 0 2 0
      P4 0 4 1 1

    2. 如果系统处于安全状态,请列出安全序列。

    Work = Available = 1 4 1 0, then if Need ≤ Work, then Work = Work + Allocation

    P # Work
    A B C D
    P2 1 4 1 2
    P4 1 4 2 6
    P3 1 10 5 8
    P0 2 11 5 8
    P1 3 14 10 12
    安全序列:

    小结: 
    
    1. 根据Max和allocate求出need Need = Max – Allocation
    2. 如果有request过来
      2.1 requist<need?下一步:不安全
      2.2 requist<available?下一步:不安全
      2.3 更新矩阵Allocate-Need-Available
      2.4 执行步骤3
    3. 确定了矩阵Allocate-Need-Available之后, 要求求出安全序列或者问是否安全
      建立新矩阵work
      Work=available;
      While(枚举每一个进程){
      If(need<work){//如果当前空闲(work)的资源能够满足一个进程
      work+=allocate;}//那么就运行这个进程, 直到进程结束并且释放自己占有的进程, 归还到work里面
      }

    安全序列的work表格里面是释放了某个p之后的状态. 这个状态将会作为判断下一个的基础

    展开全文
  • 算法设计例题

    2020-05-15 10:48:05
    算法设计例题 【动态规划】 例 1 正解: (1)17条 (2)从A到B最短路径的长度是7,从A沿着右下方向取寻找路径,第一次找出距离A一步的点上的条数,第二次找出距离A两步的点上的条数,重复七次,假设 D[i][j] 是...
  • 我们假设佛祖的手掌是一个圆圈,圆圈的长为 n,逆时针记为:0,1,2,…,n−1,而大圣每次飞的距离为 d。 现在大圣所在的位置记为 x,而大圣想去的地方在 y。 要你告诉大圣至少要飞多少次才能到达目的地。 注意:孙悟空...
  • 已知n=pxq,计算φ(n),计算d :扩展欧几里得算法 流程: 题目: d·e=1 mod 96,e=5,求d递归(不断的做除法,辗转相除)的计算一个三元组。 有两个初始的三元组: 设三元组(x,y,z),x,y,z满足: 因为要算5对96...
  • 距离向量路由算法例题) 如图子网中采用距离向量算法,C节点路由器收到B节点的距离向量为(5,0,8,12,6,2),收到D的向量为(16,12,6,0,9,10),收到E向量为(7,6,3,9,0,4),经过测量,C节点到B、...
  • 现在要在海岸线上安装雷达,雷达的覆盖范围是r,也就是说大海中一个小岛能被安装的雷达覆盖,那么它们之间的距离最大为d。 我们使用平面直角坐标系,定义海岸线是x轴,大海在x轴上方,陆地在下方。给你海中每一个...
  • 题目:计算函数f(x)的最小值,其中个体x的维数n=10。 解答:优化结束后,根据所得的图可知,优化后的结果为x=[0.0007-0.0010-0.0014-0.0007-0.0015-0.0005-0....D=10; %变量的维数 G=200; %最大进化代数 F0=0.4; %初始
  • 计算a^19modn 首先对指数19进行二进制展开19=(10011) 从高位到低位进行(从左到右) 设结果d初始化为1 先对d进行平方 该位如果为1:d=d*a modn 循环继续向右走 ...
  • 形如a^3= b^3 + c^3 + d^3的等式被称为完美立方等式。例如 12^3= 6^3 + 8^3 + 10^3 。编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d),使得a^3= b^3 + c^3 + d^3,其中a,b,c,d 大于 1, 小于...
  • 算法设计与分析例题

    2021-05-05 21:22:06
    算法设计与分析书本上的例题,有空敲一下 P43【例6】求n! 普通算法:累乘 #include<stdio.h> int main() { int i,n,sum=1; printf("请输入n:\n"); scanf("%d",&n); if(n==0) { sum=1; printf("%...
  • 例题 A:HDU-1269 迷宫城堡 B:HDU-2767 Proving Equivalences C:HDU-1827 Summer Holiday D:HDU-3639 Hawk-and-Chicken E:POJ-1523 SPF F:HDU-4738 Caocao's Bridges 先给个网址了解下强连通:(强连通算法)....
  • 题目描述 输入一个正整数N,求1+2+…+N,即求 要求在程序中使用break语句。 输入 要求输入的数据一定是一个正整数。 输出 计算的结果,连续N个自然数的和,末尾输出换行。 ...using namespace std...
  • 有一个数组 ins[] ,d(i)代表以ins[i]结尾的最长升序子序列的长度。 状态方程是 d(i) = max{d(i),d(j)+1}public class Main { public static void main(String[] args) { int[] ints = {3,5,2,7,8,3}; int len = ...
  • 题目要求: 输入n个元素组成的序列s,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,...%I64d输出long long类型数字。 代码: #include <iostream> #include <stdio.h> using namespac
  • 问题 D: 例题5-1-4 连续自然数求和 题目描述 输入一个正整数N,求1+2+…+N,即求 要求在程序中使用break语句。 实现 输入 要求输入的数据一定是一个正整数。 输出 计算的结果,连续N个自然数的和,末尾输出换行。 ...
  • d)最短作业优先 对于以上算法,假设某时刻只有一个作业运行,直到结束。所有的作业都是完全的CPU密集型作业。 要求画出甘特图并计算平均周转时间和平均等待时间。 话不多说,直接上答案: 谢谢观看哈哈
  • D. 【例题4】传球游戏 题目链接 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做...
  •  printf("%d\n",sum);  }    system("pause"); } 这道题目本人作了一下突破性尝试,作为一个小白,首次大胆尝试了用switch case选择结构嵌套了for循环,事实证明这种方法是可行的,只是代码可能不够美观。...
  • 蛇形填数。在n×n方阵里填入1,2,…,n×n,要求填成蛇形。例如,n=4时方阵为: 1011121 9 16132 8 15143 7 6 5 4 上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n≤8。...#d...
  • CFrontPageDPowerPointC分支结构D顺序结构浙江省 CFrontPage DPowerPoint C分支结构 D顺序结构 浙江省 2004 年会考试题 分析 作为信息技术基础的内容要求能看懂程序的基本控制结构及简单程序的阅读理解如果在 简单...
  • 循环结构 问题 D: 例题5-1-4 连续自然数求和 要求在程序中使用break语句。题目描述输入输出样例输入样例输出示例代码 题目描述 输入一个正整数N,求1+2+…+N,即求 要求在程序中使用break语句。 输入 要求输入的...
  • /*算法竞赛入门经典 例题 9-4 * 问题:求以c为起点的边权之和最大的路径 * 0-1背包之物品无限 d[i]表示以i为起点的最大路径 d[i] = max{d[j] + w[i]} * */ import java.util.Arrays; import java.util....
  • 问题 A: 例题1-1-1 按要求输出信息(1) 时间限制: 1 Sec 内存限制: 12 MB 题目描述 编写一个C程序,要求在屏幕上输出一下一行信息。 This is my first c program! 输入 无 输出 This is my first c program! 样例输入...
  • 【程序41】题目:学习static 定义静态变量的用法1.程序分析: 程序源代码: #include "stdio.h"#include "conio.h"varfunc(){int var=0;static int static_var=0;...printf("\40:static var equal %d \n",stat...
  • 问题 D: 例题1-2-2 求两整数数之和(2) 题目描述 从键盘上输入两个整数,并输出这两个数的和,即你的任务是计算a+b。 输入 输入空格分隔的两个整数 输出 对于用空格分隔的两个整数,求其和。 样例输入 5 6 样例输出 ...
  • 【程序51】题目:学习使用按位与 & 。1.程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1 程序源代码: #include "stdio.h"main(){int a,b;... b(decimal) is %d \n",b);b&=7;printf("...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 390
精华内容 156
关键字:

d算法例题