二分法

算法-二分法

匿名 (未验证) 提交于 2019-12-02 23:48:02
算法:解决问题的高效率的方法 1. 找元素是否在一个列表中 普通方法 for i in l : l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] for i in l: if num == i: print("找到了:%s" % i) 2.二分法: 1.容器中的数字必须有大小顺序2.依次和中间的数进行比较大小,小于取左,大于取右排序: sort()升序,sort(reverse=Ture)降序,reverse()反转,逆序排列 l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]l.sort() # 重新升序排序 def get_num(l, num): # 取列表中间数索引位置 num_middle = len(l) // 2 # 这个数不在列表中,切到后面就是空列表,空列表就直接返回 if not l: return print("列表中找不到", num) print(l) # 打印每次切片后的列表 # 判断大小 if num > l[num_middle]: # 切片右半部 right_num = l[num_middle + 1:] get_num(right_num, num) elif num < l[num_middle]: # 切去左半部 left_num = l[:num_middle] get_num(left_num,

二分法

匿名 (未验证) 提交于 2019-12-02 23:48:02
一、二分法 二分法:容器类型里面的数字必须有大小顺序,然后查找元素的时候一分为二,以中间为界看元素在哪边,多次二分后即可找到,提升效率 野生二分法:取名不能见名知意!!!#在列表中找某个元素 #在列表中找某个元素 l = [1,3,5,12,57,89,101,123,146,167,179,189,345] def get_num(l,target_num): if not l: print('你给的工资 这个任务怕是没法做') return # 获取列表中间的索引 print(l) middle_index = len(l) // 2 # 判断target_num跟middle_index对应的数字的大小 if target_num > l[middle_index]: # 切取列表右半部分 num_right = l[middle_index + 1:] # 再递归调用get_num函数 get_num(num_right,target_num) elif target_num < l[middle_index]: # 切取列表左半部分 num_left = l[0:middle_index] # 再递归调用get_num函数 get_num(num_left, target_num) else: print('find it',target_num) get_num(l

DVWA 攻击平台测试

匿名 (未验证) 提交于 2019-12-02 23:06:17
DVWA是OWASP官方提供的一个做渗透测试的平台 1.SQL injection 1.利用特殊字符验证绕过SQL 当我们输入1的时候 ID有一个回显 当我们接着输入''的时候,SQL回显报错 初步可以判断这里存在SQL注入点 绕过了验证 利用”order by 1。2。3.。。-- “猜测一下数据的列数 当输入1‘ order by 2-- 时和第一种情况是一样的,验证到3的时候 可以获得这个数据库中含有2列数据 3.通过得到连接数据库账户信息、数据库名称、数据库版本信息。利用user(),及database(),version()等三个内置函数。 可以查询到当前SQL版本是5.5.53 操作系统 信息 1'and 1=2 union select 1,@@global.version_compile_os from mysql.user -- 5.测试连接数据库权限: 1’ and ord(mid(user(),1,1))=114 -- 猜测数据库中是否存在root用户若返回正常说明是root 6.查询mysql数据库,所有数据库名字:这里利用mysql默认的数据库infromation_scehma,该数据库存储了Mysql所有数据库和表的信息。 这个数据库中所有成员的信息已经显示出来了。 以上是注入一个SQL数据库的所有步骤。总结一下: 1、寻找注入点

POJ3104Drying (二分法的应用)

匿名 (未验证) 提交于 2019-12-02 22:56:40
Drying It is very hard to wash and especially to dry clothes in winter. But Jane is a very smart girl. She is not afraid of this boring process. Jane has decided to use a radiator to make drying faster. But the radiator is small, so it can hold only one thing at a time. Jane wants to perform drying in the minimal possible time. She asked you to write a program that will calculate the minimal time for a given set of clothes. n ai k k The task is to minimize the total time of drying by means of using the radiator effectively. The drying process ends when all the clothes are dry. Input n n ai ai

python学习(二分法)

匿名 (未验证) 提交于 2019-12-02 22:56:40
一. while循环二分   二分查找.每次能排除掉一半的数据.查找的效率非常高.但是局限性比较大,必须是有序的序列才能用二分查找.   要求:     要查找的序列必须是有序序列. # 二分法查找某一个数的索引位置 lst = [ 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 111 , 122 , 133 , 144 , 155 , 166 , 177 , 188 , 199 ] n = 122 left = 0 right = len ( lst ) - 1 # 以索引为边界 while left <= right : middle = ( left + right ) // 2 # 取一个在中间位置的索引 if n > lst [ middle ]: # 如果要查找的数大于列表中索引在中间的元素 left = middle + 1 # 重新定义边界,将左边界向右边挪一位 elif n < lst [ middle ]: # 如果查找的数小于中间值 right = middle - 1 # 重新定义边界,将右边界向左边挪一位 else : # 如果查找的数等于中间值,直接打印middle print ( ‘ 在索引为 ‘ + str ( middle ) + ‘ 的位置上! ‘ ) break else : print ( ‘

