作为程序员应该了解的32个算法(持续更新)

版权声明:转载请声明出处Catalog Spri https://blog.csdn.net/qq_33404767/article/details/83865992

算法是一组完成任务的指令。任何代码片段都可视为算法。

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

A搜索算法


集束搜索


二分查找

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

说白了就是当我们有一个需求:要查找一个数字是否在一个序列中,我们就可以使用二分法进行查找。
首先我们要对序列进行排序(无论升序还是降序),然后把序列从中间一分为二,拿我们要查找的数字与中间数字做对比,根据判断的结果进行下一步操作。
具体实现如下:
笔者目前还比较小白,只会python。各位将就着看一下吧

# 这里我们用列表来举例
nums = [1, 13, 15, 23, 27, 31, 33, 57, 73, 81, 93, 94, 97, 101]  # 从小到大排列的数字列表
# 如果传入的序列是无序的,我们可以先对序列进行排序

def binary_search(find_num, nums):
    '''
    二分法查找数字是否存在于列表中
    :param find_num: 要查找的数字
    :param nums: 序列
    :return: 返回布尔值, 存在为True
    '''
    # 先判断传入的序列的长度
    if len(nums) == 0:
    	# 如果序列长度为0,则要查找的数字不在此序列中
        print('not exists')
        return False
    # 将序列从中间一分为二,然后拿我们要查找的数字与中间数字做对比,判断大小
    # 这里我们默认序列为从小到大
    mid_index = len(nums) // 2
    # 要查找的数字大于序列中间数字,则我们要查找的数字要么在序列右侧(较大一侧),要么不存在
    if find_num > nums[mid_index]:
        # 取列表右半部分赋值给新变量
        nums = nums[mid_index + 1:]
        # 重新运行功能,传入新列表
        binary_search(find_num, nums)
    # 要查找的数字小于序列中间数字,则我们要查找的数字要么在序列右侧(较大一侧),要么不存在
    elif find_num < nums[mid_index]:
        # 取列表左半部分赋值给新变量
        nums = nums[:mid_index]
        # 重新运行功能,传入新列表
        binary_search(find_num, nums)
    # 要查找的数字等于中间数字,则找到数字,返回True
    else:
        return True


# 函数有返回值,找个变量接收一下
res = binary_search(95, nums)
# 查看结果
print(res)

分支界定算法


Buchberger算法


数据压缩


密钥交换算法


Dijkstra算法


离散微分算法


动态规划算法


欧几里得算法


期望-最大算法


快速傅里叶变换


梯度下降


哈希算法


堆排序


Karatsuba乘法


LLL算法


最大流量算法


合并排序


牛顿法


Q-learning


两次筛法


RANSAC


RSA


Strassen算法


单纯型算法


奇异值分解


求解线性方程组


Strukturtensor


合并查找算法


维特比算法

猜你喜欢

转载自blog.csdn.net/qq_33404767/article/details/83865992
今日推荐