日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

255.0.0.0子网掩码相应的cidr前缀表示法是?_【洛谷日报#246】浅谈表达式的求值(Vol.2 进阶)...

發(fā)布時(shí)間:2023/12/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 255.0.0.0子网掩码相应的cidr前缀表示法是?_【洛谷日报#246】浅谈表达式的求值(Vol.2 进阶)... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Warning

在觀看本博客之前,請(qǐng)保證自己理解了表達(dá)式的三種表達(dá)方式。

本文旨在讓大家更深層次的了解表達(dá)式,基礎(chǔ)的知識(shí)就是上方的鏈接中所寫的。所以,在了解后綴表達(dá)式的運(yùn)算原理之后,我將不會(huì)講述類似的前綴表達(dá)式的運(yùn)算原理。

0 目錄

? 0 目錄 ? 1 淺談后綴表達(dá)式的還原 ? 2 前綴表達(dá)式介紹? I 簡單介紹? II 構(gòu)造方法和還原方法? III 好玩的特性 ? 3 前中后綴表達(dá)式區(qū)別和聯(lián)系 ? 4 拓展 ? 5 總結(jié)

1 淺談后綴表達(dá)式的還原

我們可以使用后綴表達(dá)式來構(gòu)造表達(dá)式樹

我們想一下后綴表達(dá)式的計(jì)算

后序的時(shí)候,假設(shè)有一個(gè)排列如下: 數(shù)字1 數(shù)字2 計(jì)算符 那么這三個(gè)數(shù)可以被數(shù)字1[計(jì)算符]數(shù)字2代替(就是一次計(jì)算)

我們?cè)倩仡^看一看表達(dá)式樹的計(jì)算

f(左兒子)[now所代表的運(yùn)算符]f(右兒子)

所以,我們可以想到一種非常像后綴表達(dá)式計(jì)算的方法:

定義一種樹,支持將幾棵樹用另一個(gè)頂點(diǎn)作為根合并起來,就像這樣:

*+ - / / 1 2 3 4-------------* / + -/ / 1 2 3 4

之后我們用一個(gè)棧S,利用以上性質(zhì)計(jì)算:

inp -> 后綴表達(dá)式 struct Tree{...} stack<Tree> S for i from 1 to Nif(inp[i]是數(shù)字) 定義一個(gè)只有該數(shù)字的Tree,并加入到棧中else 創(chuàng)建一個(gè)只有這個(gè)字符的Tree,之后將棧頂?shù)膬煽脴湟运鼮楦喜?

同時(shí),我們也可以用字符串代替樹,那么樹的合并相當(dāng)于字符串拼接,最后得到的是沒有括號(hào)的中綴表達(dá)式。

如果你想加括號(hào)的話,不妨利用以下文字,自己思考一下。

中序遍歷就是原式,但是我們通過運(yùn)算優(yōu)先級(jí)建樹,這時(shí)候受到括號(hào)的影響,計(jì)算的優(yōu)先級(jí)會(huì)改變(括號(hào)里面的優(yōu)先)。
判斷的方式很簡單。
就比如除號(hào),它在樹中左邊是加號(hào),運(yùn)算符優(yōu)先級(jí)比它小,但是竟然先被計(jì)算,所以,加號(hào)所在子樹左右應(yīng)該加上括號(hào)。

我們將模擬后綴表達(dá)式轉(zhuǎn)中綴表達(dá)式幫助你了解,用表達(dá)式樹的方法同理。

