算法人生(12):從“優(yōu)先級(jí)隊(duì)列算法”到“六點(diǎn)優(yōu)先工作法”

0 評(píng)論 326 瀏覽 2 收藏 11 分鐘

在生活中,其實(shí)我們可以應(yīng)用到不少算法思想,這篇文章里,作者就介紹了“優(yōu)先級(jí)隊(duì)列算法”可以如何應(yīng)用于我們的生活,一起來(lái)看看吧。

算法思想和生活中很多解決問(wèn)題的思想有著異曲同工之妙,讓我們來(lái)看下今天的“優(yōu)先級(jí)隊(duì)列算法”可以怎么應(yīng)用到我們的生活中吧!

優(yōu)先級(jí)隊(duì)列算法(Priority Queue Algorithm)?是一種特殊的數(shù)據(jù)結(jié)構(gòu),它在常規(guī)隊(duì)列秉持著“先進(jìn)先出”的原則,并且增加了一個(gè)“元素優(yōu)先級(jí)”的概念。這意味著隊(duì)列中的元素不僅按照進(jìn)入的順序排列,還會(huì)根據(jù)它們各自的優(yōu)先級(jí)來(lái)決定出隊(duì)的順序。

隊(duì)列中的元素可以是任何類型,只要它們可以比較優(yōu)先級(jí)即可。優(yōu)先級(jí)隊(duì)列中的元素通常帶有與其關(guān)聯(lián)的優(yōu)先級(jí)標(biāo)識(shí),優(yōu)先級(jí)較高的元素總是位于隊(duì)列前面,優(yōu)先被處理。它的工作原理如下:

原理:

優(yōu)先級(jí)隊(duì)列的核心原理是采用某種數(shù)據(jù)結(jié)構(gòu)(如堆、平衡二叉搜索樹等)來(lái)維護(hù)元素的排序。每次插入元素時(shí),都會(huì)根據(jù)優(yōu)先級(jí)調(diào)整隊(duì)列結(jié)構(gòu);每次刪除(或訪問(wèn))元素時(shí),返回并移除的是當(dāng)前優(yōu)先級(jí)最高的元素。

以二叉堆為基礎(chǔ)的優(yōu)先級(jí)隊(duì)列為例,其基本操作包括:

  1. 初始化:創(chuàng)建一個(gè)空的優(yōu)先級(jí)隊(duì)列(通常是空的數(shù)組或列表)。
  2. 插入:當(dāng)新元素加入時(shí),將其放置在數(shù)組的末尾,然后通過(guò)“上濾”過(guò)程調(diào)整堆結(jié)構(gòu),以維持最大堆的性質(zhì)(通常使用最大堆)。
  3. 刪除:移除并返回優(yōu)先級(jí)最高的元素(即堆頂元素),然后將數(shù)組的最后一個(gè)元素移動(dòng)到堆頂,并通過(guò)“下濾”過(guò)程調(diào)整堆結(jié)構(gòu),保持最大堆性質(zhì)。
  4. 查找最高優(yōu)先級(jí)元素:直接訪問(wèn)堆頂元素即可。
  5. 判斷隊(duì)列是否為空:檢查堆的大小。

二叉堆是一種常見的實(shí)現(xiàn)方式,因?yàn)槎芽梢栽趯?duì)數(shù)時(shí)間內(nèi)完成插入和刪除最大(或最小)元素的操作,同時(shí)它的靈活性也比較高,可以根據(jù)具體的需求定義優(yōu)先級(jí)的比較方式,廣泛適用于各種需要考慮優(yōu)先級(jí)的場(chǎng)景中。當(dāng)然,相對(duì)于基本隊(duì)列,優(yōu)先級(jí)隊(duì)列的實(shí)現(xiàn)也更為復(fù)雜一些,尤其是在維護(hù)堆的性質(zhì)時(shí)。

從以上可以看出,面對(duì)復(fù)雜的問(wèn)題是,即便“維護(hù)堆”可能會(huì)相對(duì)復(fù)雜些,需要去設(shè)定規(guī)則處理優(yōu)先級(jí)元素的處理順序。但是相對(duì)于“沒有重點(diǎn),眉毛胡子一把抓”的解決方案,“優(yōu)先級(jí)隊(duì)列算法”更能保證最高優(yōu)先級(jí)的問(wèn)題能夠在最快的時(shí)間內(nèi)得到解決,是在“有限時(shí)間里盡可能的做到最好的一種思路”。

