GT

第13周 【项目二】 验证分块查找算法

纵然是瞬间 提交于 2020-04-06 18:22:16
/* *Copyright (c)2017,烟台大学计算机与控制工程学院 *All rights reservrd. *作者:李欣豪 *完成时间:2017年11月30日 *版本号:v1.0 *问题描述: 运行并本周视频中所讲过的算法,观察结果并领会算法。 2、认真阅读并验证分块查找算法。请用22,4,23,11,20,2,15,13,30,45,26,34,29,35,26,36,55,98,56, 74,61,90,80,96,127,158,116,114,128,113,115,102,184,211,243,188,187,218,195,210,279,307,492,452,408,361,421,399,856,523,704,703,697,535,534,739(共n=56个数据,每块数据个数s=8)作为数据表,自行构造索引表,分别对查找61、739、200进行测试。 一、代码如下: #include <stdio.h> #define MAXL 100 //数据表的最大长度 #define MAXI 20 //索引表的最大长度 typedef int KeyType; typedef char InfoType[10]; typedef struct { KeyType key; //KeyType为关键字的数据类型 InfoType data; //其他数据

set, multiset 和 unordered_set, unordered_multiset

风流意气都作罢 提交于 2020-04-06 18:18:49
集合(Set) 是一种包含已排序对象的关联容器。 set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,它不会插入相同键值的元素,而采取忽略处理。 平衡二叉树的检索使用中序遍历算法,检索效率高于vector、deque和list等容器。 对于set容器中的键值,不可直接去修改!应该先删除该键值,再插入新的键值。 set提供了集合的交并补运算。 头文件为#include <set> 1.创建set集合对象 set <Element> s; Element容器中的数据类型(可以是int,double等系统自带的类型,也可以为自定义类型) 2.元素的插入和遍历 insert()插入元素 迭代器遍历 #include <iostream> #include <set> using namespace std; int main() { set <int> s; //建立set容器 s.insert(6);//插入6 s.insert(1);//插入1 s.insert(9);//插入9 s.insert(1);//插入1 for(set<int>::iterator it = s.begin(); it != s.end(); it++)//定义前向迭代器遍历输出 { printf("%d ",

kubernetes集群安装指南:docker-ce部署

半世苍凉 提交于 2020-04-06 18:18:29
docker是POD基本运行环境,kubernetes默认以dockerd作为runtime运行引擎,在安装docker-ce前必须先升级内核到最新lts版,这是因为为了让docker-ce支持数据存储类型overlay2,这里将会以二进制文件方式部署在所有的worker节点上部署docker-ce。 1. 准备工作 #################### Variable parameter setting ###################### DOCKER_INSTALL_PATH=/data/apps/k8s/docker SOFTWARE=/root/software VERSION=18.09.6 PACKAGE=docker-${VERSION}.tgz DOWNLOAD_URL=https://download.docker.com/linux/static/stable/x86_64/$PACKAGE MIRRORS1=https://docker.mirrors.ustc.edu.cn MIRRORS2=https://registry-mirrors.mo9.com USER=docker 2. 安装docker 准备docker-ce安装环境 # 1.Uninstall the original docker installation package

第13周 【项目四】 平衡二叉树相关算法

感情迁移 提交于 2020-04-06 18:05:10
/* *Copyright (c)2017,烟台大学计算机与控制工程学院 *All rights reservrd. *作者:李欣豪 *完成时间:2017年11月30日 *版本号:v1.0 *问题描述: 运行并本周视频中所讲过的算法,观察结果并领会算法。 认真阅读并验证平衡二叉树相关算法。 (1)由整数序列{43,52,75,24,10,38,67,55,63,60}构造AVL树; (2)输出用括号法表示的AVL树; (3)查找关键字55; (4)分别删除43和55,输出删除后用括号法表示的二叉排序树。 一、代码如下: #include <stdio.h> #include <malloc.h> typedef int KeyType; //定义关键字类型 typedef char InfoType; typedef struct node //记录类型 { KeyType key; //关键字项 int bf; //平衡因子 InfoType data; //其他数据域 struct node *lchild,*rchild; //左右孩子指针 } BSTNode; void LeftProcess(BSTNode *&p,int &taller) //对以指针p所指结点为根的二叉树作左平衡旋转处理,本算法结束时,指针p指向新的根结点 { BSTNode *p1,*p2; if

kubernetes集群安装指南:kubelet组件部署

隐身守侯 提交于 2020-04-06 18:02:13
kubelet是kubernetes中一个重要的组件。对pod容器的管理 ,执行交互式命令(如 exec、run、logs 等)都离不开它,kubelet 运行在每个 worker 节点上,负责接收 kube-apiserver 发送的请求,kubelet 在启动时会自动向 kube-apiserver 发送注册信息,内置的 cadvisor 统计和监控节点的资源使用情况。 1. 准备工作 特别说明:这里所有的操作都是在devops这台机器上通过ansible工具执行;kubelet在需要使用kubeconfig文件来认证访问kube-apiserver,因此需要为其开启证书轮转 为确保安全,部署时关闭了 kubelet 的非安全 http 端口,对请求进行认证和授权,拒绝未授权的访问(如 apiserver、heapster 的请求)。 环境变量定义 #################### Variable parameter setting ###################### KUBE_NAME=kubelet K8S_INSTALL_PATH=/data/apps/k8s/kubernetes K8S_BIN_PATH=${K8S_INSTALL_PATH}/sbin K8S_LOG_DIR=${K8S_INSTALL_PATH}/logs K8S_CONF

Java基础知识回顾之四 ----- 集合List、Map和Set

女生的网名这么多〃 提交于 2020-04-06 17:58:34
前言 在 上一篇 中回顾了Java的三大特性:封装、继承和多态。本篇则来介绍下集合。 集合介绍 我们在进行Java程序开发的时候,除了最常用的基础数据类型和String对象外,也经常会用到集合相关类。 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用。 集合类型主要有3种:List、Set、和Map。 它们之间的关系可用下图来表示: 注:Map不是collections的子类,但是它们完全整合在集合中了! List List 接口是继承于 Collection接口并定义 一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。 一般来说,我们在单线程中主要使用的List是ArrayList和LinkedList来实现,多线程则是使用Vector或者使用Collections.sychronizedList来装饰一个集合。 这三个的解释如下: ArrayList:内部是通过数组实现的,它允许对元素进行快随机访问。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。 LinkedList: 则是链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法

codeForces 165C.Another Problem on Strings (二分+前缀和)

人走茶凉 提交于 2020-04-06 17:48:36
题意: 给你一个整数K和一个只含01的字符串s,问你在这个字符串s中有多少个含有k个‘1’的子串。 思路: k和字符串长度都为10^6,所以暴力枚举所有子串不行,我们可先求一个前缀和sum统计到当前位置有多少个1,这样我们每次只需要用右端点R的sum[R]减去左端点L的sum[L-1],O(1)的复杂度就可以知道任意两个位置之间(也就是某个子串中)有多少个‘1’了,然后我们枚举子串起点i,然后对于每一个起点寻找sum[i - 1 ] + k的值有多少个,如果再去枚举复杂度太高,这里可以用两次二分第一个二分寻找到第一个不大于sum[i - 1] + k的位置pos1,第二个二分寻找到第一个大于sum[i - 1] + k 的位置pos2,那么pos2-pos1就是以i为起点的时候含有k个‘1’的子串个数。累加对于所有起点的pos2-pos1就是答案。 #include<bits/stdc++.h> using namespace std; const int MAXN = 1e6 + 5; int sum[MAXN]; int main() { int k; string s; while(cin>>k>>s) { int len = s.length(); sum[0] = s[0] - '0'; for(int i = 1; i < len; i++) sum[i] = sum

有环链表监测方法

不羁的心 提交于 2020-04-06 17:48:16
文章目录 有环链表 循环链表示例图 检测链表是否有环的两种方法 有环链表 代码地址 数据结构代码仓库 循环链表示例图 +-------------------------------------------------+ v | +---+ +---+ +---+ +---+ +---+ +---+ +---+ | 1 | -- > | 2 | -- > | 3 | -- > | 4 | -- > | 5 | -- > | 6 | -- > | 7 | +---+ +---+ +---+ +---+ +---+ +---+ +---+ 检测链表是否有环的两种方法 第一种快慢指针法 ​ 快慢指针法,每次走一步,另外一个指针每次走两步,或者更多,当两个指针能够指向同一个位置的时候,说明链表中存在环。 // 利用快慢指针的方法 int HasLoop2 ( LinkList L ) { LinkList p = L ; LinkList q = L ; while ( p != NULL && q != NULL && q -> next != NULL ) { p = p -> next ; if ( q -> next != NULL ) q = q -> next -> next ; printf ( "p:%d, q:%d \n" , p -> data , q -> data

python之字符串系列

主宰稳场 提交于 2020-04-06 17:44:45
python字符串 1.序列的操作 可通过len()函数验证长度,并通过索引操作得到各个元素 例如: S=’abcd’ 字符串赋值给变量S 偏移量a对应0,以此类推 Len(S) 验证长度 4 S[0] 索引(有正向和反向) ‘a’ S[1:3] 切片(偏移量从一开始包含一到三结束不包含三) ‘bc’ S+’xyz’ 支持加号合并 ‘abcxyz’ S*3 重复创建新字符串 ‘abcabcabc’ 2.不可变性 例子中没有任何操作对原始字符串进行改变.每个字符串都被定义为新的字符串作为其结果 即不能通过对字符串某一位置进行赋值来改变字符串,但可以通过建立新的字符串并以同一个变量名对其进行赋值,python在运行过程中会清理就的对象. 例如 S=’abc’ S[0]=’z’ 希望将S字符串的第0偏移位变成z(这样操作回报错) ...error.. S=’z’+S[1:] 可以重新赋值得到新的字符串 ‘zbc’ 注意:在核心类型中,数字,字符串,元组是不可变的(不可变性用来保证在程序中保持一个对象固定不变) ,列表和字典是可变的(可完全自由改变,体现灵活性) 3.类型特定的方法 字符串有一些独特的操作作为方法存在 例如:字符串的find方法是一个基本的子字符串查找操作(将返回一个传入子字符串的偏移量,或没有找到返回 -1 ) S.find(‘bc’) 1 (指偏移量是一) 例如

HDU ~ 2199 ~ Can you solve this equation?(二分+精度)

最后都变了- 提交于 2020-04-06 17:38:09
题意:给你一个Y,问有没有一个x且0<=x<=100使得8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,保留四位小数输出 思路:很容易看出函数在[0,100]是单调递增的,所以Y < F(0) 和Y > F(100)这两种情况无解,有解的时候二分找X就可以 #include<bits/stdc++.h> using namespace std; const double eps = 1e-8; double Y; double F(double x)//返回等号左边的值 { return 8.0*pow(x,4) + 7.0*pow(x,3) + 2.0*pow(x,2) + 3.0*x + 6.0; } int main() { int T; scanf("%d", &T); while(T--) { scanf("%lf", &Y); if(Y < F(0) || Y > F(100)){ printf("No solution!\n"); continue; }//没答案的情况 double l = 0.0, r = 100.0, m = l + (r - l) / 2.0; while(r - l > eps) { if(F(m) < Y) l = m + eps; else if(F(m) > Y) r = m - eps; else break