python算法设计 - 下一组排列
生活随笔
收集整理的這篇文章主要介紹了
python算法设计 - 下一组排列
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
python算法設(shè)計(jì)源碼:https://github.com/MakerChen66/Python3Algorithm
版權(quán)聲明:原創(chuàng)不易,本文禁止抄襲、轉(zhuǎn)載,侵權(quán)必究!
目錄
- 一、下一組排列
- 二、源碼下載
- 三、作者Info
一、下一組排列
我們給定一個(gè)全序集,要找到當(dāng)前結(jié)構(gòu)的下一組排列,如:HIJT->HITJ->HJIT->HJTI……
盡管幾乎每一個(gè)庫(kù)里都提供了類(lèi)似的功能,但若是想要提高算法速率的話,可以看看這個(gè)
這個(gè)算法本身是非常簡(jiǎn)單的:
- 從序列的末尾開(kāi)始,找到遞減的最長(zhǎng)子序列(如:46975)且將它前面的項(xiàng)表示為一個(gè)支點(diǎn)(如:46975)
- 將此支點(diǎn)與找到的遞減最長(zhǎng)子序列中的次小項(xiàng)進(jìn)行交換(如:47965)
- 將遞減子序列轉(zhuǎn)向(如:47569)
Python算法實(shí)現(xiàn):
def permute(value):values = list(value)n = len(values)# i: 找到遞減序列前的那一個(gè)支點(diǎn)for i in reversed(range(n - 1)):if values[i] < values[i + 1]:breakelse:# 否則逆轉(zhuǎn)列表里的元素values[:] = reversed(values[:])return values# j: 要和i支點(diǎn)交換值的遞減序列的次小項(xiàng)for j in reversed(range(i, n)):if values[i] < values[j]:# i支點(diǎn)和遞減序列的次小項(xiàng)交換值,并且把交換后的遞減序列逆轉(zhuǎn),也就是把i支點(diǎn)后的元素逆轉(zhuǎn)values[i], values[j] = values[j], values[i]values[i + 1:] = reversed(values[i + 1:])breakprint(values)permute('HIJT')輸出結(jié)果:
二、源碼下載
python算法設(shè)計(jì)源碼下載:
- GitHub下載鏈接:傳送門(mén)
- 原文鏈接:閱讀原文
三、作者Info
作者:小鴻的摸魚(yú)日常,Goal:讓編程更有趣!
原創(chuàng)微信公眾號(hào):『小鴻星空科技』,專(zhuān)注于算法、爬蟲(chóng),網(wǎng)站,游戲開(kāi)發(fā),數(shù)據(jù)分析、自然語(yǔ)言處理,AI等,期待你的關(guān)注,讓我們一起成長(zhǎng)、一起Coding!
版權(quán)說(shuō)明:本文禁止抄襲、轉(zhuǎn)載 ,侵權(quán)必究!
總結(jié)
以上是生活随笔為你收集整理的python算法设计 - 下一组排列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SPV210_dwn刷机步骤
- 下一篇: 今日揭秘:在淘宝上,如何让宝贝秒卡首屏?