C语言程序设计2-算法

程序 = 数据结构 + 算法

数据结构是什么?

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法索引技术有关。 [1]

数据结构名词定义:

  • 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。记为:
    Data_Structure=(D,R)

其中D是数据元素的集合R是该集合中所有元素之间的关系的有限集合 [2]

常用结构

数组、栈、队列、链表、树、图、堆、散列表。

算法

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度时间复杂度来衡量。

算法特征
  1. 有穷性
  2. 确切性
  3. 输入项
  4. 输出项
  5. 可行性
算法分类

算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析加密算法排序算法、检索算法、随机化算法、并行算法,厄米变形模型,随机森林算法。

算法描述方式

描述算法的方法有多种,常用的有自然语言、结构化流程图伪代码PAD图等,其中最普遍的是流程图。

同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度空间复杂度来考虑。

时间复杂度

算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做。

T(n)=Ο(f(n))

因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。

空间复杂度

算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。

2789632-69ec9fa7b8b753a7.png
算法描述方法

2789632-822ca08597b74f66.png
算法描述方法实例

2789632-3b419392e8ae2ed9.png
基本结构-顺序&选择

2789632-04c229f306e0ea21.png
基本结构-循环

练习:
百钱百鸡问题:公鸡一只:5钱,母鸡一只:3钱,鸡雏三只:1钱,百钱买百鸡,公鸡,母鸡,鸡雏各几只?


2789632-705bcb7d0541bb0b.png
result

Code:

#include <stdio.h>

void main() 
{
    // cocks: 5, hens: 3, 3chicks:1
    // 0<= cocks <= 19, 0<=hens<=33, 0<=chicks<=100
    for (int i = 0; i <= 19; i++)
    {
        for (int j = 0; j <= 33; j++)
        {
            for (int k = 0; k <= 100; k++)
            {
                if (i * 5 + j * 3 + k / 3 == 100 && i + j + k == 100)
                {
                    printf("cocks: %d 只,hens: %d 只, chicks: %d 只。 计算:i * 5 = %d, j * 3 = %d, k/3 = %d\n", i, j, k, i * 5, j * 3, k/3);
                }
            }
        }
    }

}
2789632-e1b0e5504d8f0d9a.png
张中华公众号
2789632-4ff8125a3453df19.jpg
张中华微信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值