算法 基础

算法复杂度

时间复杂度:用来估计算法运行时间的一个单位;O(n)、O(1) 常见于for循环, 或者log(n)—常见于while循环。循环减半时复杂度为log(n)

常见时间复杂度排序  O(1) < O(logn)< O(n) < O(n^log n) < O(n^2) < O(n^2 log n ) < O(n^3)

空间复杂度:估算算法内存占用大小的单位;"空间换时间";

算法:完成算法基础模块后,算法优化是关键点(方法:查找算法模块中重复或者无效计算,用内层加判断替换)

递归算法:调用自身,结束条件 --- 汉诺塔,斐波那契数列

列表查找:顺序查找(for循环),二分查找(数据候选区二分data[:0],查找范围缩减一半)

排序l初级:冒泡、选择、插入;-------  思想:数据分区(有序区/无序区,已查找/未查找),数据比较,数据换位

排序高级:快速排序、堆排序、归并排序

#冒泡排序def  bubble_sort(li):
       for i in range(len(li)-1):   # i 表示第N趟,一共n或者n-1趟
            exchange = False
            for j in range(len(li) - i - 1):  #第i趟,无序区【0,n-i-1】 j 表示箭头 0- n-i-2
                 if li[j] > li[j+1]:
                     li[j],li[j+1] = li[j+1],li[j]
                     exchange = True
            if not exchange:
                 break#选择排序def select_sort(li):       for i in range(len(li)-1):  #n 或者n-1 趟            min_pos = i #第i趟无序区范围 i~最后  #min_pos 更新为无序区最小值位置            for j in range(i+1,len(li)):                 if li[j] < li[min_pos]:                     min_pos = j            li[i],li[min_pos] = li[min_pos],li[i]#插入排序def insert_sort(li):       for i in range(1,len(li)): #i表示摸到的牌的下标            tmp = li[i] #摸到的牌            j = i - 1            while j >= 0 and li[j] > tmp: #只要往后挪就循环, 2个条件都得到满足                  li[j+1] = li[j]  #如果 j = -1 停止挪,如果li[j] 小了,停止挪                 j -= 1   #j位置在循环结束时要么是 -1,要么是一个比tmp小的值            li[j+1] = tmp

位运算: & | - ^

原文地址:https://www.cnblogs.com/Christbao/p/12283836.html

时间: 2024-10-12 15:49:33

算法 基础的相关文章

python小白-day4递归和算法基础

递归&算法基础 一.递归 递归函数的优点是定义简单,逻辑清晰.理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰. 使用递归函数需要注意防止栈溢出.在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧.由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出. 1 2 3 4 5 6 7 8 def calc(n):     print(n)     if n/2>1:         r

算法——基础篇——快速排序

快速排序是一个经常使用的算法,由于每次用的时候,都感觉没有理解清楚,特写一篇文章记录一下. 算法介绍 快速排序有点类似有冒泡排序,冒泡排序从相邻的两个元素比较,小的在左边,大的在右边,这个算法很容易理解.而快速排序它相当于是在一头一尾两边分别排序比较,比较的对象是当前元素值,和一个选定的key值,主题的思想就是通过跟key值比较,把大于key的值放在右边,小于的放在左边这样就完成了一次排序,接着在对key值左边的序列进行同样的操作,右边也是,最后便能将所有的元素给排好序,由于它每次排序,都会分成

算法——基础篇——二分查找

     二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.     首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表.重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功

第二章 算法基础 思考题2-1

package chap02; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Random; import org.junit.Test; /*** * 在归并排序中对小数组采用插入排序 * * @author xiaojintao * */ public class ques2_1 { /** * 归并排序算法 * * @param a * @return */ static void m

[算法学习笔记]算法基础知识

算法基础知识 算法的五大要素 有穷性:算法必须能够在有限个步骤内完成. 确定性:算法的每一步必须有确定的定义. 输入 输出 可行性:算法的每个步骤都必须能分解为基本的可执行操作,每个步骤都必须能在有限时间内完成 循环不变式 循环中的循环不变式可以帮助我们理解算法的正确性.为了证明算法的正确,必须证明循环不变式的三个性质: 1. 初始化:循环不变式在循环开始之前是正确的. 2. 保持:循环不变式在循环的每一次迭代开始之前是正确的. 3. 终止:在循环结束时,不变式会给出一个可以对判断算法是否正确有

01.数据结构概念与算法基础

数据结构概念与算法基础 一.数据结构概念 1.数据:是描述客观事务的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合.数据不仅仅包括整型.实型等数值类型,还包括字符及声音.图像.视频等非数值类型. 2.数据元素:是组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理,也被成为记录.比如畜类中,牛.马.羊都属于数据元素. 3.数据项:一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位.比如人这样的数据元素,可以有眼.耳.鼻等数据项. 4.数据对

编程算法基础-一刀切法

1.5一刀切法 编程和编筐一样,处理边缘问题相同重要. 程序逻辑 開始 中间 结束 一刀切法上式 用空格或逗号分隔的串,提取为各个部分 abc ttt,kmd,uuu xyz 切分成每一部分. /* * "abc ttt,kmd,uuu xyz" 用逗号或者空格隔开字符串 分解为各个部分 */ package OneCut; public class SplitString { public static void main(String[] args) { // 一刀切(上式:事先补

编程算法基础-2.7作业-通讯编码-格式检查

作业 通信编码 如果通信的物理设备仅仅能表示1和0两种状态. 1和0状态都不能持续太久,否则物理设备会出现问题.因而人们设计出一种变通的方法: 多个0后人为地补入一个1 多个1后人为地补入一个0 当然,在解码的时候,要对应处理. 以下我们用串来模拟这个算法. 如果有须要通信的串: String s = "1010100100100001011110100010101010100001010101111"; 连续的3个0,后须要插入一个1 连续的3个1,后须要输入一个0 10101001

第二章 算法基础 思考题2-4(逆序对)

1 package chap02; 2 3 import static org.junit.Assert.*; 4 5 import java.util.Arrays; 6 7 import org.junit.Test; 8 9 public class ques2_4 { 10 /** 11 * 逆序对,将一个序列中的所有逆序对打印输出 12 * 13 * @author xiaojintao 14 * 15 */ 16 static void printReverseOrder(int[]

编程算法基础3.3-测试驱动风格

cocos2d-x升级到3.0后变化不小,除了API的变化(主要是函数和类名称变化,以及使用了C++11的不少特性,function/bind, lamda, std::thread-),创建和编译工程也做了一些简化调整.本文主要讨论一下cocos2d-x3.0 在android平台开发的环境设置及工程创建编译流程. 1.   初始设置 除了2.x所需要的python,jdk, android sdk和ndk之外,还需要部署apache-ant. 1)      在path中设置好java环境变