摘要:問題設(shè)定在思維簡圖中,軟件可以將用戶錄入的文本直接轉(zhuǎn)化為思維導(dǎo)圖。暫時設(shè)為一個空數(shù)組。孫中山將同盟會的綱領(lǐng)概括為三大主義,即民族主義民權(quán)主義民生主義,后被稱為三民主義。
問題設(shè)定
在思維簡圖中,軟件可以將用戶錄入的文本直接轉(zhuǎn)化為思維導(dǎo)圖。其規(guī)則是:用戶錄入的文字必須以一個感嘆號作為一個節(jié)點的起始標(biāo)記,一個感嘆號表示后面的文字處于第一級節(jié)點,兩個感嘆號表示后面的文字處于第二個節(jié)點,以此類推。
!內(nèi)容
!!同盟會的政治綱領(lǐng)是“驅(qū)除韃虜,恢復(fù)中華,創(chuàng)立民國,平均地權(quán)”。
!!孫中山將同盟會的綱領(lǐng)概括為三大主義,即民族主義、民權(quán)主義、民生主義,后被稱為三民主義。
!!!民族主義,即民族革命,包括“驅(qū)除韃虜,恢復(fù)中華”兩項內(nèi)容。
!!!民權(quán)主義即政治革命,內(nèi)容是“創(chuàng)立民國”,即建立資產(chǎn)階級民主共和國。
!!!民生主義即社會革命,指的是“平均地權(quán)”。
!評價:
!!它初步描繪出中國還不曾有過的資產(chǎn)階級共和國方案,是一個比較完整而明確的資產(chǎn)階級民主革命綱領(lǐng)。
!!對推動革命的發(fā)展產(chǎn)生了重大而積極的影響。
!!但它并不是一個徹底的資產(chǎn)階級民主革命綱領(lǐng)。
所以, 上面這段文字經(jīng)過軟件處理后應(yīng)該生成的樹狀圖應(yīng)該如下:
常規(guī)思路在將文字轉(zhuǎn)化為圖片的過程中,如何將錄入文本轉(zhuǎn)化為一個結(jié)構(gòu)化的數(shù)據(jù)至關(guān)重要。按照最容易想到的思路,算法設(shè)計應(yīng)該是這樣:
在全文的最末尾加一個感嘆號,然后找出所有處于單個感嘆號之間的文字,放入一個數(shù)組中;
將數(shù)組中的第一個節(jié)點的文字提取出來,作為這個節(jié)點的title值保存下來,并且保存自己的父級的id(對于第一級的節(jié)點,父級節(jié)點id取-1),創(chuàng)建一個自己的id;
上述處理完畢之后,用遞歸的方式處理第二級、第三級……節(jié)點,直到全部遍歷完。
這就是我寫第一版程序時的思路,這個算法寫得很笨,也寫得很痛苦。層層遞歸的方式,在程序調(diào)試時不那么符合地球人的思維習(xí)慣。那種感覺很像是我們詬病Nodejs里的層層回調(diào)嵌套出現(xiàn)的“死亡金字塔”式的程序結(jié)構(gòu)。
重新思考前些天閱讀過promise編程模式,很好的破解掉了這個“死亡金字塔”,讓代碼的結(jié)構(gòu)非常便于閱讀和調(diào)試。受到這個啟發(fā),再次思考了這個算法的設(shè)計,應(yīng)該有一個調(diào)試起來思路更清楚,代碼結(jié)構(gòu)更一目了然的方式:
首先不考慮感嘆號的多少,把感嘆號之間的文字提取出來,放入一個數(shù)組;
遍歷數(shù)組,將數(shù)組中每個元素創(chuàng)建為一個節(jié)點實例,實例包含如下屬性:id, title, level, parent, childrenids。id即自己在數(shù)組中的序號,title為自身文字,level即自身文字中包含感嘆號的數(shù)量。parent的算法稍復(fù)雜:尋找id和自己最接近且level比自己小1的節(jié)點,它的id即parent的值。childrenids暫時設(shè)為一個空數(shù)組。
上一步遍歷完成后,再次遍歷,根據(jù)parent值將各個節(jié)點的childrenids數(shù)組填寫好。
至此,所有節(jié)點的屬性值已經(jīng)都具備。如果我們需要用一個json來結(jié)構(gòu)化的表達(dá)這一組數(shù)據(jù),那么只需要再次遍歷數(shù)組,創(chuàng)建一個json,將相應(yīng)的值填充好就可以了。
下面是實現(xiàn)這個算法的代碼:
var str="!內(nèi)容 !!同盟會的政治綱領(lǐng)是“驅(qū)除韃虜,恢復(fù)中華,創(chuàng)立民國,平均地權(quán)”。 !!孫中山將同盟會的綱領(lǐng)概括為三大主義,即民族主義、民權(quán)主義、民生主義,后被稱為三民主義。 !!!民族主義,即民族革命,包括“驅(qū)除韃虜,恢復(fù)中華”兩項內(nèi)容。 !!!民權(quán)主義即政治革命,內(nèi)容是“創(chuàng)立民國”,即建立資產(chǎn)階級民主共和國。 !!!民生主義即社會革命,指的是“平均地權(quán)”。 !評價: !!它初步描繪出中國還不曾有過的資產(chǎn)階級共和國方案,是一個比較完整而明確的資產(chǎn)階級民主革命綱領(lǐng)。!!對推動革命的發(fā)展產(chǎn)生了重大而積極的影響。 !!但它并不是一個徹底的資產(chǎn)階級民主革命綱領(lǐng)。"; //提取文字創(chuàng)建數(shù)組 var pt=/!+[^!]+(?=!)/g; var arr=str.match(pt); console.log(arr) //遍歷數(shù)組,將數(shù)組中每個元素創(chuàng)建為一個節(jié)點實例 var nodes=[]; for(var i in arr){ var obj={}; obj.id=i; var len=arr[i].length; obj.title=arr[i].replace(/!/g,""); obj.level=len-obj.title.length; if(obj.level==1)obj.parent=-1; else obj.parent=findparent(obj.level,obj.id).id; obj.childrenids=[]; nodes.push(obj); } //遍歷數(shù)組,為每個節(jié)點補(bǔ)上子節(jié)點集合 for(var i in nodes){ nodes[i].childrenids=findchildrenid(nodes[i].id); } //轉(zhuǎn)化為json數(shù)組 var json={ title:"三民主義學(xué)說和資產(chǎn)階級共和國方案", id:-1, parent:-1, level:-1, childrenids:findchildrenid(-1) } createjson(json,json.childrenids); function createjson(node,idarr){ var c=[]; for(var i in idarr){ c.push(findbyid(idarr[i])); } node.children=c; for(var i in c){ createjson(c[i],c[i].childrenids); } } console.log(JSON.stringify(json,null," ")) function findchildrenid(id){ var arr=[]; for(var i in nodes){ if(nodes[i].parent==id)arr.push(nodes[i].id); } return arr; } function findparent(level,id){ var parr=findbylevel(level-1); var n={},sub; for(var i in parr){ if(parr[i].id最后執(zhí)行生成json的打印結(jié)果如下:
{ "title": "三民主義學(xué)說和資產(chǎn)階級共和國方案", "id": -1, "parent": -1, "level": -1, "childrenids": [ "0", "6" ], "children": [ { "id": "0", "title": "內(nèi)容 ", "level": 1, "parent": -1, "childrenids": [ "1", "2" ], "children": [ { "id": "1", "title": "同盟會的政治綱領(lǐng)是“驅(qū)除韃虜,恢復(fù)中華,創(chuàng)立民國,平均地權(quán)”。 ", "level": 2, "parent": "0", "childrenids": [], "children": [] }, { "id": "2", "title": "孫中山將同盟會的綱領(lǐng)概括為三大主義,即民族主義、民權(quán)主義、民生主義,后被稱為三民主義。 ", "level": 2, "parent": "0", "childrenids": [ "3", "4", "5" ], "children": [ { "id": "3", "title": "民族主義,即民族革命,包括“驅(qū)除韃虜,恢復(fù)中華”兩項內(nèi)容。 ", "level": 3, "parent": "2", "childrenids": [], "children": [] }, { "id": "4", "title": "民權(quán)主義即政治革命,內(nèi)容是“創(chuàng)立民國”,即建立資產(chǎn)階級民主共和國。 ", "level": 3, "parent": "2", "childrenids": [], "children": [] }, { "id": "5", "title": "民生主義即社會革命,指的是“平均地權(quán)”。 ", "level": 3, "parent": "2", "childrenids": [], "children": [] } ] } ] }, { "id": "6", "title": "評價: ", "level": 1, "parent": -1, "childrenids": [ "7", "8" ], "children": [ { "id": "7", "title": "它初步描繪出中國還不曾有過的資產(chǎn)階級共和國方案,是一個比較完整而明確的資產(chǎn)階級民主革命綱領(lǐng)。", "level": 2, "parent": "6", "childrenids": [], "children": [] }, { "id": "8", "title": "對推動革命的發(fā)展產(chǎn)生了重大而積極的影響。 ", "level": 2, "parent": "6", "childrenids": [], "children": [] } ] } ] }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/78322.html
摘要:可以這樣說,庫使得創(chuàng)建深度學(xué)習(xí)模型變得快速且簡單。在本教程中,你將了解如何用中更具靈活性的函數(shù)式來定義深度學(xué)習(xí)模型。如何使用函數(shù)式定義簡單的多層感知器卷積神經(jīng)網(wǎng)絡(luò)以及循環(huán)神經(jīng)網(wǎng)絡(luò)模型。 可以這樣說,Keras Python庫使得創(chuàng)建深度學(xué)習(xí)模型變得快速且簡單。序列API使得你能夠為大多數(shù)問題逐層創(chuàng)建模型。當(dāng)然它也是有局限性的,那就是它并不能讓你創(chuàng)建擁有共享層或具有多個輸入或輸出的模型。Ker...
摘要:秋招變夏招,還沒準(zhǔn)備好團(tuán)隊成員收割機(jī)牽頭,帶領(lǐng)名成員歷時個月,整理了一份機(jī)器學(xué)習(xí)算法工程師求職面經(jīng)。但如果之前并沒有意識到這一問題也沒關(guān)系,為你呈現(xiàn)一份小而美的面經(jīng)。這部分內(nèi)容包含了邏輯題目及概率題目兩方面的內(nèi)容。 秋招變夏招,還沒準(zhǔn)備好?Datawhale團(tuán)隊成員offer收割機(jī)牽頭,帶領(lǐng)14名成員歷時2個月,整理了一份機(jī)器學(xué)習(xí)算法工程師求職面經(jīng):Daily-interview。一份...
摘要:程序員小吳打算使用動畫的形式來幫助理解遞歸,然后通過遞歸的概念延伸至理解動態(tài)規(guī)劃算法思想。因此,分治策略一般用來解決子問題相互對立的問題,稱為標(biāo)準(zhǔn)分治,而動態(tài)規(guī)劃用來解決子問題重疊的問題。難點就在于找出動態(tài)規(guī)劃中的這三個概念。 在學(xué)習(xí)「數(shù)據(jù)結(jié)構(gòu)和算法」的過程中,因為人習(xí)慣了平鋪直敘的思維方式,所以「遞歸」與「動態(tài)規(guī)劃」這種帶循環(huán)概念(繞來繞去)的往往是相對比較難以理解的兩個抽象知識點。...
摘要:前端性能優(yōu)化的涉及點從服務(wù)器到協(xié)議再到宿主環(huán)境本身都要有比較深刻的認(rèn)識,業(yè)界目前主要還是以雅虎總結(jié)出來條前端性能優(yōu)化的黃金軍規(guī)為參考。 歡迎大家前往騰訊云技術(shù)社區(qū),獲取更多騰訊海量技術(shù)實踐干貨哦~ 導(dǎo)語 : 從事前端有6年+的時間了,從最開始的美工到重構(gòu)再到偏向js邏輯開發(fā)的前端開發(fā),一直在前端這個行業(yè)里面摸索和學(xué)習(xí),我現(xiàn)在將自己這些年的一個心得體會來個系統(tǒng)性的梳理寫成一篇關(guān)于性能優(yōu)化...
閱讀 2308·2021-11-15 11:36
閱讀 1530·2021-10-14 09:42
閱讀 4363·2021-09-30 09:52
閱讀 1867·2021-09-24 10:24
閱讀 1058·2021-09-02 09:56
閱讀 2878·2019-08-30 13:11
閱讀 3137·2019-08-30 13:06
閱讀 1021·2019-08-30 12:56