用c语言写算法

写一算法voidStrRelace(char*T, char *P, char *S),将T中第一次出现的与P相等的子串替换为S,串S和P的长度不一定相等,并分析时间复杂度,用C语言。

直接手写

size_t lenT, lenP, lenS;
char *e;
if ( !T || !P || !S ) return;
e = strstr( T, P );

if ( !e ) return;
lenT = strlen( T );
lenP = strlen( P );
lenS = strlen( S );
memmove( e+lenS, e+lenP, lenT+1-(e-T)-lenP );
memcpy( e, s, lenS );

假定三个长度 t、p、s 。
strstr: O(t*p)
strlen*3: O(t+p+s)
memmove: O(t-p)
memcpy:O(s)
最终复杂度 O(t*p+2(t+s)) -> O(n^2)。
可以看出热点在 strstr 函数。
如果将其通过 kmp 或类似的匹配算法优化成 O(n) 的,那么复杂度可以直接降为 O(n) 。
温馨提示:内容为网友见解,仅供参考
无其他回答

如何用c语言编一套平均分算法?
1、新建一个工程和.c文件。2、输入主函数和头文件。3、定义函数类型并赋初值 。4、输入每一个成绩。5、用for语句遍历整个数组,并且通过if...else语句归类每一个分数段的人数。6、计算平均数。7、输出求出平均分,最高分和最低分。8、编译,运行,得到最后结果。

用C语言设计算法完成24点游戏的计算是什么?
1:四个数是A,B,C,D,然后将A,B,C,D的各种预算结果列举出来。2:A+B+C+D2、B-C+A*D3、(A+D)*C+B像这样没有规律的列举电脑是无法完成的,只有靠人工来完成,主要是运算的顺序,数字的顺序相对简单些。3:只需要在改变参数位置就可以了,主要是运算要考虑优先级,而数字没有优先级。4...

一道c语言题目 求大神指点下算法?
根据题意,随机生成红绿蓝球任意个数,并任意顺序排列。这里采用随机数实现。统计按红绿蓝顺序排列最少交换次数,我的思路是:第一步:循环将最后一个红色球与最靠前的其它两色球(并且满足位置在红球之前)交换。第二步:循环将最后一个绿球与最靠前的蓝球(必须在绿球之前)交换。include <stdio.h> ...

用C语言描述下列算法,并给出算法的时间复杂度。
所以算法复杂度是o(i(0)+i(1)...+i(n-1))

怎么用c语言编一个a^n(a的n次方)的算法?(结果用顺序表存储)
result = a循环n次。。如果n比较大,可以逐步来算。这样考虑,f(n)= 2^n 如果有了 f(m)的结果,那么 f(2m)和f(2m+1)就分别等于 f(m)*f(m)和f(m)*f(m)*a 所以可以从最高位开始查看n的每一位,如果这一位是1,那么 result = result result a;如果这一位是0,那么result = re...

高分送!!如何用C语言实现归并排序算法!!!
实现归并排序算法的C语言代码如下:首先定义一个函数merge,实现数组的合并操作。该函数接收一个整型数组array,以及两个索引值left和right。创建一个临时数组temparray用于存放排序后的元素。计算中间索引middle,然后利用两个指针index1和index2分别从左右两边开始比较并合并排序。在函数sort中,实现归并排序的...

关于数据结构算法,谁能帮我用C语言写下?谢谢
printf("%d ",c);return OK;} \/* 构造一个空队列Q *\/ Status InitQueue(LinkQueue *Q){ Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));if(!Q->front)exit(OVERFLOW);Q->front->next=NULL;return OK;} \/* 销毁队列Q *\/ Status DestroyQueue(LinkQueue *Q){ while(Q->front)...

C语言程序设计,初级的~设计算法输入一个四位正整数,将它们倒排,例如输 ...
C语言程序设计,输入一个四位正整数,将它们倒排输出的算法如下:include include int main(){ int oldnum;int newnum=0;int temp;printf("please input number\\n");scanf("%d",&oldnum);printf("the old number is %d\\n",oldnum);while (oldnum !=0){ newnum = newnum*10+oldnum%10...

c语言算法,鸡兔同笼
两个整数b和m,如上所述。输出:鸡的数目和兔的数目。我们假设a = 鸡只数,b = 兔只数(兔的脚数×总只数-总脚数)÷(兔的脚数-鸡的脚数)=鸡的只数,a = ( 4*n - m )\/2。总只数-鸡的只数=兔的只数,b = n - a。具体代码:include "stdio.h"int main() { int a,...

用C语言设计个算法,比较三个数的算法从大到小输出
int main(void){ int i,a[3];printf("enter 3 numbers:");\/\/输入3个书 for(i=0;i { scanf("%d",&a[i]);if(a[i]>a[0])a[i]=a[0]+a[i]-(a[0]=a[i]);\/\/把最大的放在a〔0〕,就只要比较一次就行了。} if(a[1]printf("the number from max to low:");for(i=...

相似回答