
16. 算法与数据结构
小师兄.
语言学习开发路上的一个初学者。
展开
-
算法笔记(一)害死人不偿命的(3n+1)猜想
算法算是我比较薄弱的部分了,所以万丈高楼平地起,我要从最基本的算法学起来。做项目和有算法思想是不一样的,我会变得更好。每天一道算法题:输入一个数,偶数时则砍掉一半;奇数时,则(3n+1)砍掉一半,最后直到得到1.问,进行了多少次?思路:对于3n+1这样的题目,我第一感觉就是将运算部分封装起来,然后主函数循环调用书给的答案:#include <cstdio.h>int main()...原创 2018-05-26 16:27:08 · 9425 阅读 · 2 评论 -
算法笔记(十六)数组(find/insert/delete)
1、普通数组查找:package 数组;//普通数组insert/delete/findpublic class GeneralArray { private int[] a; private int size; //数组大小 private int nElem; //数组中有多少项 public GeneralArray(int max) { this.a = ...原创 2018-11-29 13:50:27 · 804 阅读 · 0 评论 -
算法笔记(十五)查询字符串出现次数
题述:给出N个字符串(由恰好三位大写字母组成),再给出M个查询字符串,问每个查询字符串在N个字符串中出现的次数。代码:#include <cstdio>const int max=100;char S[max][5], temp[5];int hashTable[26*26*26+10];//将字符串转化为整数int hashFunc(char S[], int len){ int i...原创 2018-06-10 13:15:07 · 646 阅读 · 0 评论 -
算法笔记(十四)字符串hash初步
将一个字符串S映射为一个整数:(1)大写字母“A~Z”:A~Z视为0~25,将26个字符对应到二十六进制,按照二十六进制转换为十进制:代码:int hashFunc(char S[], int len){ int id=0; for(int i=0; i<len; i++) { id = id*26 +(S[i] - 'A'); } retur...原创 2018-06-09 21:54:44 · 605 阅读 · 0 评论 -
算法笔记(十三)哈希冲突
1、哈希函数理解:将元素通过一个函数转换为整数,使该整数可以尽量唯一地代表这个元素。(转换前key,转换后H(key))H为散列函数2、转换的函数:(1)直接定址发法(恒等变换):H(key)=key;(2)平方取中法:取key的平方的中间若干位作为hash值(3)除数留余法: H(key) = key%mod 将计算结果作为数组下标(TSize必...原创 2018-06-09 11:31:02 · 339 阅读 · 0 评论 -
算法笔记(十二)散列(hash)
1、题述:给个N个正整数,再给M个正整数,问M个数中的每个数分别是否出现过?代码:#include <cstdio>const int max=100010;bool hashTable[max]={false};int main(){ int n,m,x; scanf("%d%d",&n,&m); for(int i=0; i<n; i++){ scanf("...原创 2018-06-09 10:48:55 · 324 阅读 · 0 评论 -
算法笔记(四)图形输出
题目描述:在一行中给出正方形N(3<=N<=20),和组成正方形的在字符C,间隔一个空格。输出行数是列数的50%;样例:aaaaaaaaaaa aa aa aaaaaaaaaaa答案:#include <cstdio>int main(){ int col,row; //,col为行数 ,...原创 2018-06-01 16:02:53 · 358 阅读 · 0 评论 -
算法笔记(三)寻找X
题目描述:输入n,输入一组数据(包含n个数据),给出一个数X,查找X在数组中的下标;标准答案:#include <cstdio>const int max=210;int a[max]; int main(){ int x, n; while(scanf("%d", &n) != EOF){ { for(int i=0; i<n; i++) scanf("%d", ...原创 2018-06-01 10:47:50 · 395 阅读 · 0 评论 -
算法笔记(十一)sort函数考场排名
题目:有n个考场,每个考场有若干数量的考生。现在给出各个考场中的考生的准考证号与分数,要求所有考生按照考生分数从高到低排序,并按顺序输出所有考生的准考证号,排名,考场号以及考场内排名。思路:在student结构体类型中存放题目信息(准考证号,分数,考场号,考场内排名)分数不相同时,按照分数从大到小排,否则按照学号从小到大排序代码:#include <cstdio>#include &l...原创 2018-06-07 11:08:43 · 320 阅读 · 0 评论 -
算法笔记(十)插入排序
插入排序: 1 2 3 4 5 6 理解:插入排序,我的理解是一种交换选择排序。(1)从1,2两个元素开始,比较1,2元素大小,小的则交换到一个位置(2)2,3两个元素,比较两个元素大小,若2小于3则不变,否则2元素向后一位;然后,在比较1和3元素,若1小则3交换到2位置,若1大于3则,3到1位置,1,2两个元素向后移一位。同理依次比较。经过我自己理解...原创 2018-06-06 21:16:41 · 155 阅读 · 0 评论 -
算法笔记(九)选择排序
选择排序: 对于一个序列A中的元素A[1]~A[n],令i从1到n枚举,进行n趟操作,每趟从待排序部分[i, n]中选择最小的元素,令其与待排序部分的第一个元素A[i]进行交换,这样元素A[i]就会与当前有序区间[1, i-1]形成新的有序区间[1, i-1]。代码:void selectSort(){ for(int i=0; i<=n; i++){ int ...原创 2018-06-06 10:23:33 · 153 阅读 · 0 评论 -
算法笔记(二)挖掘机技术哪家强
1、原创 2018-05-30 10:38:07 · 376 阅读 · 0 评论 -
算法笔记(八)说反话(字符串处理)
题述:输入:hello world here I come输出:come I here world hello代码:#include <cstdio>#include <cstring>int main(){ char str[90]; gets(str); int len = strlen(str), r=0, h=0; //r为行,h为列 c...原创 2018-06-05 09:28:19 · 337 阅读 · 0 评论 -
算法笔记(七)字符串处理
回文串题述:读入一串字符串,判断是否为回文串;“回文串”是一个正反都一样的在字符串;样例:输入:123454321输出:YES答案:#include <cstdio>#include <cstring>const int max=256;bool HW(char str[]){ int len=0; len = strlen(str); int blen=len/2; fo...原创 2018-06-04 10:28:06 · 409 阅读 · 0 评论 -
算法笔记(六)进制转换
两种情况:(1)将P进制 x 转换为Q进制 数据要分两步走: 1>将P进制数在转化为10进制数y: 十进制数形式为: y = d1d2d3d4d5d6d7............dn 同可以写为: y = d1*10^(n-1) + d2*10^(n-2)+............+dn-1*10 + dn; P进制数x为a1a2a3a4a5a6....原创 2018-06-04 08:44:01 · 4538 阅读 · 0 评论 -
算法笔记(五)日期处理(差值)
题目描述:有两个日期,求日期之间的差值,日期格式:YYYYMMDD样例:输入:2013010120130105输出:5答案:#include <cstdio>int month[13][2]={ //平年和闰年的每个月的天数 {0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30}, {3...原创 2018-06-03 21:55:04 · 451 阅读 · 1 评论 -
MySQL索引背后的数据结构及算法原理
摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分。第...转载 2019-06-10 16:15:40 · 126 阅读 · 0 评论