循环打印算法:不拘一格编程序之一

简介:
不拘一格编程序之一
循环打印算法
作者:朱云翔
 
    小说中经常有人说某某将领打仗天马行空,不拘一格,让敌人防不胜防,比如《寻秦记》中的李牧;比如《大唐双龙传》中的寇少。
    编程序时也要有怎样的思想,不能被条条框框所束缚,比如这个例子:
    【例1】编写一个函数void fun(int t),要求在屏幕上打印t个“*”号,其中t的长度不会大于50。

【设计1】:
void fun( int t) 

         if (t<0 || t>50)  return
         switch(t) 
        { 
                 case 1: printf( "*"); break
                 case 2: printf( "**"); break
                此处删除500字 
                 case n: printf( "*****......**"); break
        } 
}
以上方法虽然笨拙,但是时间复杂度为O(1),快!这是牺牲空间换取时间。
当然,编写设计一的人员一般不多,绝大多数人使用设计2。
 
【设计2】:
void fun( int t) 

         int i;     
         if (t<0 || t>50)  return
         for(i=0;i<t;i++) printf( "*");         
}
以上算法是最正宗的算法!优点是:程序相当简单,思路相当清晰。缺点是时间复杂度为O(t)。
 
设计3】:
void fun( int t) 

         char     *p= "****************************************************************************************"
         char buf[51]; 
         if (t<0 || t>50)  return
        memcpy(buf, p, t); 
        buf[t]=0; 
        printf(buf);         
}
乍一看,真麻烦,但是时间复杂度O(1)。有人说,那前面的memcpy等代码就不耗费时间了吗?答曰:1、memecpy的时间花费远远printf等屏幕显示类函数底。2、就算是空循环体的for循环再编译后也会产生若干行代表,比memcpy要慢。
但是这里增加了p和buf的存储空间。
 
【设计4】
void fun( int t)    
{    
                 char    *p;    
                 if (t<0 || t>50)  return;    
                 if (!(p = ( char *)malloc(t+1)))  return
                memset(p, '*', t); 
                p[t]=0;    
                printf(p);    
                free(p); 
                 return;                 
}
与设计3类似,但与其相比,减少了多余的空间浪费,但是去增加了malloc内存分配操作和memset内存设置操作,相对增加了时间耗费。时间复杂度O(1)。
 
    编写软件不拘一格,并不是要你编什么程序都剑走偏锋,而是说当走普通的路不通的时候,或者非常难走时,别完了试试其它的路。就像以上算法,各自有其优缺点,都有其自己的适用范围,切勿只用一种包打天下,也切勿为了眩耀而使用不适用的算法。


 本文转自 zhuyunxiang 51CTO博客,原文链接:http://blog.51cto.com/zhuyunxiang/128441,如需转载请自行联系原作者

相关文章
|
算法 Java
7.Java判断和循环+面试相关力扣算法题详解
7.Java判断和循环+面试相关力扣算法题详解
164 1
|
6月前
|
人工智能 算法 大数据
算法金 | 推导式、生成器、向量化、map、filter、reduce、itertools,再见 for 循环
这篇内容介绍了编程中避免使用 for 循环的一些方法,特别是针对 Python 语言。它强调了 for 循环在处理大数据或复杂逻辑时可能导致的性能、可读性和复杂度问题。
62 6
算法金 | 推导式、生成器、向量化、map、filter、reduce、itertools,再见 for 循环
|
6月前
|
算法 测试技术 Python
python中算法无限循环(Infinite Loops)
【7月更文挑战第18天】
170 4
|
5月前
|
算法
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
118 0
|
7月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
7月前
|
算法
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
510 1
|
8月前
|
机器学习/深度学习 算法
m基于GA-GRU遗传优化门控循环单元网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,一个基于遗传算法优化的GRU网络展示显著优化效果。优化前后的电力负荷预测图表显示了改进的预测准确性和效率。GRU,作为RNN的一种形式,解决了长期依赖问题,而遗传算法用于优化其超参数,如学习率和隐藏层单元数。核心MATLAB程序执行超过30分钟,通过迭代和适应度评估寻找最佳超参数,最终构建优化的GRU模型进行负荷预测,结果显示预测误差和模型性能的提升。
194 4
|
7月前
|
机器学习/深度学习 算法
m基于PSO-GRU粒子群优化长门控循环单元网络的电力负荷数据预测算法matlab仿真
摘要: 在MATLAB 2022a中,对比了电力负荷预测算法优化前后的效果。优化前为&quot;Ttttttt111222&quot;,优化后为&quot;Tttttttt333444&quot;,明显改进体现为&quot;Tttttttttt5555&quot;。该算法结合了粒子群优化(PSO)和长门控循环单元(GRU)网络,利用PSO优化GRU的超参数,提升预测准确性和稳定性。PSO模仿鸟群行为寻找最优解,而GRU通过更新门和重置门处理长期依赖问题。核心MATLAB程序展示了训练和预测过程,包括使用&#39;adam&#39;优化器和超参数调整,最终评估并保存预测结果。
65 0
|
8月前
|
算法 Java C语言
【新手解答6】深入探索 C 语言:算法流程图(条件判断、循环)+ 字符常量 + switch的具体用法 + 关于`namespace` + import vs include
【新手解答6】深入探索 C 语言:算法流程图(条件判断、循环)+ 字符常量 + switch的具体用法 + 关于`namespace` + import vs include
177 0
|
存储 缓存 算法
【算法基础】数组和链表,动态数组,循环数组,链表的变种
【算法基础】数组和链表,动态数组,循环数组,链表的变种
86 0

热门文章

最新文章