国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

程序員的算法趣題Q48: 翻轉(zhuǎn)得到交錯(cuò)排列

lvzishen / 3761人閱讀

摘要:由此可得初始狀態(tài)為終止?fàn)顟B(tài)黑白或交錯(cuò)有兩種,分別是翻轉(zhuǎn)運(yùn)算在圓圈上翻轉(zhuǎn)連續(xù)張牌,可以用一個(gè)比特的有個(gè)比特為的整數(shù)稱為掩碼與表示排列狀態(tài)的整數(shù)進(jìn)行按比特異或運(yùn)算得到。求余部分代表沒(méi)有移出比特部分的值。

目錄

1. 問(wèn)題描述

2. 解題分析

2.1 圓圈排列的表示

2.2 翻轉(zhuǎn)運(yùn)算

?2.3 算法流程

3. 代碼及測(cè)試

4. 后記


1. 問(wèn)題描述

2. 解題分析

????????本題關(guān)鍵在于圍成一圈的排列以及翻轉(zhuǎn)運(yùn)算如何表示。

2.1 圓圈排列的表示

????????從某處剪開(kāi)形成線性排列是常用套路。具體從哪里剪開(kāi)看處理方便。

? ? ?由于初始位置是黑白各連續(xù)N個(gè),用1表示黑,0表示白。標(biāo)示2*N個(gè)位置分別為pos0,pos1,...,pos(2N-1)。令初始狀態(tài)中,pos0~pos(N-1)為1(即黑色卡片),posN~pos(2N-1)為0(即白色卡片)。

????????從pos0和pos(2N-1)中間剪開(kāi),這個(gè)排列可以用一個(gè)2N比特的無(wú)符號(hào)整數(shù){pos(2N-1}, pos(2N-2}, ... , pos0}表示,約定pos0為L(zhǎng)SB,pos(2N-1}為MSB。

????????由此可得:

????????初始狀態(tài)為0b000...0111...1 = 2**N-1

????????終止?fàn)顟B(tài)(黑白或01交錯(cuò))有兩種,分別是:0b1010...10, 0b010...101

2.2 翻轉(zhuǎn)運(yùn)算

????????在圓圈上翻轉(zhuǎn)連續(xù)3張牌,可以用一個(gè)2*N比特的有3個(gè)比特為1的整數(shù)(稱為掩碼)與表示排列狀態(tài)的整數(shù)進(jìn)行按比特異或運(yùn)算得到。

????????在每個(gè)狀態(tài)下,“翻轉(zhuǎn)連續(xù)3張牌”的可能位置有2*N種,對(duì)應(yīng)的整數(shù)為7, 14, ...。但是要注意翻轉(zhuǎn)位置跨越剪開(kāi)的那個(gè)位置時(shí)的處理。比特?cái)?shù)比較少的時(shí)候,用手動(dòng)計(jì)算出掩碼也是可以的。也可以找出規(guī)律用代碼來(lái)實(shí)現(xiàn)(這樣代碼可擴(kuò)展性更好)。本題解中用以下方式來(lái)求2*N種掩碼:

