一些偽代碼調(diào)研結(jié)果碎碎念

剛開(kāi)始學(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候看不明白這個(gè)偽代碼到底是個(gè)啥厕怜,經(jīng)過(guò)一番查閱資料,以下是一些總結(jié)與思考~~

能干自己的事兒未檩,也要能向別人表達(dá)自己到底在干啥事兒戴尸。



原則上,使用偽代碼冤狡,不用拘泥于具體實(shí)現(xiàn)孙蒙。

相比程序語(yǔ)言(例如 Java, C++,C, Dephi等等),它更類似自然語(yǔ)言悲雳,是半角化的挎峦、不標(biāo)準(zhǔn)的語(yǔ)言。使用其的目的在于將整個(gè)算法運(yùn)行過(guò)程的結(jié)構(gòu)用接近自然語(yǔ)言的形式(可以使用任何一種你熟悉的文字合瓢,關(guān)鍵是將程序的意思表達(dá)出來(lái))描述出來(lái)坦胶。

雖然偽代碼的寫法常常與個(gè)人的書寫習(xí)慣相關(guān),但業(yè)內(nèi)仍有一些約定俗成的詞匯和表達(dá)方式晴楔;這里就一些常見(jiàn)的顿苇、容易引起歧義的的表達(dá)方式進(jìn)行了總結(jié)和梳理,同時(shí)也是我個(gè)人偽代碼書寫習(xí)慣的整理税弃。此外纪岁,在日后的學(xué)習(xí)中與項(xiàng)目的溝通中常常也會(huì)涉及到成員之間的算法構(gòu)想的交流,手持一份如此的偽代碼規(guī)則書则果,也會(huì)使合作流暢許多幔翰。

(但其實(shí)過(guò)度成文的規(guī)則到最終都會(huì)變成編程語(yǔ)言吧~規(guī)則是死的,人是活的短条。代碼是死的导匣,偽代碼是活的(偷笑


1.書寫規(guī)則

可考慮采用類 Pascal 語(yǔ)言的語(yǔ)法規(guī)則(即類似 python 取對(duì)對(duì)齊)。

盡量采用全英文的方式書寫(其實(shí)統(tǒng)一起來(lái)就好茸时?但是感覺(jué)用英文書寫比較能和其他函數(shù)匹配起來(lái)~)

注:類 Pascal 語(yǔ)言的偽代碼的語(yǔ)法規(guī)則是:在偽代碼中贡定,每一條指令占一行(else if 除外)。指令后不跟任何符號(hào)(Pascal 和 C 中語(yǔ)句要以分號(hào)結(jié)尾)可都。書寫上的“縮進(jìn)”表示程序中的分支程序結(jié)構(gòu)缓待。這種縮進(jìn)風(fēng)格也適用于 if-then-else 語(yǔ)句。

2.運(yùn)算

← :賦值

e.g.

x ← x + 1

Meaning:x ++渠牲,x += 1旋炒,x = x + 1

* :對(duì)非向量的多項(xiàng)式——簡(jiǎn)單相乘;對(duì)矩陣签杈、向量:element wise product

e.g.

x ← a * b

Meaning:x = a * b

(np.array[1,3] )M ← (np.array[1,3])A * (np.array[1.3]) B

Meaning:M[i] = A[i] * B[i]

dot:點(diǎn)積(矩陣運(yùn)算)

e.g.

(np.array[1,3]) M ← (np.array[1,n]) A dot (np.array[n,3]) B

Meaning:M = np.dot(A,B)

/:除法瘫镇,取完整商的 float 類型

e.g.

a ← /b

Meaning:float a /= b

a ← b / c

Meaning:float a = b/c

div:除法鼎兽,取商的整數(shù)部分

e.g.

a ← div b

Meaning:float a /= b

a ← b div c

Meaning:float a = b/c

%:模,即取余數(shù)

3.注釋格式

單行注釋:#……

跨行注釋:##……##

*定義變量的語(yǔ)句不用寫出來(lái)铣除,但必須在注釋中給出谚咬。

4.分支、循環(huán)

4.1 if else

if …

(elif …)

else …

和 python 里面一樣尚粘,長(zhǎng)執(zhí)行語(yǔ)句可與 goto + label 搭配择卦,短執(zhí)行語(yǔ)句可與 switch 搭配或直接搭配短執(zhí)行語(yǔ)句,便于查詢條件郎嫁、組織邏輯結(jié)構(gòu)秉继;

4.2 do… while/until, while

不建議使用,容易影響正式代碼也寫成 do while/until泽铛,判斷先后標(biāo)準(zhǔn)容易造成歧義尚辑,在不同的情況下可能會(huì)有意料不到的非指針形參,使代碼陷入死循環(huán)盔腔,而且有的語(yǔ)言沒(méi)有 until這個(gè)指令腌巾。盡量用 for 循環(huán)+if…break/continue/pass 來(lái)代替;

4.3 for 循環(huán)

①對(duì)于 for i in range铲觉,一律采用 range[/( a , b ]/)澈蝙,即采用數(shù)學(xué)中的開(kāi)閉區(qū)間來(lái)表示 range范圍;對(duì) a 和 b 沒(méi)有嚴(yán)格的大小要求撵幽,如果 b<a灯荧,依然意味著(倒序)從 a 開(kāi)始到 b 之間取 i;

②對(duì)于 for I in range盐杂,如果對(duì)步長(zhǎng)等格式有指定逗载,可用注釋標(biāo)明 step = 步長(zhǎng)數(shù);如果step = -1链烈,則意味著取倒序厉斟;

4.4 max/min

取最大:max{a,b,c} or max{一個(gè)數(shù)列},取最小類似强衡;

4.5 其他關(guān)鍵詞

break, continue, pass 同 python擦秽。

即:盡量只采用 for 來(lái)描述循環(huán);if/else 結(jié)構(gòu)中盡量把條件放在更近的地方漩勤,分支語(yǔ)句采用 goto + label 或 switch 結(jié)構(gòu)進(jìn)行索引感挥。

其他:

1.通常每個(gè)算法開(kāi)始時(shí)都要描述它的輸入和輸出,而且盡量采用 part / label 等關(guān)鍵字給算法打標(biāo)簽越败,一邊在解釋算法的過(guò)程中快速索引触幼;

2.定義變量的語(yǔ)句不用寫出來(lái),但必須在注釋中給出究飞;

3.邏輯表達(dá)式可以使用關(guān)系運(yùn)算符 =(或者==置谦,建議用==) 堂鲤、≠、<媒峡、>筑累、≤ 和 ≥,以及邏輯運(yùn)算符與(and)丝蹭、或(or)、非(not)坪蚁;

4.涉及到調(diào)用未編寫的函數(shù)奔穿,可以直接 call 函數(shù)名,然后在注釋中解釋它的作用(參數(shù)敏晤、功能贱田、return)


總而言之,偽代碼的原則:簡(jiǎn)潔清晰嘴脾、易理解男摧、易索引。

參考資料:

https://baike.baidu.com/item/%E4%BC%AA%E4%BB%A3%E7%A0%81/10321865

(百度百科)

https://www.cnblogs.com/linuxAndMcu/p/11242905.html#_label1

https://www.php.cn/csharp-article-415083.html

(他人博客)

以及一些個(gè)人經(jīng)驗(yàn)的總結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末译打,一起剝皮案震驚了整個(gè)濱河市耗拓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奏司,老刑警劉巖乔询,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異韵洋,居然都是意外死亡竿刁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門搪缨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)食拜,“玉大人,你說(shuō)我怎么就攤上這事副编「旱椋” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵痹届,是天一觀的道長(zhǎng)惑惶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)短纵,這世上最難降的妖魔是什么带污? 我笑而不...
    開(kāi)封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮香到,結(jié)果婚禮上鱼冀,老公的妹妹穿的比我還像新娘报破。我一直安慰自己,他們只是感情好千绪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布充易。 她就那樣靜靜地躺著,像睡著了一般荸型。 火紅的嫁衣襯著肌膚如雪盹靴。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天瑞妇,我揣著相機(jī)與錄音稿静,去河邊找鬼。 笑死辕狰,一個(gè)胖子當(dāng)著我的面吹牛改备,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔓倍,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼悬钳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了偶翅?” 一聲冷哼從身側(cè)響起默勾,我...
    開(kāi)封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎聚谁,沒(méi)想到半個(gè)月后灾测,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垦巴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年媳搪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骤宣。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秦爆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出憔披,到底是詐尸還是另有隱情等限,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布芬膝,位于F島的核電站望门,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锰霜。R本人自食惡果不足惜筹误,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望癣缅。 院中可真熱鬧厨剪,春花似錦哄酝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至直晨,卻和暖如春搀军,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勇皇。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工罩句, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人儒士。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像檩坚,于是被迫代替她去往敵國(guó)和親着撩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容