inp > 6 2 3 * + 4 / 5 - 掃到6 Stack > 6 掃到2 Stack > 6 2 掃到3 Stack > 6 2 3 掃到* "2" + "*" + "3" = "(2*3)" Stack > 6 (2*3) 掃到+ "6" + "+" + "(2*3)" = "(6+(2*3))" Stack > (6+(2*3)) 掃到4 Stack > (6+(2*3)) 4 掃到/ "(6+(2*3))" + "/" + "4" = "((6+(2*3))/4)" Stack > ((6+(2*3))/4) 掃到5 Stack > ((6+(2*3))/4) 5 掃到- ((6+(2*3))/4)" + "-" + "5" = "((((6+(2*3))/4)-5)" Stack > ((((6+(2*3))/4)-5)

2 前綴表達(dá)式介紹

I 簡單介紹

前綴表達(dá)式,類似于后綴表達(dá)式,是表達(dá)式的表達(dá)方式之一。

和后綴表達(dá)式相近,前綴表達(dá)式"將運(yùn)算符寫在前面",從而可以加快運(yùn)行速度(和后綴表達(dá)式一樣,在某種枚舉順序下,只使用出棧和入棧,加上基礎(chǔ)計(jì)算,就可以在$O(n)$的復(fù)雜度下運(yùn)行出結(jié)果)。

打個(gè)比方,

前綴表達(dá)式舉例,中綴表達(dá)式為(6+2*3)/4-5

中,前綴表達(dá)式就是

- / + 6 * 2 3 4 5II 構(gòu)造方法和還原方法

剛才講過,和后綴表達(dá)式一樣,前綴表達(dá)式也支持$O(n)$的計(jì)算和還原。區(qū)別如下

  • 后綴表達(dá)式的枚舉是從左到右,前綴表達(dá)式是從右到左
  • 后綴表達(dá)式的計(jì)算是[次頂元素][運(yùn)算符][棧頂元素],而前綴表達(dá)式的計(jì)算是[棧頂元素][運(yùn)算符][次頂元素]
  • 其他的和后綴表達(dá)式?jīng)]有區(qū)別。但是,由于從左到右判斷代碼明顯更好些(舉例:沒有人會(huì)選擇將已知字符串轉(zhuǎn)為數(shù)字的時(shí)候倒著處理,這樣還需要計(jì)算10的冪次),所以個(gè)人還是推薦使用后綴表達(dá)式處理方法。

    ......算了,還是給一下運(yùn)算舉例吧。

    - / + 6 * 2 3 4 5 掃到5,加入棧 +------------ | 5| | | | +------------ 掃到4,加入棧 +------------ | 5| 4| | | +------------ 掃到3,加入棧 +------------ | 5| 4| 3| | +------------ 掃到2,加入棧 +------------ | 5| 4| 3| 2| +------------ 掃到*,計(jì)算2*3,返回6,把6加入棧中 +------------ | 5| 4| 6| | +------------ 掃到6,加入棧 +------------ | 5| 4| 6| 6| +------------ 掃到+,計(jì)算6+6,返回12,把12加入棧中 +------------ | 5| 4|12| | +------------ 掃到/,計(jì)算12/4,返回3,把3加入棧中 +------------ | 5| 3| | | +------------ 掃到-,計(jì)算3-5,返回-2,把-2加入棧中 +------------ |-2| | | | +------------ 結(jié)束,返回-2III 好玩的特性

    我們不妨將前綴表達(dá)式的括號(hào)顯示,那么就會(huì)出現(xiàn)以下事情:

    -(/(+(6,*(2,3))4),5)

    這就像一個(gè)個(gè)函數(shù)一樣了,也就是說,一個(gè)表達(dá)式

    minus(divide(plus(6,multiply(2,3))4),5)

    可以只通過去括號(hào)和逗號(hào)就可以轉(zhuǎn)換為前綴表達(dá)式!

    所以,That's it ! 我們就可以將一個(gè)只由函數(shù)和數(shù)字組合的表達(dá)式只通過拆括號(hào)和去逗號(hào)的方式轉(zhuǎn)為前綴表達(dá)式,在循環(huán)運(yùn)算的時(shí)候甚至可以直接跳過這些省略的字符。

    因此,我們就找到了一種全新的表達(dá)式計(jì)算方法:

    對(duì)于每一個(gè)參數(shù)數(shù)量確定的函數(shù),當(dāng)參數(shù)為組合式的時(shí)候,遞歸處理前綴表達(dá)式;是數(shù)字的時(shí)候直接跳過。由此,我們就可以將一個(gè)表達(dá)式轉(zhuǎn)換為前綴表達(dá)式,從而解決問題。

    為什么說數(shù)量確定?數(shù)量不確定的時(shí)候,函數(shù)的前綴表達(dá)式和其他的表達(dá)式一拼起來就會(huì)使得表達(dá)式出現(xiàn)歧義。

    這種方法正好適用于這道題,感興趣的人可以去做一下。

    3 前中后綴表達(dá)式區(qū)別和聯(lián)系

    特性 | 中綴表達(dá)式 | 前綴表達(dá)式 | 后綴表達(dá)式 有無括號(hào) | 有 | 無 | 無 運(yùn)算方法 | 回溯 | 正向枚舉 | 反向枚舉 是否使用字符優(yōu)先級(jí) | 是 | 否 | 否 轉(zhuǎn)換(還原) | 單調(diào)棧 | 樹型數(shù)據(jù)結(jié)構(gòu) | 樹型數(shù)據(jù)結(jié)構(gòu) 計(jì)算時(shí)間 | 一般O(n^2) | O(n) | O(n) 電腦解析難度 | 高 | 低 | 低 別名 | 中綴記法 | 波蘭表達(dá)式 | 逆波蘭表達(dá)式

    4 拓展

    由于之前BB了這么多關(guān)于表達(dá)式的轉(zhuǎn)換,而且在中綴表達(dá)式去掉括號(hào)之后這三種表達(dá)式就是表達(dá)式樹的三種基礎(chǔ)遍歷方式,所以這里利用三種表達(dá)式表示法的互相轉(zhuǎn)換和還原解決知二推一的問題。由于死記硬背這些定理不好記住,所以建議和之前介紹的表達(dá)式求值和還原法理解。

    前中推后:順序枚舉前綴表達(dá)式,獲取它在中綴表達(dá)式中的位置,從而將中綴表達(dá)式分成兩半,在左右分別繼續(xù)上面的操作,直到整棵表達(dá)式樹的形態(tài)確定。后中推前同理,只需倒著枚舉。

    前后推中:順序枚舉前綴表達(dá)式,獲取它在后綴表達(dá)式中的位置,可以知道,后綴表達(dá)式中它的位置到它父親的位置就是它父親的右半子樹的后綴表達(dá)式,以此類推。

    實(shí)際上,除了前傳開頭提到的中綴表達(dá)式計(jì)算方法,中綴表達(dá)式是存在

    的計(jì)算方法的,在這里簡單一提。

    在這里,我們可以預(yù)先求出括號(hào)的匹配關(guān)系,之后,在一串表達(dá)式中,我們可以使用跳躍括號(hào)的方式找到本表達(dá)式中最后計(jì)算的那些符號(hào)(注意,這幾個(gè)符號(hào)的運(yùn)算優(yōu)先級(jí)應(yīng)當(dāng)一樣),將表達(dá)式劈成幾部分后分別計(jì)算這幾個(gè)表達(dá)式,就這樣遞歸下去。由于每一次我們都跳過了括號(hào),所以運(yùn)算復(fù)雜度是

    的,但是常數(shù)隨優(yōu)先級(jí)個(gè)數(shù)而變化(想一想,為什么)。

    當(dāng)然,構(gòu)造巴科斯范式并使用遞歸下降法可以讓速度達(dá)到一個(gè)新的高度,這些將會(huì)在之后講到。

    5 總結(jié)

    在消化了這篇文章以及它的前傳后,實(shí)際上簡單的表達(dá)式的求值和轉(zhuǎn)換都不是問題了。同時(shí),你也可以將其使用在自創(chuàng)高級(jí)語言編譯器的解析過程當(dāng)中,大大加快處理的速度。

    最后,完結(jié)撒花!!!*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的255.0.0.0子网掩码相应的cidr前缀表示法是?_【洛谷日报#246】浅谈表达式的求值(Vol.2 进阶)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。