博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
-----第一讲----第二节--------------什么是算法?-------------------------------------
阅读量:7189 次
发布时间:2019-06-29

本文共 2122 字,大约阅读时间需要 7 分钟。

算法(algorithm)(#include<algorithm>.....c++中的头文件).

1:有限的指令集.

2:无所谓是否接受输入,但是一定最少有一个输出

3:有限性...一定在有限步骤后终止.

4:指令必须有清楚的目标,不可以有歧义.

5:目标要符合实际.

6:伪代码实现(不依赖于任何一种语言)(这是什么意思呢?  意思就是 你需要知道这个思想.并且有能力用任何一种你会的语言表示来这种算法,学长们一直说这只用懂思想就行了...但是我感觉在了解思想之后必须用目前咱们会的语言写一次试试.假如你只懂思想的但是表示不出来,那又有什么用处呢?-----推荐大家买一本(C程序设计学习辅导)...咱们群里有文件)

算法就是用抽象的语言(和任何一种计算机语言都无关/和任何一种计算机语言都有关)这样  知道了他的思想就可以用任何一种计算机语言去实现在数据对象上的一系列操作(解决问题的办法)----这就是算法.

-------------------------------------------------------------什么是好的算法------------------------------------------------------------

好的算法应该有好的

    1:时间复杂度(节省时间). (分析时间复杂度的时候一般分析最坏情况时间复杂度)      空间复杂度过高的算法会导致程序内存占用规模过大,导致程序爆掉.......例如第一节说的那个打印数字的两种不同算法.

    2:空间复杂度不要太占用空间(曾经误以为时间复杂度是代码的长短~~~汗~~~).    时间复杂度过高的时候可能导致到死你都没等到计算机算出来那一道题.例如下面这两种不同算法的比较.

时间空间复杂度的表示方法都是一个常数乘以一个n...

算法的分析我们关心的只是算法的渐进

下面仔细说一下第一节 里哪两个多项式求解的函数.

//为什么他就要受到鄙视(正常人) for(p=a[0],i=0;i<=n;i++)        {            p=p+a[i]*pow(x,i);        }
//为什么说她就是一个好算法?(秦九韶) for(p=a[n],i=n;i>0;i--)        {            p=a[i-1]+x*p;        }

在计算机中由计算机的结构决定计算加减法的速度远远大于计算乘除法的速度,所以在计算时间复杂度的时候   加减法可以适当的忽略,只计算乘除法的大概个数.

所以第一种受到鄙视的算法他的时间复杂度就是c1*(1+2+3+4+~~~~~+n)=c*(n!)

这个应该就是最恐怖的时间复杂度了.

第二种的时间复杂度是c*(n)/这也算是很好的时间复杂度了.

 ===========================我是大分隔符============================

输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如:序列:-2 11 -4 13 -5 -2,则最大子序列和为20。序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16。

 -----------------------------给一个   拍拍脑门救出来的简单方法------------------有点蠢--------------

//很粗鲁的方法    很暴力  时间复杂度为    n^2#include
int main(){ int a[10],i,j,m,n,max=0,num; scanf("%d",&n); for(i=0;i

-------------这个方法其实以前做题的时候我也想过但是没有动手实现------惭愧惭愧-------------现在写一下---------

--------一个效率比较高的程序是有副作用的     副作用就是,很多人看不懂------~~~汗~~~----------------------

1 //下面给一个高效的算法,时间复杂度是     n    唉,这应该这道题的是最优算法了,Rita  当时懒 2 //思想:就是    一个for循环解决问题,  从头开始一个个计算 如果其和是负数的话直接抛弃 如果不是的话并且大于max 3 //就记录下来. 4 //我当时担心的是如果只用中间的几个连续数字就达到了最大然后发生了继续往后加,又变成负数了.... 5 //只想说蠢蠢蠢!!!(太懒)    一会附上上解决方法 6 #include
7 int main() 8 { 9 int a,i,j,m,n,max=-11111111,sum;//万一 输入的都是负数/所以max的值需要很小10 scanf("%d",&n);11 for(sum=i=0;i

 

转载于:https://www.cnblogs.com/A-FM/p/5080200.html

你可能感兴趣的文章
Linux中的阻塞机制及等待队列
查看>>
我对JS字典的简单学习
查看>>
[译]HTML attribute与DOM property之间的区别?
查看>>
如何用Uber JVM Profiler等可视化工具监控Spark应用程序?
查看>>
Unix高级环境编程
查看>>
揭秘天猫未来小店背后的NEC the WISE技术群
查看>>
CentOS 6.5上安装并配置FastDFS
查看>>
流程DEMO-借款申请
查看>>
算法——分支限界法
查看>>
Git版本恢复命令reset(转载)
查看>>
运维第八单元
查看>>
实战 MDT 2012(二)---制作模板机
查看>>
Memcached (二)YUM安装和编译安装
查看>>
Citrix 3D虚拟化解决方案之小结
查看>>
setTimeout与setInterval区别
查看>>
安装配置rabbitmq
查看>>
linux服务器运维 -- 路线、架构
查看>>
Sqoop数据分析引擎安装与使用
查看>>
polysh批量执行shell命令
查看>>
如何使用GNS3和Cisco IOU搭建路由交换实验-IOU篇
查看>>