熟悉MBA考試的同學(xué)會(huì)有些取舍的感觸,考MBA的試卷或許沒有特別復(fù)雜,但是考試時(shí)長(zhǎng)是大家非常頭疼的問(wèn)題,時(shí)間看上去很長(zhǎng),但沒做多久就要交卷了!所以很多考生一出來(lái)都說(shuō)試卷沒有做完。

筆者特地針對(duì)這個(gè)問(wèn)題去查了下原因,理由是MBA考的是綜合能力,根據(jù)自己的情況有效地“取舍”,從而完成目標(biāo)也是考試的一項(xiàng)驗(yàn)證標(biāo)準(zhǔn)。

所以先做哪些題目,后做哪些題目都有著講究,通常情況下要先做寫作題(因?yàn)閾?jù)說(shuō)寫作沒有寫完,此項(xiàng)就沒有分),然后做選擇題,碰到題不會(huì)的或耗時(shí)過(guò)長(zhǎng)的,要趕緊“過(guò)”,不可“戀戰(zhàn)”,先把能快速答出來(lái)的問(wèn)題先做完,如果還有時(shí)間再回來(lái)看這些需要些“思考時(shí)間“的題目。

同時(shí)心態(tài)上,不能因?yàn)橐恢迸龅綗o(wú)法快速答出的題目就心態(tài)受影響,要先保證所有熟練掌握的題目都有被回答到。“根據(jù)當(dāng)前的情況,謹(jǐn)記自己的目標(biāo),有效取舍”才可能完成目標(biāo)。

那在生活中,我們很多地方都可以應(yīng)用“優(yōu)先級(jí)隊(duì)列算法”的思路,比如產(chǎn)品需求很多,一個(gè)sprint或許完不成,又或者突發(fā)情況出現(xiàn),必須要先?!耙粋€(gè)產(chǎn)出”,定產(chǎn)品的優(yōu)先級(jí)順序就非常重要。此外,當(dāng)代IT人一大頭疼的問(wèn)題“工作生活沒法平衡,加班太多沒有自己個(gè)人的時(shí)間”,這些問(wèn)題也需要我們個(gè)人學(xué)習(xí)如何應(yīng)用“優(yōu)先級(jí)思維”到生活中。

這里介紹一個(gè)同樣應(yīng)用“優(yōu)先級(jí)”思維的工作方法:“六點(diǎn)優(yōu)先工作制”。

“六點(diǎn)優(yōu)先工作制”是一種由效率專家艾維·李(Avery C. Lee)提出的高效時(shí)間管理方法,它強(qiáng)調(diào)每天確定并優(yōu)先處理六項(xiàng)最重要的任務(wù),以提升工作效率和成果產(chǎn)出。它強(qiáng)調(diào)將注意力集中在少數(shù)幾個(gè)最關(guān)鍵的任務(wù)上,而不是試圖完成長(zhǎng)長(zhǎng)的待辦事項(xiàng)清單。這種方法認(rèn)為,每天專注于完成最重要的六項(xiàng)任務(wù),可以有效防止工作日的瑣事分散注意力,提高個(gè)人生產(chǎn)力。這種方法對(duì)應(yīng)的大概步驟如下:

  1. 列出任務(wù):在每一天結(jié)束時(shí)或新的一天開始時(shí),列出所有需要完成的任務(wù)。
  2. 評(píng)估任務(wù):對(duì)每個(gè)任務(wù)進(jìn)行評(píng)估,考慮其緊急程度、重要性、截止日期等因素。通常情況下,重要度的考量會(huì)更高些,根據(jù)具體的事情可調(diào),看個(gè)人情況。
  3. 優(yōu)先級(jí)排序:從所有任務(wù)中挑選出六個(gè)“當(dāng)前”最重要的任務(wù),按優(yōu)先級(jí)從高到低編號(hào)為1至6。
  4. 執(zhí)行任務(wù):按照編號(hào)順序逐個(gè)完成任務(wù),先完成1號(hào)任務(wù),然后是2號(hào)任務(wù),依此類推,直至完成六個(gè)任務(wù)為止。通常情況下,建議一次只完成一個(gè)任務(wù),因?yàn)橐淮沃蛔鲆患卤容^容易進(jìn)入“心流”,進(jìn)入心流的好處不止可以提高做事的效率,也可以讓現(xiàn)代人“散亂”的心漸漸收回來(lái),心靜了,智慧就出來(lái)了。如果很想一次做兩件甚至以上的事情,筆者建議這些同步進(jìn)行的事情是對(duì)個(gè)人來(lái)說(shuō),用到的是不同的“力”,比如有的事情用的更多的是體力(比如干家務(wù),走路),有的事情用的更多是聽力(干家務(wù)、走路時(shí)聽個(gè)學(xué)習(xí)的課程)。此處只列大概的思路,大家根據(jù)情況可自行調(diào)整。
  5. 復(fù)盤與調(diào)整:在每天結(jié)束時(shí)或第二天開始時(shí),回顧任務(wù)完成情況,對(duì)未完成的任務(wù)進(jìn)行重新評(píng)估和優(yōu)先級(jí)排序。

