如何使用分治的思想解决问题
如何求解序列的有序度?
- 比如 1,2,3 这组数据完全有序,(1,2),(1,3),(2,3)都是有序的,因此有序度为 3,逆序度为 0 。
- 比如 1,3,2 这组数据不完全有序,(1,3),(1,2)都是有序的,(3,2)是逆序的,因此有序度为 2,逆序度为 1 。
- 比如 3,2,1 这组数据完全无序,(3,1),(3,2),(2,1)是逆序的,因此有序度为 0,逆序度为 3 。
# !/usr/local/bin/python
# Time: 10/31/2019 9:44:19 PM
# Description:
# File Name: get_degree_of_order.py
yxd, nxd = 0, 0
yxd_pair ,nxd_pair = [],[]
def get_yxd_nxd(array):
global yxd,nxd
yxd, nxd = 0, 0
mergSortCounting(array[:], 0,len(array) -1)
print( f"原始数组{array} \n有序度为{yxd} : {yxd_pair}\n逆序度为{nxd} : {nxd_pair}")
return yxd,nxd
def mergSortCounting(array,low,high):
if low >= high:
return
middle = (low + high)// 2
mergSortCounting(array,low,middle)
mergSortCounting(array,middle+ 1,high)
merge(array,low,middle,high)
def merge(array,low,middle,high):
global yxd,nxd,yxd_pair,nxd_pair
array1 = array[low:middle+ 1]
len_array1 = len(array1)
array2 = array[middle+ 1:high+ 1]
len_array2 = len(array2)
i,i1,i2 = low, 0, 0
while i1 < len_array1 and i2 < len_array2:
if array1[i1] <= array2[i2]:
array[i] = array1[i1]
#在array2中找到比array1[i1]大的数据个数,并累加
yxd += len_array2 - i2
##增加对有序对的记录,方便理解。
for x in range(i2,len_array2):
yxd_pair.append((array1[i1],array2[x]))
i += 1
i1 += 1
else:
array[i] = array2[i2]
#在array1中找到比 array2[i2] 大的个数,并累加
nxd += len_array1 - i1
##增加对逆序对的记录,方便理解。
for x in range(i1,len_array1):
nxd_pair.append((array1[x],array2[i2]))
i += 1
i2 += 1
while i1 < len_array1:
array[i] = array1[i1]
i += 1
i1 += 1
while i2 < len_array2:
array[i] = array2[i2]
i += 1
i2 += 1
if __name__ == "__main__":
array_list = [ 2, 4, 3, 1, 5, 6]
get_yxd_nxd(array_list)
有序度为11 : [(2, 4), (2, 3), (1, 5), (1, 6), (5, 6), (2, 5), (2, 6), (3, 5), (3, 6), (4, 5), (4, 6)]
逆序度为4 : [(4, 3), (2, 1), (3, 1), (4, 1)]
分治算法思想的在技术上的应用
//key: document name
//string: document contents
for each word w in value :
EmitIntermediate(w, "1");
reduce( String key, Iterator values):
//key : a word
//values : a list of counts
for each v in values:
result += ParseInt(v);
Emit(AsString(result));
>>> def pow(x):
... return x*x
...
>>> def add(x,y):
... return x+y
...
>>>
>>> data = [ 1, 4, 7]
>>>
>>> list(map(pow,data))
[ 1, 16, 49]
>>> reduce(add,data)
12
分治算法思想的在生活中的应用
2、小到公司管理、大到国家管理。
3、美国大选。
4、团队目标实现。leader:设置一个团队的整体目标, module owner:分取整体目标的一个模块。developer:分取模块里面一个任务。整体目标 = 模块任务 A + 模块任务 B ,模块任务 A = 个人任务 A + 个人任务 B + 个人任务 C ,最后达到整个任务。
算法的魅力
推荐阅读:
觉得有用,记得点“在看”,也是一种支持。
欢迎关注公众号 somenzz,一起学 Python。
如何使用分治的思想解决问题相关推荐
- 第九周项目实践3 利用二叉树遍历思想解决问题
*Copyright (c)2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称: *作 者:邵雪源 *完成日期:2017年11月2日 *版 本 号:v1.0 ...
- 数据结构上机实践第九周项目3 - 利用二叉树遍历思想解决问题
利用二叉树遍历思想解决问题 学以致用,知行合一,学了知识就要会运用,否则跟背课文没什么区别,上次实践,做了二叉树递归遍历的算法实现,本次实践,将利用遍历思想解决问题,将遍历思想真正的运用到实际问题需求 ...
- 重建二叉树(分治算法思想)
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 示例 1: Input: preorder = [3,9,20,15,7 ...
- 从无到有算法养成篇-利⽤栈思想解决问题
一.什么时候用到栈思想? 栈的思想应⽤数据是线性的,问题可以利⽤栈的特性先进后出去解决问题! 二:思想实战 1.括号匹配检验:假设表达式中允许包含两种括号:圆括号与⽅括号,其嵌套顺序随意,即() 或者 ...
- 2.Python算法之分治算法思想
1.什么是分治算法? 2.为什么需要分治算法? 3.分治算法基础 4.分治算法的解题一般步骤 5. 用分治算法--求顺序表中的最大值 5. 用分治算法--判断某个元素是否在列表中 6. 用分治算法-- ...
- P2487 [SDOI2011]拦截导弹(cdq分治/计数问题思想)
P2487 [SDOI2011]拦截导弹 求解二维上的LIS,并且要求出每个点的选中概率. 首先对于每个点的选中概率,可以通过方案数计算,那么就是选中它的方案数除以总方案数.关键在于选中它的方案数怎么 ...
- 矩阵乘积计算(Strassen)
矩阵乘积计算(Strassen) 问题描述 已知A,B两个矩阵计算其乘积C? 矩阵乘积数学公式: 假设存在两个矩阵A为m×n矩阵,B为k×l矩阵,若需要计算AB则必须n=k,若需要计算BA必须 ...
- 算法原理:大数据处理的分治思想!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:周彬莲,东北石油大学,Datawhale优秀学习者 引言 MapR ...
- 「五大常用算法」一文图解分治算法和思想
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 前言 分 ...
最新文章
- 脑网络的可塑性——随时都在发生
- 百练OJ:2767:简单密码
- Extjs4:改变Grid单元格背景色(转载)
- java中四种引用类型
- 如何取消选中单选按钮?
- c语言switch编写个人所得税,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...
- 单片机c语言开关,10手把手教你学单片机的C语言程序设计_开关语句和循环语句.pdf...
- Java面向对象的三大特征
- android system image,android systemimage默認大小以及如何修改
- (连载0.2)加强版Python提取上市公司年报报告中财务报表
- 怎样夸学计算机的人,学学古人是怎样夸人有才的
- java 内存 检测_Java内存使用情况检测代码
- 一键加群android代码如何使用!
- 更改mui框架默认弹框样式,位置
- 个人团队贡献分+转会人员
- photoshopc cc抠头发丝详细教程
- Jirafeau一键式文件共享软件安装教程
- 北航计算机学院王雷,王雷-北京航空航天大学计算机学院
- 沪深A股重污染行业上市公司匹配结果2000-2021年(数据+代码)
- c语言中set 函数,C里边的STL里边的Set函数