????????(7<

?2.3 算法流程

????????基于以上討論,這個(gè)問(wèn)題就轉(zhuǎn)化成了圖搜索問(wèn)題中的最短路徑問(wèn)題了,可以用廣度優(yōu)先搜索來(lái)解決。

????????算法流程如下:

??

3. 代碼及測(cè)試

# -*- coding: utf-8 -*-"""Created on Fri Oct  8 07:40:08 2021@author: chenxy"""# import sysimport time# import datetime# import math# import random# from   typing import List# from   queue import Queuefrom   collections import deque# import itertools as it# import numpy as npN       = 8target1 = 0b1010_1010_1010_1010target2 = 0b0101_0101_0101_0101start   = 0b0000_0000_1111_1111mask    = 2*N*[0]for k in range(2*N):    mask[k] = (7 << k) // (2**16) + (7 << k) % (2**16)step    = 0q       = deque()visited = set()q.append((start,step))visited.add(start)while len(q) > 0:    cur,step = q.popleft()    # print("cur={0}, step={1}".format(cur,step))    if cur == target1 or cur == target2:        break    for k in range(2*N):        nxt = cur ^ mask[k]        if nxt not in visited:            # print("/t{0}-->{1}".format(cur,nxt))            q.append((nxt,step+1))            visited.add(nxt)print("N = {0}, step = {1}".format(N,step))

4. 后記

????????長(zhǎng)假歸來(lái)。。。Q48輕松搞定。呃,那一定是我的水平漲了嘛^-^老兵不死他只是慢慢凋零。。。

? ? ? ? 上一篇:程序員的算法趣題Q47: 格雷碼循環(huán)

? ? ? ? 下一篇:程序員的算法趣題Q49: 欲速則不達(dá)

????????本系列總目錄參見(jiàn):程序員的算法趣題:詳細(xì)分析和Python全解

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/122000.html

相關(guān)文章

  • 序員算法趣題Q49: 欲速則不達(dá)

    摘要:本文先考慮深度優(yōu)先搜索。深度優(yōu)先搜索算法流程如下最后,將初始化為,初始化,和分別初始化為適當(dāng)?shù)娜銛?shù)組,然后調(diào)用到最終退出后所得到的即為所求結(jié)果。 目錄 1. 問(wèn)題描述 2. 解題分析 3. 代碼及測(cè)試 4. 后記 1. 問(wèn)題描述 2. 解題分析 ????????本題是要找最長(zhǎng)路徑,應(yīng)該...

    BlackMass 評(píng)論0 收藏0
  • 序員算法趣題Q37: 翻轉(zhuǎn)7段碼(1)

    摘要:漢明距離可以用異或操作實(shí)現(xiàn)。這個(gè)問(wèn)題其實(shí)可以看作是,具有個(gè)節(jié)點(diǎn)的全連接無(wú)向圖,每條邊的權(quán)重值代表兩個(gè)節(jié)點(diǎn)所代表的數(shù)字的段碼顯示的二進(jìn)制表示之間的漢明距離。 目錄 1. 問(wèn)題描述 2. 解題分析 3. 代碼及測(cè)試 1. 問(wèn)題描述 ????????問(wèn)題:求把10個(gè)數(shù)字全部顯示出來(lái)時(shí),亮燈/滅...

    RdouTyping 評(píng)論0 收藏0
  • 序員算法趣題Q51: 同時(shí)結(jié)束沙漏

    摘要:結(jié)合上下文猜測(cè)應(yīng)該是說(shuō)沙子同時(shí)漏完的意思。問(wèn)題的焦點(diǎn)在于如何表示不同的排列狀態(tài)以及如何處理沙漏翻轉(zhuǎn)。上一篇完美洗牌完美洗牌下一篇糖果惡作劇本系列總目錄參見(jiàn)程序員的算法趣題詳細(xì)分析和全解程序員的算法趣題詳細(xì)分析和全解 目錄 1. 問(wèn)題描述 1.1 原題的表述 2. 解題分析 2.1 轉(zhuǎn)換為線...

    bovenson 評(píng)論0 收藏0
  • 序員算法趣題Q45: 排序交換次數(shù)最少化

    摘要:能以最少交換次數(shù)到達(dá)升序有序排列記為的數(shù)列記為就等價(jià)于從代表的節(jié)點(diǎn)在這張圖中到達(dá)對(duì)應(yīng)的節(jié)點(diǎn)的最短路徑長(zhǎng)度。上一篇質(zhì)數(shù)矩陣質(zhì)數(shù)矩陣下一篇唯一的序列本系列總目錄參見(jiàn)程序員的算法趣題詳細(xì)分析和全解程序員的算法趣題詳細(xì)分析和全解 目錄 1. 問(wèn)題描述 2. 解題分析 3. 代碼及測(cè)試 4. 后記 ...

    flybywind 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<