每日进步一点之灵魂拷问15之搜索技术

#1
搜索的主要技术有?

暴力法:
	很多问题只能用暴力法解决;
	小规模问题,暴力法完全够用;可以加快解题速度;
	把暴力法当作参照,可以试试暴力法,看是否能帮助产生灵感;
	暴力法可以产生数据,作为高级算法的验证法;
暴力法的主要操作是:
	BFS = 队列
	DFS = 递归栈

#2
递归求排列组合?

(1)让第一个数不同,得到n个数列;把第一个数和后面的每个数交换。
(2)忽视第一个数,对后面的n-1个数进行类似的操作。
(3)重复至用完所有数字

def perm(begin, end):
	if begin == end:
		num +=1
	else:
		for i in range(begin, end+1):
			nums[i] ,nums[begin] = nums[begin], nums[i]
			perm(begin+1, end)
			nums[i], nums[begin] = nums[begin], nums[i]

#3
打印n个数中,任意m个数的全排列。

当end = m+1

#4
5 & 1 << k 是什么意思?

#5
k & k-1 是什么意思?

消除二进制数的最右边的一个1;

#6
n = 0
while k:
k = k & k-1
n += 1
请问上一段代码n表示什么意思?

统计二进制数中,1的个数

#7
子集生成和组合问题
{a,b,c}
001 -> {c}
011 -> {b,c}
111 -> {a,b,c}

1. 一个 二进制数 对应 一个组合
2. n个元素的集合,有2^n个子集

for i in range(2**n):
	#对于每个二进制数,打印里面的所有1
	res = []
	for  j in range(n):
		if i &(1<<j)):
			res.append(nums[-j]) # the jth position from the rightest to left  
	print(res)
	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物琴弦光锥之外

给个0.1,恭喜老板发财

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值