查找算法

算法训练 数组查找及替换

梦想的初衷 提交于 2020-02-03 02:39:11
数组查找及替换 Description 给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间,替换为对应字母。元素个数不超过100,b在1至100之间。 Input 第一行为数组元素个数和整数b 第二行为数组各个元素 Output 按照要求输出 Sample Input 1 7 2 77 11 66 22 44 33 55 Sample Output 1 11 33 55 M 代码 # include <stdio.h> # include <string.h> # include <stdlib.h> # define N 100 int a [ N ] , n , b , j = 0 ; int a1 [ N ] ; void del_chick ( ) { int i ; for ( i = 0 ; i < n ; i ++ ) { if ( ( a [ i ] % b ) != 0 ) { a1 [ j ] = a [ i ] ; j ++ ; } } } void v_sort ( ) { int i , k , t ; for ( i = 0 ; i < j - 1 ; i ++ ) { for ( k = 0 ; k < j - i - 1 ; k ++ ) { if ( a1 [

MySQL

a 夏天 提交于 2020-02-02 09:30:47
一、索引 B+ Tree 原理 MySQL 索引 索引优化 索引的优点 索引的使用条件 二、查询性能优化 使用 Explain 进行分析 优化数据访问 重构查询方式 三、存储引擎 InnoDB MyISAM 比较 四、数据类型 整型 浮点数 字符串 时间和日期 五、切分 水平切分 垂直切分 Sharding 策略 Sharding 存在的问题 六、复制 主从复制 读写分离 参考资料 一、索引 B+ Tree 原理 1. 数据结构 B Tree 指的是 Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层。 B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。 在 B+ Tree 中,一个节点中的 key 从左到右非递减排列,如果某个指针的左右相邻 key 分别是 key i 和 key i+1 ,且不为 null,则该指针指向节点的所有 key 大于等于 key i 且小于等于 key i+1 。 2. 操作 进行查找操作时,首先在根节点进行二分查找,找到一个 key 所在的指针,然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出 key 所对应的 data。 插入删除操作会破坏平衡树的平衡性,因此在插入删除操作之后

查找-之有序表查找

三世轮回 提交于 2020-02-02 04:31:57
待查找的表是 有序排列 的 解决的方法1: 折半查找/二分法查找 其中线性表采用的是 顺序存储 //C int Binary_Search(int *a,int n,int key) { int low,high,mid; //边界的界定 low=1; high=n; while(low<=high) { mid=(low+high)/2 if(key<a[mid])//待查的数小于中间的值,说明数据在待查表的左边 high=mid-1; else if(key>a[mid])//待查的数大于中间的值,说明数据在待查表的右边 low=mid+1; else return mid } return 0; } 算法复杂度分析 时间复杂度:O(log(n)) 每次划分为一半 故 2^x=n 则x=log2(n) 空间复杂度:O(1) 解决的方法2: 插值查找 二分法查找mid=(low+high)/2=low+1/2(high-low) 其中的1/2修改为 (key-a[low])/(a[high]-a[low]) mid= low+ (key-a[low])/(a[high]-a[low]) (high-low) 依据查找的关键字key和查找表中最大最小关键字比较后的查找方法 表长较大,关键字分布比较均匀的查找表,效果比二分法好 解决方法3: 斐波那契查找 斐波那契数列 采用了

索引与优化

≡放荡痞女 提交于 2020-02-02 02:02:19
参考: http://blog.csdn.net/xluren/article/details/32746183 http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢。还是以WordPress来说,其多个数据表都会对经常被查询的字段添加索引,比如wp_comments表中针对5个字段设计了BTREE索引。 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条数据,平均每条数据源都重复大概10万次,表结构比较简单,仅包含一个自增ID,一个char类型,一个text类型和一个int类型,单表2G大小,使用MyIASM引擎。开始测试未添加任何索引。 执行下面的SQL语句: 1 mysql> SELECT id,FROM_UNIXTIME( time ) FROM article WHERE a.title= '测试标题' 查询需要的时间非常恐怖的,如果加上联合查询和其他一些约束条件,数据库会疯狂的消耗内存

【Python数据结构与算法笔记day33】6.8. 搜索

