zoukankan      html  css  js  c++  java
  • 算法总结

    算法考点:
    
    	01.递归:代码简洁
    	02.循环:栈来模拟递归
    	03.排序算法:快速排序、归并排序
    	04.查找算法:二分查找
    	05.回溯法:二维数组搜索路径
    	06.动态规划DP:最优解
    	07.贪婪算法:存在特殊选择的情况
    	08.位运算:与或非、异或、左移、右移
    	09.分治法:divide and conquer
    查找:
    	A.顺序查找
    		def SeqSearch(array,target):
    			found = False
    			if not array:
    				return found
    			for i in range(len(array)):
    				if array[i] == target:
    					found = True
    					return found
    			return found
    		array = [1,2,3,4,5,6,10,20]
    		print SeqSearch(array,10)
    	B.二分查找 要求信手拈来二分查找代码!
    		# -*- coding:utf-8 -*-
    		def BinSearch(array,target):
    			found = False
    			if not array:
    				return found
    			else:
    				low = 0
    				high = len(array)-1
    				while low < high:
    					mid = (low+high)/2
    					if array[mid] < target:
    						low = mid + 1
    					elif array[mid] > target:
    						high = mid -1
    					else:
    						found = True
    						return found
    				return  found
    		array = [1,2,3,4,5,6,10,20]
    		print BinSearch(array,15)
    		#时间复杂度:O(log n) 空间:常量
    	C.哈希表查找 O(1)时间和额外的空间来实现哈希表,除了此功能还能进行MD5校验
    		哈希表定义 f(k)=K f叫哈希函数  形成的表叫哈希表,相当于给出列表给出寻址的地址了。为啥要映射呢。。因为k不适合做索引,而K适合做索引。
    	D.二叉排序树查找:二叉搜索树
    		
    排序:
          额外空间消耗、平均时间复杂度、最差时间复杂度比较各个算法
          十种实现方式: 比较排序: 简单排序:插入<插入顾名思义,要点在插入的位置>、选择<选择出最小的元素,然后插入第i个位置>、冒泡<N轮扫描,每次都是把最大的元素后移> 复杂排序:快速排序<递归处理左右区间进行排序>、归并排序<分治法>、堆排序、希尔排序 def qsort_record(array,left,right): if left >=right : return left_index = left right_index = right stand = array[left] while left_index < right_index: #交替进行一下步骤:step1 右边开始找出一个小于stand的元素 然后放到left_index的位置 #step2 左边开始找出一个小于stand的元素 然后放到right_index的位置 while left_index<right_index and array[right_index] >= stand: right_index = right_index -1 #第一个不大于stad的元素 if left_index < right_index: array[left_index] = array[right_index] while left_index<right_index and array[left_index] <= stand: left_index = left_index + 1 #第一个不小于stad的元素 if left_index < right_index: array[right_index] = array[left_index] array[right_index] = stand #此时左右标记相等,将stand放入该位置 qsort_record(array,left,left_index-1) #递归处理左区间 qsort_record(array, left_index +1 ,right)#递归处理右区间 def quick_sort(array): qsort_record(array,0,len(array)-1) arr = [1,2,3,4,5,6,9,8] quick_sort(arr) print arr def merge(left,right): result = [] while left and right: if left[0] <= right[0]: result.append(left.pop(0)) else: result.append(right.pop(0)) if left: result = result + left if right: result = result + right return result def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr)/2 left = arr[:mid] right = arr[mid:] left = merge_sort(left) right = merge_sort(right) return merge(left,right) print merge_sort([8,4,5,7,1,3,6,2]) 计数排序: 计数排序、桶排序、基数排序 排序总结: 排序算法 最坏的时间复杂度 平均情况时间复杂度 最好情况时间复杂度 空间复杂度 稳定性 简单插入排序 O(n^2) O(n^2) O(n) O(1) 是 二分插入排序 O(n^2) O(n^2) nlog n O(1) 是 直接选择排序 O(n^2) O(n^2) O(n) O(1) 否

      

  • 相关阅读:
    postgresql 简单入门
    自用 docker-compose
    前后端分离 开发环境通过CORS实现跨域联调
    导出 java.io.IOException: 权限不够
    mysql 数值与字符类型 长度梳理
    easyui input未设id导致的问题
    springmvc处理url请求步骤
    js中的变量提升(hoisting)
    auto semicolon insertion 自动分号补齐的坑
    $.ajax dataType设置为json 回调函数不执行
  • 原文地址:https://www.cnblogs.com/wanyp/p/10110476.html
Copyright © 2011-2022 走看看