Python-二分法

匿名 (未验证) 提交于 2019-12-02 22:51:30
在数组中查找符合的数字,并返回序列号 def find(list, item): low =0 hith =len(list)-1 while low <= hith: mid =int((low + hith) /2) if list[mid] == item: return mid if list[mid] < item: low = mid +1 else: hith = hith -1 return None list = [1,2,3,4,5,6,7,8,9] item =7 print(find(list, item)) 来源:博客园 作者: M_派森 链接:https://www.cnblogs.com/April-Chou-HelloWorld/p/11563548.html

递归与二分法

匿名 (未验证) 提交于 2019-12-02 22:11:45
递归 自己调用自己 递归的入口(参数)和出口(return) 树状结构的遍历 import os def func(lujing, n): # "d:/a/" lst = os.listdir(lujing) # 打开文件夹. 列出该文件夹内的所有文件名 for el in lst: # el是文件的名字. b, c path = os.path.join(lujing, el) # 还原文件路径"d:/a/b" if os.path.isdir(path): # 判断路径是否是文件夹 print("..." * n,el) # 显示文件夹的名字 func(path, n + 1) # 在来一次 else: print("\t" * n,el) # 显示文件 func("d:/a", 0) 二分法 掐头结尾取中间 查找效率非常的高 不使用递归进行二分法 lst = [1,3,5,7,12,36,68,79,132,345,567] n = int(input("请输入一个数")) left = 0 right = len(lst) - 1 while left <= right: mid = (left + right)//2 if n > lst[mid]: left = mid + 1 elif n < lst[mid]: right = mid - 1 else: print

算法:二分法查找

匿名 (未验证) 提交于 2019-12-02 21:52:03
package com.atguigu;public class Main { public static void main(String[] args) { //二分法查找 //前提:所查找的数组必须有序 int[] arr=new int[]{-98,-34,2,34,54,66,79,105,210,333}; int dest=-3; int head=0;//初始的首索引 int end=arr.length-1; boolean isFlag=true; while(head<=end){ int middle=(head+end)/2; if(dest==arr[middle]){ System.out.println("找到指定的元素,位置为"+middle); isFlag=false; break; }else if(arr[middle]>dest){ end=middle-1; }else{ head=middle+1; } } if(isFlag){ System.out.println("很遗憾,没有找到"); } }} 来源:博客园 作者: Java后端小白 链接:https://www.cnblogs.com/helloworld0903/p/11456552.html

算法 - 二分法查找

岁酱吖の 提交于 2019-12-02 15:28:47
什么是二分法查找 免费小说网站 https://www.kuwx.net/ 二分法查找主要是为了快速查找给定数组内,期待值在数组中的位置(下标) 二分法查找通过对整个数组取中间值,判断期待值所在的范围并缩小范围,每次查找范围折半,直到范围的边界重合,得出期待值的位置,如果找不到返回null 二分法有一个先决条件是:数组内元素必须是有序的 简单图解 给定一个包含1,3,5,7,8,9这一个元素的有序数组,求得期待值7所在的位置,下边用绿块表示指针所在位置 若是按照直接遍历的方式,绿块会从数组的第一个下标开始比较,直到7所在的下标得到结果,遍历需要4次,下边演示下二分法的图示 第一次 ,取值范围为整个数组,取数组长度中间值(0+5)/2取整2作为下标 取中间值初始以数组的第一个下标与最后一个下标相加取中间值,如果不为整,舍去小数部分 比较期待值与下标为2的值大小,发现5<7,7这个值应在中间值的右侧 缩小查找范围为中间值+1与最大下标 第二次 ,范围缩小为原数组的一半,下标不变,取中间值(3+5)/2=4 下标4对应的值8,大于7,所以向左取范围最小下标3,最大下标4-1=3 第三次 ,取中间值(3+3)/2=3,下标3上的值恰好与期待值相等,返回下标3 虽然看起来只少了一次,原因在数组的长度小,另外就是期待值设置的小, 再举个长一点的例子,这里有1-100的数组,100个元素

Python实现二分法和黄金分割法

浪尽此生 提交于 2019-12-02 15:09:41
  运筹学课上,首先介绍了非线性规划算法中的无约束规划算法。二分法和黄金分割法是属于无约束规划算法的一维搜索法中的代表。    二分法: $$x_{1}^{(k+1)}=\frac{1}{2}(x_{R}^{(k)}+x_{L}^{(k)}-\Delta)$$ $$x_{2}^{(k+1)}=\frac{1}{2}(x_{R}^{(k)}+x_{L}^{(k)}+\Delta)$$      下面记录下用Python实现二分法和黄金分割法的代码。    来源: https://www.cnblogs.com/chester-cs/p/11751508.html