其實(shí)這個(gè)方法,跟產(chǎn)品經(jīng)理評(píng)估、優(yōu)化需求時(shí)的方法,也是異曲同工的,需求那么多,總要考慮場(chǎng)景,目標(biāo),痛點(diǎn),方案,成本等來(lái)對(duì)需求進(jìn)行排序,需求做好了之后,也要根據(jù)實(shí)際情況進(jìn)行調(diào)整、優(yōu)化。它的主要思想還是“精力是有限的”,不管是個(gè)人還是團(tuán)隊(duì)都是有限的(加上市場(chǎng)機(jī)會(huì)是不等人的),所以把有限的精力放在最重要的事情上,才可能讓個(gè)人或團(tuán)隊(duì)找到“可以行走江湖的刷子”。

下面以程序員同學(xué)的生活為例來(lái)拓展下應(yīng)用思路:

  1. 任務(wù)清單:程序員可以在項(xiàng)目管理工具或紙質(zhì)筆記本上列出每天需要完成的各項(xiàng)開發(fā)任務(wù)、代碼審核、文檔編寫等。
  2. 優(yōu)先級(jí)分析:考慮任務(wù)對(duì)項(xiàng)目的影響程度、截止日期的臨近程度、與其他團(tuán)隊(duì)成員的依賴關(guān)系等因素來(lái)確定優(yōu)先級(jí)。
  3. 聚焦關(guān)鍵任務(wù):程序員在工作時(shí)應(yīng)首先關(guān)注優(yōu)先級(jí)最高的任務(wù),如修復(fù)嚴(yán)重影響用戶體驗(yàn)的Bug、完成關(guān)鍵功能模塊的開發(fā),或者某個(gè)別人急等的技術(shù)文檔。
  4. 時(shí)間分割:可以將每天的工作時(shí)間劃分為幾個(gè)時(shí)段,每個(gè)時(shí)段專注于完成一個(gè)優(yōu)先級(jí)高的任務(wù)。
  5. 靈活調(diào)整:程序員在工作中難免會(huì)遇到突發(fā)事件(bug)或優(yōu)先級(jí)發(fā)生變化(需求變更)的情況,這時(shí)應(yīng)及時(shí)調(diào)整任務(wù)清單,重新排列優(yōu)先級(jí),確保始終抓住當(dāng)前階段的工作重點(diǎn)。

在應(yīng)用“六點(diǎn)優(yōu)先工作制”,筆者建議也不拘泥于數(shù)字“6”,不一定非要六項(xiàng)優(yōu)先級(jí)最高的,可以前面5項(xiàng),前3項(xiàng),但最好不要超過(guò)6(雜事但必須做的可以歸類到一個(gè)時(shí)間點(diǎn),統(tǒng)一處理),免得所有的任務(wù)都變得重要了,這個(gè)數(shù)字大家根據(jù)自己的情況自行調(diào)整。

“優(yōu)先級(jí)”思維可以讓我們從繁瑣雜亂的思緒中走出來(lái),關(guān)注在最重要的、最具影響的事情上,有點(diǎn)“擒賊先擒王”的意思。希望這可以給大家“走出”工作生活不平衡帶來(lái)一定啟發(fā),如果你也有更好的方法,歡迎分享交流!

本文由 @養(yǎng)心進(jìn)行時(shí) 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載

題圖來(lái)自Unsplash,基于 CC0 協(xié)議

該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒評(píng)論,等你發(fā)揮!