小白算法集训营-大幅提升刷题量,快速逃离新手区

190 阅读3分钟

小白算法集训营-大幅提升刷题量,快速逃离新手区

核心代码,注释必读

// xia讠果☛:3w ukoou com

为什么要学习算法与数据结构 学习算法与数据结构对于理解和解决计算问题至关重要,它们是提升编程效率、优化程序性能的基础。算法是解决问题的步骤和方法,而数据结构则是组织和存储数据的方式。掌握它们能够帮助开发者设计出更高效的代码,减少资源消耗,提高处理速度。此外,良好的算法和数据结构知识是应对技术面试的关键,许多公司通过算法题来评估应聘者的逻辑思维和问题解决能力。随着大数据和人工智能等技术的发展,对算法和数据结构的需求更是日益增长。因此,无论是为了职业发展还是技术提升,学习算法与数据结构都是必不可少的。

小白算法集训营-大幅提升刷题量,快速逃离新手区 -

算法的时间复杂度是用来描述算法执行时间与输入数据量之间的关系。以下是六大常见的时间复杂度类型,以及相应的代码实例:

  1. 常数时间复杂度 O(1) 常数时间复杂度表示算法的执行时间不随输入数据的大小而改变。

    def constant_time_function():
        return True
    
  2. 线性时间复杂度 O(n) 线性时间复杂度表示算法的执行时间与输入数据的大小成正比。

    def linear_time_function(data):
        for item in data:
            pass  # 假设这里有一些操作
    
  3. 对数时间复杂度 O(log n) 对数时间复杂度通常出现在二分查找等算法中,表示算法的执行时间与输入数据的大小的对数成正比。

    def binary_search(data, target):
        low, high = 0, len(data) - 1
        while low <= high:
            mid = (low + high) // 2
            if data[mid] == target:
                return mid
            elif data[mid] < target:
                low = mid + 1
            else:
                high = mid - 1
        return -1
    
  4. 线性对数时间复杂度 O(n log n) 线性对数时间复杂度常见于快速排序和归并排序等高效的排序算法中。

    def merge_sort(data):
        if len(data) <= 1:
            return data
        mid = len(data) // 2
        left = merge_sort(data[:mid])
        right = merge_sort(data[mid:])
        return merge(left, right)
    
    def merge(left, right):
        result = []
        i = j = 0
        while i < len(left) and j < len(right):
            if left[i] < right[j]:
                result.append(left[i])
                i += 1
            else:
                result.append(right[j])
                j += 1
        result.extend(left[i:])
        result.extend(right[j:])
        return result
    
  5. 平方时间复杂度 O(n^2) 平方时间复杂度常见于简单的双层循环算法,如冒泡排序和选择排序。

    def bubble_sort(data):
        for i in range(len(data)):
            for j in range(len(data) - 1 - i):
                if data[j] > data[j + 1]:
                    data[j], data[j + 1] = data[j + 1], data[j]
    
  6. 指数时间复杂度 O(2^n) 指数时间复杂度常见于某些递归算法,如汉诺塔问题。

    def hanoi_tower(n, source, target, auxiliary):
        if n > 0:
            # Move n-1 disks from source to auxiliary, so they are out of the way
            hanoi_tower(n - 1, source, auxiliary, target)
            # Move the nth disk from source to target
            print(f"Move disk {n} from {source} to {target}")
            # Move the n-1 disks that we left on auxiliary to target
            hanoi_tower(n - 1, auxiliary, target, source)