編譯原理(一道小證明題)

2022-10-11 14:24:10 字數 1230 閱讀 9019

最近閒暇之餘看看編譯原理,娛樂一下,碰到一道小小證明題,於是心血來潮證明一下。

lz也是數學專業畢業的,當初上大學時每天做的最多的就是多達n個黑板的證明題,可惜啊,時光是殘酷的,現在已不復往日了。

不過看到證明題,尤其是簡單的證明題,lz積蓄了多年的數學細胞又被激發起來了,這就是青春啊,神馬《致青春》的都弱爆了,總拿愛情說事,其實大學裡還是有很多值得回憶的事的,比如證明題,lz說這話會不會勾起了很多人的痛苦回憶。

不過小證怡情,大證傷身,太長的證明題我們就不鳥咯(其實是lz證明不出來,囧)。

編譯原理-->題目原型:

num -> 11 | 1001 | num 0 | num num

2,上面文法是否能生成所有能被3整除的二進位制串?

1、分析:該文法的終止符集為,非終止符集為,起始符號為num,規則集,由以上文法得到的二進位制串,轉換成抽象語法樹之後,其葉子節點一定是11或者1001,而如果向樹的根節點按照規則生成二進位制串,則產生的方式有以下兩種。

1)num 0

2)num num。

因而,我們只需要證明num 0 和num num的組合可以被3整除即可。

因為假設前者可以被證明,則語法樹的任何乙個節點都可以被3整除,並且在此基礎上,所有組合方式都可以被3整除,故可得到此文法所得到的所有二進位制串都可以被3整除。 

有了以上分析,那麼證明過程非常簡單。

證明:step 1:11和1001都可以被3整除(不解釋)。

step 2:若組合形式為num 0 ,因為 num 0 = 2 * num,故在step 1的前提下,num 0 的組合可以被3整除。

step 3:若組合形式為num num,設num num為num1 num2 ,且num2為n位二進位制串,則num num = num1 num2 = (2的n次方) * num1 + num2 ,故在step 1的前提下,num num的組合可以被3整除。

step 4:綜合step 1 、step 2 、step 3,由上述文法生成的所有二進位制串都可以被3整除。

2、答案:非也,最顯然的,0就無法由文法匯出,另外非顯然的,比如21=10101,也無法由文法匯出,再比如給21乘個2,即42 = 101010,也無法匯出,and so on。

歐了,怡完情**睡覺,各位晚安。                                  

一道證明題

最近看 劍指offer第二版 有這麼一道面試題 題目 給你一根長度為n的繩子,請把繩子剪成m段 m和n都是整數,n 1並且m 1 每段繩子的長度記為k 0 k 1 k m 請問k 0 k 1 k m 可能的最大乘積是多少?例如,當繩子的長度為8時,我們把它剪成長度分別為2,3,3的三段,此時得到的最...

一道有趣的數學證明題

j 0n k j 1ncj nckn k j nc 22n2 從北京到廣州兩個半小時的飛機,上飛機前把題目抄在草稿紙上,心想飛機上無聊正好把這題給做了,做完看看電影睡睡覺估計就到了。然而這道題著實做了兩個半小時,距離降落30分鐘才搞定完整的解法,把解法在整理一遍的時間都不夠。在飛機上一萬次想開啟手機...

一道演算法題

兩個燒杯,乙個放糖乙個放鹽,用勺子舀一勺糖到鹽,攪拌均勻,然後舀一勺混合 物會放糖的燒杯,問你兩個燒杯哪個雜質多?一樣多吧 對的 為啥?是不是因為 糖和鹽本來就是均勻的 因為,就算不攪拌均,你放一勺過去,那邊放一勺不含雜質的過來,那麼都是一勺雜之 如果攪拌均勻的話也是一樣 小依 21 45 32 也...