java 位运算取8位_【算法】位运算与经典八皇后问题

2023-10-29

文章来源:https://mp.weixin.qq.com/s/14jQ1yLL4Cw6ufI2E3R-yg

作者:码海

前言

位运算在生产或算法解题中并不常见,不过如果你用得好,可以达到事半功倍的效果,而且位运算用得好,也可以极大地提升性能,如果在生产或面试中能看到使用位运算来解题,会让人眼前一亮,觉得你还是有点逼格的,巧用位运算,不仅会提升性能,还会让代码的可读性更好,达到四两拨千斤的效果,今天我们就来学学位运算在解题中的一些技巧,最后会用位运算来看看怎么解八皇后这道大 Boss 题,相信你看完肯定会有收获!

本文将会从以下几个方面来讲解位运算

  • 什么是位运算,位运算常见操作
  • 位运算使用技巧简介
  • 巧用位运算解算法题

什么是位运算,位运算常见操作

在现代计算机中所有的数据在内存中都是以二进制存在的,位运算就是直接对整数在内存中的二进制位进行操作,由于位运算直接对内存数据进行操作,无需转成十进制,因此使用位运算的处理速度是很快的。

举个简单的例子, 当我们要计算 6 & 4 的结果,在做位运算的时候首先要把 6,4 转成二进制,然后再做相应的位操作(与)。

基本的位运算有与、或、异或、取反、左移、右移这6种,介绍如下:

& 与:只有当两位都是 1 时结果才是 1,否则为 0 。

    0110&   0100-----------    0100

| 或:两位中只要有 1 位为 1 结果就是 1,两位都为 0 则结果为 0。

    0110&   0110-----------    0110

^ 异或:两个位相同则为 0,不同则为 1

    0110^   0100-----------    0010

~ 取反:0 则变为 1,1 则变为 0

~   0110-----------    1001

<< 左移:向左进行移位操作,高位丢弃,低位补 0

int a = 8;a << 3;移位前:0000 0000 0000 0000 0000 0000 0000 1000移位后:0000 0000 0000 0000 0000 0000 0100 0000

>> 右移:向右进行移位操作,对无符号数,高位补 0,对于有符号数,高位补符号位

unsigned int a = 8;a >> 3;移位前:0000 0000 0000 0000 0000 0000 0000 1000移位后:0000 0000 0000 0000 0000 0000 0000 0001int a = -8;a >> 3;移位前:1111 1111 1111 1111 1111 1111 1111 1000移位后:1111 1111 1111 1111 1111 1111 1111 1111

位运算使用技巧简介

接下来我们就由浅入深地来学习一下使用位运算的那些黑科技

1、 判断整型的奇偶性

使用位运算操作如下

