大话C语言——优化结构控制(二)

三.表达式优化(二)——使用数学公式

计算机的特点是准确的执行重复性的动作,利用这个特点,用户可以将大量的计算工作交给计算机去做。使用计算机解决问题时,会遇到枚举,递归等人们不太喜欢的问题。但这些问题对于计算机来说成为了一般性的问题,对于计算机来说,这些重复的工作可以确保准确性,而且计算机不会疲倦。
如下面这个例子:计算1~n之间n个整数和。
#include <stdio.h>

int main()
{
    int i;
    int n,sum=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        sum+=i;
    }
    printf("the result is:%d\n",sum);
    return 0;
}
程序结果:
100
the result is:5050

我们来分析一下这个程序,
这个程序执行100次,每次需要做的计算如下:
(1)判断条件,是否需要继续执行循环。
(2)累加循环因子。
(3)累加保存和的变量。
因此该程序需要执行300次计算,才能得出正确的结果,现在将程序用著名的高斯定理来实现:
#include <stdio.h>

int main()
{
    int i;
    int n,sum=0;
    scanf("%d",&n);
    sum=((1+n)*n)/2;
    printf("the result is:%d\n",sum);
    return 0;
}
结果一样。
这个程序执行起来只要三次,首先计算n+1的值,接着计算(n+1)*n的值,最后计算(n+1)*n/2的值,执行效率显著提升。因此,在编写程序过程中应用数学公式,可以起到大幅度的提高程序执行效率。

四.表达式优化——存储问题

C语言中的变量需要保存在内存中,相对于CPU内部的寄存器操作,访问内存所消耗的时间是很大的。因此减少内存访问也是提高程序运行效率方法之一。

例如,对于内存访问导致下面两个语句的执行速度不同,但是这两个语句实现了同样的功能。

x=x+1;
该语句在执行过程中,编译器会认为赋值符号“=”两边的操作数不是一个数,而是两个。执行过程分为三步:寻找存储左边操作数x的内存单元地址;寻找存储右边操作数x的内存单元的地址:计算x+1的值并存储在变量x中。

x+=1;
该语句在执行过程中,编译器会认为赋值符号“=”两边的操作数是同一个数,执行过程分为两步:寻找存储操作数x的内存单元地址;计算x+1的值并存储在变量x中。

明显的第二种方法少一步,提高了效率。

哈希表是一种高效的数据结构,它能够在平均情况下以常数时间O(1)进行插入、删除和查找操作。在C语言中,我们可以使用哈希表来解决一些常见的问题,比如查找一个元素或者统计元素出现的频率。 在实现哈希表时,我们需要以下几个关键组成部分: 1. 哈希函数:哈希函数将输入的数据映射到哈希表中的某个位置,它应该具备良好的分布性,即使数据分布不均匀,也能使得元素尽可能均匀地散列到不同的槽位中。 2. 数组:哈希表通常使用一个数组来存储数据,数组的大小可以根据实际情况进行调整。每个槽位可以存储一个元素或者一个指向链表/红黑树等数据结构的指针,用于解决哈希冲突。 3. 冲突处理:由于不同的元素可能被映射到相同的槽位上,所以我们需要解决冲突的问题。常见的解决方法有开放地址法和链地址法。开放地址法会寻找下一个可用的槽位,直到找到一个空闲位置,而链地址法则使用链表或其他数据结构将冲突的元素串联起来。 使用C语言实现哈希表时,我们可以先定义一个结构体来表示哈希表的每个槽位,然后使用数组来存储这些结构体。结构体可以包含键值对等信息,以及指向下一个元素的指针(用于链地址法)。然后,我们可以根据需要实现插入、删除和查找等操作,使用哈希函数将元素映射到相应的位置,并根据具体的冲突处理方式解决冲突。 总之,哈希表是一种非常实用的数据结构,它在处理大量数据时能够提供高效的查找和操作效率。在C语言中,我们可以根据具体需求实现自己的哈希表,或者使用已有的开源库来简化开发过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值