我怕爱的太早我们不能终老 提交于 2020-02-01 19:26:12
文章目录 6.8. 搜索 搜索 二分法查找 二分法查找实现 (非递归实现) (递归实现) 时间复杂度 6.8. 搜索 搜索 搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找 二分法查找 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 二分法查找实现 (非递归实现) def binary_search ( alist , item ) : first = 0 last = len ( alist ) - 1 while first <= last : midpoint = ( first + last ) / 2 if alist [ midpoint ] == item : return True elif item < alist [

红黑树算法原理

拜拜、爱过 提交于 2020-02-01 15:58:53
原文: 红黑树深入剖析及Java实现 ,本文修改了原文的一些小错误,如果想看红黑树的Java实现可以到原文去看。 红黑树是平衡二叉查找树的一种 。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小,右节点的值要比父节点的值大。 它的高度决定了它的查找效率。 在理想的情况下,二叉查找树增删查改的时间复杂度为O(logN)(其中N为节点数),最坏的情况下为O(N)。当它的高度为logN+1时,我们就说二叉查找树是平衡的。 BST的查找操作 T key = a search key Node root = point to the root of a BST while ( true ){ if (root== null ){ break ; } if (root.value.equals(key)){ return root; } else if (key.compareTo(root.value)< 0 ){ root = root.left; } else { root = root.right; } } return null ; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 从程序中可以看出,当BST查找的时候

顺序查找

孤街浪徒 提交于 2020-02-01 08:38:42
基本思想: 从线性表的一端向另一端逐个将关键码与给定值进行比较, 若相等,则查找成功,给出该记录在表中的位置; 若整个表检测完仍未找到与给定值相等的关键码,则查找失败,给出失败信息。 改进的顺序查找 基本思想:设置“哨兵”。 哨兵就是待查值, 将哨兵放在查找方向的尽头处, 免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。 顺序查找的优点 : 算法简单而且使用面广。 对表中记录的存储结构没有任何要求,顺序存储和链接存储均可; 对表中记录的有序性也没有要求,无论记录是否按关键码有序均可。 顺序查找的缺点: 平均查找长度较大,特别是当待查找集合中元素较多时,查找效率较低。 来源: CSDN 作者: 张同学1111 链接: https://blog.csdn.net/weixin_45655152/article/details/103752373

求素数算法-网摘

自闭症网瘾萝莉.ら 提交于 2020-02-01 04:10:42
摘自: http://www.cnblogs.com/luluping/archive/2010/03/03/1677552.html 浅析求素数算法 注意: 如果没有特殊说明, 以下讨论的都是针对n为素数时的时间复杂度 1. 根据概念判断: 如果一个正整数只有两个因子, 1和p,则称p为素数. 代码: bool isPrime(int n) { if(n < 2) return false; for(int i = 2; i < n; ++i) if(n%i == 0) return false; return true; } 时间复杂度O(n). 2. 改进, 去掉偶数的判断 代码: bool isPrime(int n) { if(n < 2) return false; if(n == 2) return true; if(n%2==0) return false; for(int i = 3; i < n; i += 2) if(n%i == 0) return false; return true; } 时间复杂度O(n/2), 速度提高一倍. 3. 进一步减少判断的范围 定理: 如果n不是素数, 则n有满足1<d<=sqrt(n)的一个因子d. 证明: 如果n不是素数, 则由定义n有一个因子d满足1<d<n. 如果d大于sqrt(n), 则n/d是满足1<n/d<

浅析求素数算法

那年仲夏 提交于 2020-02-01 04:09:26
浅析求素数算法 转载: http://www.linuxsir.org/bbs/showthread.php?t=278294 注意: 如果没有特殊说明, 以下讨论的都是针对n为素数时的时间复杂度 1. 根据概念判断: 如果一个正整数只有两个因子, 1和p,则称p为素数. 代码: 1 bool isPrime(int n)2 {3 if(n < 2) return false;4 for(int i = 2; i < n; ++i)5 if(n%i == 0) return false;6 return true;7 } 时间复杂度O(n). 2. 改进, 去掉偶数的判断 代码: bool isPrime(int n) { if(n < 2) return false; if(n == 2) return true; for(int i = 3; i < n; i += 2) if(n%i == 0) return false; return true;} 时间复杂度O(n/2), 速度提高一倍. 3. 进一步减少判断的范围 定理: 如果n不是素数, 则n有满足1<d<=sqrt(n)的一个因子d. 证明: 如果n不是素数, 则由定义n有一个因子d满足1<d<n. 如果d大于sqrt(n), 则n/d是满足1<n/d<=sqrt(n)的一个因子. 代码: bool isPrime

09-07 元类

爷,独闯天下 提交于 2020-02-01 02:02:24
文章目录 一 元类介绍 二 class关键字创建类的流程分析 四 自定义元类控制类StanfordTeacher的创建 五 自定义元类控制类StanfordTeacher的调用 五 再看属性查找 六 作业 一 元类介绍 什么是元类呢?一切源自于一句话:python中一切皆为对象。让我们先定义一个类,然后逐步分析 class StanfordTeacher ( object ) : school = 'Stanford' def __init__ ( self , name , age ) : self . name = name self . age = age def say ( self ) : print ( '%s says welcome to the Stanford to learn Python' % self . name ) 所有的对象都是实例化或者说调用类而得到的(调用类的过程称为类的实例化),比如对象t1是调用类StanfordTeacher得到的 t1 = StanfordTeacher ( 'lili' , 18 ) print ( type ( t1 ) ) #查看对象t1的类是<class '__main__.StanfordTeacher'> 如果一切皆为对象,那么类StanfordTeacher本质也是一个对象,既然所有的对象都是调用类得到的