if((x & 1) == 0) {    // 偶数} else {    // 奇数}

这个例子相信大家都见过,只需判断整型的第一位是否是 1 即可,如果是说明是奇数,否则是偶数

2、 判断第 n 位是否设置为 1

if (x & (1<

在上例中我们判断第一位是否为 1,所以如果要判断第 n 位是否 1,只要把 1 左移 n 位再作与运算不就完了。

3、 将第 n 位设置为 1

y = x | (1<

思路同第二步,先把 1 移到第 n 位再作或运算,这样第 n 位就肯定为 1。

4、 将第 n 位设置为 0

y = x & ~(1<

先将 1 左移到 第 n 位,再对其取反,此时第 n 位为 0,其他位都为 1,这样与 x 作与运算后,x 的第 n 位肯定为 0。

5. 将第 n 位的值取反

y = x ^ (1<

我们知道异或操作是两个数的每一位相同,结果为 0,否则是 1,所以现在把 1 左移到第 n 位,则如果 x 的第 n 位为 1,两数相同结果 0,如果 x 的第 n 位为 0,两数不相同,则为 1。来看个简单的例子

    01110101^   00100000    --------    01010101

如图示,第五位刚好取反

6、 将最右边的 1 设为 0

y = x & (x-1)

如果说上面的 5 点技巧有点无聊,那第 6 条技巧确实很有意思,也是在 leetcode 经常出现的考点,下文中大部分习题都会用到这个知识点,务必要谨记!掌握这个很重要,有啥用呢,比如我要统计 1 的位数有几个,只要写个如下循环即可,不断地将 x 最右边的 1 置为 0,最后当值为 0 时统计就结束了。

count = 0  while(x) {  x = x & (x - 1);  count++;}

先介绍这么多吧,如果大家对其他的位运算技巧感兴趣可以看看文末的参考链接

巧用位运算解算法题

接下来我们看看位运算在算法题中的应用。

1、 高频面试题:老鼠试毒

有 8 个一模一样的瓶子,其中有 7 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 3 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?

解题步骤如下:

1、 把这 8 个瓶子从 0 到 7 进行编号,用二进制表示如下

000001010011100101110111

2、 将 0 到 7 编号中第一位为 1 的所有瓶子(即 1,3,5,7)的水混在一起给老鼠 1 吃,第二位值为 1 的所有瓶子(即2,3,6,7)的水混在一起给老鼠 2 吃, 第三位值为 1 的所有瓶子(4,5,6,7)的水混在一起给老鼠 3 吃,现在假设老鼠 1,3 死了,那么有毒的瓶子编号中第 1,3 位肯定为 1,老鼠 2 没死,则有毒的瓶子编号中第 2 位肯定为 0,得到值 101 ,对应的编号是 5, 也就是第五瓶的水有毒。

这道题及其相关的变种在面试中出现地比较频繁,比如我现在把 8 瓶水换成 1000 瓶,问你至少需要几只老鼠才能测出有毒的瓶子,有了上述的思路相信应该不难,几只老鼠就相当于几个进制位,显然 2^10 = 1024 > 1000,即 10 只老鼠即可测出来。

2、 leetcode 232

给定一个数,判断它是否是可以用 2 的幂次方表示,可以返回 true,不可以返回 false,比如 8 = 2^3, 说明可以用 2 的幂次方表示,返回 true,9 不可以,所以返回 false。

解题分析:这题常规解法是做个循环不断地乘以 2 ,看下是否等于给定的值,如果等于说明是 2 的幂次方,否则如果不断累乘 2 后大于给定的值,说明不能用 2 的幂次方表示,时间复杂度是所做的累乘的次数,即 2^n >= 给定的值中的 n。

那是否有更快的解法呢?

上文的介绍中其实我们已经埋下伏笔了,没错用 x & (x-1),首先我们要发现能用 2 的幂次方表示的数的特点:它的所有位中有且仅有一位为 1,如

00001        2^0 = 100010        2^1 = 200100        2^2 = 401000        2^3 = 810000        2^3 = 16

如图示,所有 2 的幂次方最多只有一位为 1

明白了这一点, 我们的思路就简单了,由于符合 2 的幂次方的数只有一位为 1,x & (x-1) 是把最后一位 1 置为 0,所以只要做一次 x & (x-1) 运算,看它的值是否等于 0 即可,如果是 0 说明它可以用 2 的幂次方表示,否则不可以,代码如下:

if(x&(x-1)) { //使用与运算判断一个数是否是2的幂次方    printf("%d不是2的幂次方!", num);} else {    printf("%d是2的%d次方!", num, log2(num));}

只用一行代码即可搞定,方便了很多!

3、 leetcode 232

给定一个非负整数 num. 对于 0 ≤ i ≤ num 范围中的每个数字 i, 计算其二进制数中 1 的数目并将它们作为数组返回。输入: 5 输出: [0,1,1,2,1,2]

这题的常规解法相信大家都能猜到,就是从 0 到 num 循环一遍,求出每个数字 i 中 1 的数目。

如果用位运算怎么做呢,先来看下解法,然后我们再来分析为啥这样写,非常巧妙!

Python 代码

vector countBits(int num) {vector bits(num+1, 0);for (int i = 1; i<= num; i++) {bits[i] += bits[i & (i-1)] + 1;}}

Java 代码

public static int[] countBits(int num) {    int[] bits = new int[num+1];    Arrays.fill(bits, 0);    for (int i = 1; i <= num; i++) {        bits[i] = bits[i & (i-1)] + 1;    }    return bits;}

最关键的代码看这一行

bits[i] += bits[i & (i-1)] + 1;

这行代码是啥意思呢,i & (i-1) 是把 i 的最后一个值为 1 的位设为 0,不难发现整数「i & (i-1)」 中 1 的位数比 i 中 1 的位数少一个 ,所以要加 1(即 bits[i & (i-1)] + 1)。非常巧妙,这样从 1 开始走一遍循环即可,中间不要做任何针对变量 i 的 1 的个数的计算,只不过付出了一个 bits 数组的代价。这里也是利用了以空间换时间的思想。

4、 利用位运算来解八皇后问题

接下来我们来看看终级 Boss 题,如何用位运算来解八皇后问题,解题中运用到了非常多的位运算技巧,相信你学完会收获不少。

在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法

举个简单的下图所示的例子,如果在棋盘上放置一个皇后,则与这个皇后同一行,同一列,且皇后所在斜线经过的格子不能再放其他皇后。

如图示,在其中任意一行放置一个皇后,则与此皇后同行,同列,同对角线的都不允许再放其他皇后,图中蓝色区块不允许放其他皇后。

一般我们用回溯法解八皇后。这里简单介绍一下啥是回溯法。

在第一行从左到右先选择一个位置放置皇后,由于第一行放了皇后,第二行可放皇后的位置受到了限制(下图蓝色区块表示对应行的格子不能放皇后)

如图示,第二行放皇后的位置只能从第三个格子开始选

第二行我们选第三个格子放皇后,选完开始在第三行选,第三方可选的位置也受到了第一,二行皇后所放位置的影响

如图示,第三行只能从第五个格子开始放置皇后

同理,第三,四,五行都从左到右选择符合条件的的格子放置皇后,选完后问题来了,第六行所在行没有可选的位置了!如图示

怎么办呢,回溯!重新摆放第五行的皇后,将其放到第八格上

重新摆放后发现第六行还是没有符合条件的格子,咋办,我们知道第六行可摆放皇后的格子受第五行影响,而第五行受第四行摆放皇后位置的影响的,所以回溯到第四行,将皇后位置摆放到当前行的其他位置(第七格),再接着往下放 5,6,7,8 行的皇后。。。,只要不满足条件,改变上一层的的条件重新来,上一层调整后还是不符合条件,再调整上上层的。。。,调整完后重新往下递归选择,直到找到符合条件的,找到之后再在第一层换一个位置选皇后递归往下层选择执行,直到找到所有的解,这种不满足条件就回退上层调整再试的思想就是回溯法,可以看到回溯法一般是用递归实现的。

回溯算法有不少变种,这里我们重点介绍使用位运算的回溯算法,它是所有解法中最高效的!如果在面试中能使用位运算来解回溯算法,绝对会让面试官给你个大大的赞!

接下来是重点了,怎么用位运算来求解。

在以上回溯法的分析中,我们不难发现,在八皇后问题中,问题的关键是找出行可放皇后的格子。找到之后问题就解决了 90%,所以接下来我们就来看看怎么找这些可用的格子。

假设我们要求解第三行可放皇后的格子(说明一二行的皇后已放好了)那么第三行可放皇后的位置受到哪些条件的限制呢。显然在第一二行已放皇后的格子所在的列,左斜线,右斜线对应的方格都不能放皇后,如图示:

我们以 column 来记录所有上方行已放置的皇后导致当前行格子不可用的集合,所在列如果放了皇后,则当前行格子对应的位置为 1,否则为 0,同理,以 pie(撇,左斜线) 记录所有已放置的皇后左斜方向导致当前行格子不可用的集合, na(捺,右斜线) 表示所有已放置的皇后右斜方向导致当前行不可用的集合。则对于第三行来说我们有:

column = 10010000 (上图中的第一个图,第 1,4 列放了皇后,所以 1,4 位置为 1,其他位置为 0)
pie = 00100000 (上图中的第二个图,左斜线经过第三行的第三个方格,所以第三位为 1)
na = 00101000 (上图中的第三个图,右斜线经过第三行的第三, 五个方格,所以第三,五位为 1)

将这三个变量作或运算得到结果如下

10010000
| 00100000
| 00101000
-----------------------
10111000

也就是说对于第三层来说第 1,3,4,5 个格子不能放皇后。如图示

于是可知 column | pie | na 得到的结果中值为 0 的代表当前行对应的格子可放皇后, 1 代表不能放,但我们想改成 1 代表格子可放皇后, 0 代表不可放皇后,毕竟这样更符合我们的思维方式,怎么办,取反不就行了,于是我们有~(column| pie | na)。

问题来了,这样取反是有问题的,因为这三个变量都是定义的 int 型,为 32 位,取反之后高位的 0 全部变成了 1,而我们只想保留低 8 位(因为是 8 皇后),想把高位都置为 0,怎么办,这里就要用到位运算的黑科技了

~(column | pie | na) & ((1 << 8)-1)

后面的的 ((1<< 8) -1) 表示先把 1 往左移 8 位,值为 100000000,再减 1 ,则低 8 位全部为 1,高位全部为 0!(即 0011111111)再作与运算,即可保留低 8 位,去除高位。

费了这么大的劲,我们终于把当前行可放皇后的格子都找出来了(所有位值为 1 的格子可放置皇后)。接下来我们只要做个循环,遍历所有位为 1 的格子,每次取出可用格子放上皇后,再找下一层可放置皇后的格子,依此递归下去即可,直到所有行都遍历完毕(递归的终止条件)。

还有一个问题,已知当前行的 column,pie,na,怎么确定下一行的 column,pie,na 的值(毕竟选完当前行的皇后后,要确定下一行的可用格子,而下一行的可用格子依赖于 column,pie,na 的值)

上文可知,我们已经选出了当前行可用的格子(相应位为 1 对应的格子可用),假设我们在当前行选择了其中一个格子来放置皇后,此位置记为 p(如果是当前行的最后一个格子最后一个格子,则值为 1,如果放在倒数第二个,值为 10,倒数第三个则为 100,依此类推),则对于下一行来说,显然 column = column | p

那么 pie 呢,仔细看下图,显然应该为 (pie | p) << 1, 左斜线往下一行的格子延展时,相当于左移一位,

如图示:下一行的 pie 显然为 (pie | p) << 1。

同理 下一行的 na 为 (na | p) >> 1。

有了以上详细地解析,我们就可以写出伪代码了

void queenSettle(row, colomn,pie,na) {
N = 8; // 8皇后if (row >= N) {
// 遍历到最后一行说明已经找到符合的条件了
count++;return
}
// 取出当前行可放置皇后的格子
bits = (~(colomn|pie|na)) & ((1 << N)-1)while(bits > 0) {
// 每次从当前行可用的格子中取出最右边位为 1 的格子放置皇后
p = bits & -bits
// 紧接着在下一行继续放皇后
queenSettle(row+1, colomn | p, (pie|p) << 1, (na | p) >> 1)
// 当前行最右边格子已经选完了,将其置成 0,代表这个格子已遍历过
bits = bits & (bits-1)
}
}

一开始传入 queenSettle(0,0,0,0) 这样即可得到最终的解。伪代码写得很清楚了,相信用相关语言不难实现,这里就留给大家作个练习吧。

总结

本文带大家由浅入深地完成了位运算的学习,掌握好位运算不仅仅是为了提升逼格,还能极大地提升效率,位运算也广泛地应用于代码编写中,运用得当能极大地简化代码,且可读性更好,限于篇幅关系,这里不展开,大家如有兴趣可参考文末的链接。

如有帮助,欢迎大家关注公号哦。之后将会讲解大量算法的解题思路,希望我们一起攻克算法难题!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java 位运算取8位_【算法】位运算与经典八皇后问题 的相关文章

  • Java实现记忆化搜索

    记忆化搜索 是在使用递归搜索或者类似的情况下 使用一般的递归或许需要太多的时间与内存 这时我们就可以使用记忆化搜索 其本质为在递归搜索中 如果遇到了没有搜索过的 进行搜索并在内存中记录结果 如果之前搜索过 就直接调用结果 题目描述 对于一个
  • iPhone和ipad连接【华北理工大学】校园网快捷指令教程

    该教程仅适用于华北理工大学校园网 1 下载快捷指令 https www icloud com shortcuts 557cc9bf52b9474baae949773049cca3 用浏览器打开上面的链接 如果在QQ中打开的话 下载完了之后在
  • 自动化测试碰到比较难解决的问题是什么?如果出现这些问题给出你的解决方案?

    问题 自动化测试碰到比较难解决的问题是什么 如果出现这些问题给出你的解决方案 回答 比较难以解决的问题是 1 自动化测试没有达到预期目标 既没有节约人力 也没有提高产品质量 自动化测试脚本会频繁报错 但错误原因多半是脚本问题而不是产品质量问
  • C语言练习题(13)如果 x=2014 ,下面函数的返回值是( )A: 20 B: 21 C: 23 D 25(非常详细的讲解)

    1 如果 x 2014 下面函数的返回值是 int fun unsigned int x int n 0 while x 1 n x x x 1 return n A 20 B 21 C 23 D 25 解析 C 2014对应的二进制为 0
  • mysql索引

    为什么要使用索引 1 可以加快数据的检索速度 大大减少检索的数据量 这也是使用索引的主要原因 2 帮助服务器避免排序和临时表 3 将随机IO变为顺序IO 使用索引要注意的事项 1 在经常需要搜索的列上创建 可以加快搜索速度 2 在经常使用w
  • 什么是CVR,CTR,CPC,CPA,ROI?

    CVR Click Value Rate 转化率 衡量CPA Cost Per Action 广告效果的指标 CTR Click Through Rate 点击率 CPC Cost Per Click 按点击计费 CPA Cost Per
  • Apollo规划模块-规划器迭代版本

    一 三维问题 降维解决 x y维度求解路径规划 在路径规划的基础上进行s t速度规划 二 Apollo 规划器版本迭代 rtk循 1 0 EM Planning 基于DP和QP 1 5 Lattice Planning 路径和速度同时规划的
  • [网络安全提高篇] 一一五.Powershell恶意代码检测 (3)Token关键词自动提取

    网络安全提高班 新的100篇文章即将开启 包括Web渗透 内网渗透 靶场搭建 CVE复现 攻击溯源 实战及CTF总结 它将更加聚焦 更加深入 也是作者的慢慢成长史 换专业确实挺难的 Web渗透也是块硬骨头 但我也试试 看看自己未来四年究竟能
  • ExecutorService 的理解和使用

    前言 我们之前使用线程的时候都是使用new Thread来进行线程的创建 但是这样会有一些问题 如 a 每次new Thread新建对象性能差 b 线程缺乏统一管理 可能无限制新建线程 相互之间竞争 及可能占用过多系统资源导致死机或oom
  • AIX学习笔记

    学习笔记 这是我看191redbook第三遍的时候做的手记 放在这里大家提提意见 Created by workaholic 第一部分 系统启动问题cfgmgr configures devices and optionally insta
  • 在线生成发射爱心!生成网站直接发给你的ta

    一个网站直接帮你生成带名字的发射爱心 还可以直接分享给朋友看 网站放在最下面了 自从上次发了动态爱心的制作代码后 很多群友都来问 如何改名字 如何改文件 手机上如何编辑 这让我思考一个问题 能不能直接做成一个网站 点进去之后输入名字 点一下
  • 一个驱动同时兼容mysql5.7和mysql8.0

    driver class name org mariadb jdbc Driver org mariadb jdbc mariadb java client 2 6 0 url jdbc mysql 127 0 0 1 3306 datab
  • 【开源数据下载全步骤】利用Pytorch下载开源数据到本地,以Speech Command为例

    背景 找开源数据来练练手 虽然可以直接通过pytorch或TensorFlow加载使用 但感觉太麻烦了 所以想直接下载到本地使用 上网直接搜数据集没有那种直接下载的链接 最后发现可以直接通过pytorch或是TensorFlow下载 下面以
  • QT开发之环境变量设置

    注 主要方便软件在生成出来以后不需要去qt安装文件夹里面复制那6个dll文件才能运行exe程序的问题 右击我的电脑 gt 属性 gt 高级系统设置 gt 高级选项卡 gt 环境变量按钮 gt Path 编辑此变量 在变量值的最后面添加 QT
  • 程序员如何找女友呢?说说我的经验

    找女朋友 本来在咱们技术人社区 不适合谈 因为这涉及个人选择和价值观的问题 恰逢最近 翟欣欣跟苏享茂事件的尾声 纯技术人员如何去找到另一半 又开始火了 不过 我个人觉得 还是可以提供一些程序员社交的建议 参加技术会议和活动 去参加一些与自己
  • C++ 包管理器

    C 包管理器 Vcpkg Vcpkg 可帮助您在 Windows Linux 和 MacOS 上管理 C 和 C 库 相关资料 Vcpkg 管理 C 和 C 库 vcpkg github conan Conan是分布式跨平台开源的C C 软
  • uniapp自定义导航栏与手机状态栏重叠问题

    HBuildX 创建的应用默认是沉浸式样式 去除自带的导航栏后 页面直通手机顶部状态栏 即页面与手机状态栏重叠问题 处理 配置mainfest json来关闭沉浸式 打开应用的manifest json文件 打开源码视图 如下代码所示 ap
  • mysql5.6安装教程

    1 下载 解压完成之后将其放到你喜欢的地址当中去 这里我默认放在了D盘 这是我的根目录 2 配置环境变量 我的电脑 gt 属性 gt 高级 gt 环境变量 gt 系统变量 选择PATH 在其后面添加 D mysql 5 6 49 winx6
  • C++图书馆管理系统(简单版)

    1 总体功能分析 实用的图书馆管理系统应该至少包括一下功能 1 上传 新进图书以及基本信息的输入 2 删除 旧图书以及基本信息的删除 3 显示 显示图书馆已有的所有图书 4 查找 查询要借阅的图书信息 5 借阅 实现用户办理借阅手续 6 归

随机推荐

  • 关于altium designer 中如何按1:1生成PDF文档的解决方案

    众所周知altium designer是一款集PCB绘制 FPGA设计 原理图设计仿真等与一体的软件 功能很是强大 而且一直在不断更新 深受广大电子爱好者的喜爱 今天我不说其他的 就说说PCB绘制之后产生PDF文件的问题 altium de
  • 几个不错的CRM软件(B/S版)

    http www go2oa com http preview sugarcrm com generate instance php Administrator login ID adminPassword ossuw User login
  • 少年,你渴望元编程的力量吗?——symbol

    元编程的概念有很多文章 通过操作更加底层的api做更多个性化的功能 一句话概括 就是用代码来写代码 一些时候 写各种下划线 前后缀 为了实现一个唯一值或者秘密的特殊辅助值 用来辅助业务逻辑或者说作为一个私有的东西 const onlyone
  • Unity LWRP 学习之 RenderFeature

    RenderFeature是一种扩展LWRP的方法 该方法还是实验版 实现管道的参数的定制 其好处就是不需要修改物体的Shader 比如要实现一个如下图的显示隐藏背后的轮廓的需求 通常是需要修改对应的Shader的 使用两个Pass进行绘制
  • Parasoft SOAtest更新至9.10.6版本,新增API测试创建的机器学习功能

    Parasoft SOAtest 是业内最全面的测试解决方案 有着和loadrunner同样强大的性能测试 压力测试 负载测试功能 其功能包括API测试 SOA测试 云测试 负载与性能测试 开发测试等等 可以帮助开发团队提供一个直观的界面确
  • Windows C++ 判断磁盘类型 判断目录所在磁盘类型 判断是否U盘路径

    include
  • 用Linux搭建web服务器

    搭建web服务器 www 简介 网址及 HTTP 简介 HTTP 协议请求的工作流程 www 服务器的基本配置 实验 实验一 实验二 基于多个虚拟主机IP 基于多个虚拟端口 基于个人Web站点的Web网站 www 简介 网址及 HTTP 简
  • redis缓存击穿、雪崩、穿透及业务场景

    一 缓存击穿 1 概念 缓存击穿 由于并发查询同一热点数据而缓存的热点数据到时失效导致用户请求直接访问数据库 造成数据库压力过大 2 业务场景 一款冷门商品突然爆火 原本redis中冷门商品数据设置了定时过期 爆火后大量请求同时去redis
  • xilinx UART-lite AXI4接口testbench

    升级到vivado2015后 为了升级以及zynq系列FPGA MPSOC考虑 xilinx后续IP将都支持AXI接口 但UART的设计并没有找到example wavform testbench 搞了大半天才把串口调通 串口波特率设置为1
  • 深度学习----tensorflow神经网络(二分类)

    1 自写数据集 二分类 import tensorflow as tf import numpy as np import matplotlib pyplot as plt 使用tensorflow框架 建立神经网络 包含1个隐藏层 使用底
  • Exchange2010批量删除邮件

    在Exchange2010里若要删除某个用户发出的邮件 可以通过EMC控制台授予管理员 管理完全访问权限 通过OWA登录到用户邮箱删除 另外 更简便的方法为使用Exchange2010的命令来处理 可分以下几步处理 1 对操作用户赋予mai
  • Docker的Redis集群部署实战

    参考狂神视频 先把我们的服务器上的容器删除 便于我们下面的测试 root iZwz9hv1phm24s3jicy8x1Z docker rm f docker ps aq 825a4fec0d96 471ad631ae01 65063d37
  • java bufferreader_Java输入流之BufferReader和Scanner的用法!

    原帖地址 http blog csdn net kezhongke article details 7612327 在Java中 我们都知道Java的标准输入串是System in 但是我们却很少在Java中看到谁使用它 这是因为我们平时输
  • [python]csv数据处理 将目录下所有csv文件取出想要的列,去重并存入新csv

    代码 import pandas as pd import os import csv path r home kali Desktop 结果文件10 1 for dirpath dirnames filenames in os walk
  • Python魔术方法-Magic Method

    介绍 在Python中 所有以 双下划线包起来的方法 都统称为 Magic Method 例如类的初始化方法 init Python中所有的魔术方法均在官方文档中有相应描述 但是对于官方的描述比较混乱而且组织比较松散 很难找到有一个例子 构
  • JS版数据结构—树(学习一篇足矣)

    树的深度与广度优先遍历 深度优先遍历 尽可能的搜索树的分支 广度优先遍历 先访问离根节点最近的节点 深度优先遍历 第一步 访问根节点第二部 对根节点的children挨个进行深度优先遍历 const dfs root gt console
  • Android的消息处理机制(图+源码分析)——Looper,Handler,Message

    百度二面的时候 觉得自己源码分析太差 没有深入 面试官估计觉得我很不爽 恩 来吧 自己结合这篇文章 基本上把android消息机制给弄清楚了 http www androidzz com 2011 09 android looper han
  • C++ shared_ptr

    为了解决内存泄漏问题 C 标准库内包含了智能指针 shared ptr是其中的一种 include
  • canal 的 serverMode 模式

    serverMode 为 tcp 需要自定义 canal client 实现消息发送到消息队列 serverMode 为 kafka 或者RocketMQ rabbitmq pulsarmq 不需要 canal client 直接使用消息队
  • java 位运算取8位_【算法】位运算与经典八皇后问题

    文章来源 https mp weixin qq com s 14jQ1yLL4Cw6ufI2E3R yg 作者 码海 前言 位运算在生产或算法解题中并不常见 不过如果你用得好 可以达到事半功倍的效果 而且位运算用得好 也可以极大地提升性能