没有合适的资源?快使用搜索试试~ 我知道了~
这个是我自己整理的算法模板,可能比不上网上其他人的模板,但是初学者可以看看,有需要的同学可以下载
资源推荐
资源详情
资源评论
康托展开及逆康托展开
康托展开
康托展开表示的是当前排列在 个不同元素的全排列中的名次。比如 在这
个数所有排列中排第 。
那么,对于 个数的排列,康托展开为:
其中 表示第 个元素在未出现的元素中排列第几。举个简单的例子:
对于排列 来说, 在 中排第 ,注意从 0 开始, 在 中排第 ,
在 中排第 , 在 中排第 ,即:
,得到的 ans 是比原数小的数,要得到第几个数应
该加一。
代码实现:
!
"
#
$$%$
&&
%&%%&&
'%('(
&&
& !!
"
&))返回该字符串是全排列中第几大,从 开始
"
*
'("
#
+,-.-$
"
通过康托逆展开生成全排列
如果已知 '-/-$-0-$-#-$-1-(,2,能否推出 '-1-$-0-$-/-$-#-(呢?
首先要减一。
因为已知 2 3& 3& 3& 3,所以问题变成由 能
否唯一地映射出一组 、、、?如果不考虑 的取值范围,有
3& 3& 3& 3
3& 3& 3& 3
3&4 3& 3& 3
3& 3& 3& 3
3& 3& 3& 3
等等。但是满足 !的只有第一组。可以使用辗转相除的方法得到
,如下图所示:
知道了 、、、 的值,就可以知道 '(是子数组'-/-$-0-$-#-$-1-(中第
大的元素 -1-,'(是子数组 '-/-$-0-$-#-(中第 大的元素-0-,'(是子数
组 '-/-$-#-(中第 大的元素-/-,'(是子数组 '-#-(中第 大的元素-#-,所以
'-1-$-0-$-/-$-#-(。
代码实现:
!
"
5#'($*+
$$%
!&&
*+)!!
+,-.-$'(
%%!%&&
'%('%&(
*+*+.!!
"
+,-.-$'(
+,-6-
"
*
*+
'("
))如果有需要的话,先把数组 从小到大排列好
-.-$7*+
*+!!
#$*+
"
三点顺序---有向面积
现在给你不共线的三个点 /$0$# 的坐标,它们一定能组成一个三角形,
现在让你判断 /,0,# 是顺时针给出的还是逆时针给出的?
一种:
利用矢量叉积判断是逆时针还是顺时针。
设 /$8$0$8$#$8$则三角形两边的矢量分别是:
/0!$8!8$/#!$8!8
则 /0 和 /# 的叉积为: 的行列式
!$8!8
!$8!8
值为:! 8!8!8!8 !
利用右手法则进行判断:
如果 /0 /#$则三角形 /0# 是逆时针的
如果 /0 /#$则三角形 /0# 是顺时针的
如果…… ,则说明三点共线
另一种:
解析:
有向面积可以是正的,可以是负的,这取决于围成封闭图形的向
量。
如果三角形 /0# 三个顶点呈 逆时针 排列则有向面积为 正,顺
时针 排列则为 负,三点共线时 ,有向面积为 ;
设 /$80$8#$8三角形 /0# 有向面积为 ;则 的 倍
8& 8& 8! 8! 8! 8;
如果难记可以记它的行列式形式9
剩余20页未读,继续阅读
资源评论
Huris
- 粉丝: 6
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功