[{"data":1,"prerenderedAt":2112},["ShallowReactive",2],{"blog-taxonomies":3,"blog-stats":507,"post-数据结构\u002F数据结构-绪论":1083},[4,11,16,21,25,29,36,39,44,47,52,58,63,66,71,76,80,84,87,93,96,101,105,110,113,117,122,127,132,136,141,143,146,151,155,157,162,165,169,173,176,179,183,186,190,193,197,200,205,208,211,214,219,222,228,234,237,239,245,249,253,256,260,266,271,276,281,283,287,290,293,298,301,304,306,308,311,314,316,318,321,327,332,337,342,347,352,354,356,358,361,365,367,369,371,374,376,378,381,386,390,393,396,400,404,407,411,413,415,417,421,423,425,428,431,433,435,437,439,441,443,446,448,450,454,456,459,461,463,465,467,469,471,473,477,483,486,488,491,493,495,497,499,501,503,505],{"category":5,"tags":6},"笔记",[7,8,9,10],"QQ","插件","LiteLoader","美化",{"category":12,"tags":13},"其他",[14,15,10],"博客","IP签名",{"category":17,"tags":18},"杂谈",[19,20],"互联网","观点",{"category":5,"tags":22},[14,23,24],"GitHub","数据可视化",{"category":5,"tags":26},[14,27,28],"访问统计","不蒜子",{"category":30,"tags":31},"工具",[32,33,34,35],"Python","爬虫","选课脚本","广州大学",{"category":5,"tags":37},[38,5],"数学分析",{"category":40,"tags":41},"算法",[42,40,43],"数据结构","线性表",{"category":40,"tags":45},[42,46],"复习",{"category":5,"tags":48},[49,50,51],"高等代数","线性代数","知识点",{"category":5,"tags":53},[14,54,55,56,57],"Typora","PicGo","图床","Markdown",{"category":30,"tags":59},[60,61,62],"Jupyter","工具配置","中文",{"category":30,"tags":64},[65,61,10],"VSCode",{"category":30,"tags":67},[68,69,70,35],"路由器","OpenWrt","校园网",{"category":12,"tags":72},[73,74,75],"网络协议","Wireshark","DEVP2P",{"category":5,"tags":77},[73,74,78,79],"Lua","解码器",{"category":5,"tags":81},[82,5,83],"常微分方程","数学",{"category":5,"tags":85},[86,5,83],"概率论",{"category":30,"tags":88},[89,90,91,92],"Docker","WSL","Windows","磁盘清理",{"category":30,"tags":94},[32,33,95,35],"课程表",{"category":5,"tags":97},[14,98,99,100],"Hexo","Gitalk","评论系统",{"category":5,"tags":102},[14,103,98,104],"Obsidian","写作工具",{"category":12,"tags":106},[107,108,109],"课题研究","泊松分布","参数估计",{"category":12,"tags":111},[107,108,109,112],"组会",{"category":12,"tags":114},[109,115,108,116],"IM模型","统计学",{"category":17,"tags":118},[119,120,121],"软考","网络规划","信息系统项目管理",{"category":30,"tags":123},[124,125,126],"Arch Linux","AppImage","Linux",{"category":5,"tags":128},[129,130,131],"编程语言","计算机科学","内存管理",{"category":5,"tags":133},[134,135],"Canvas","前端",{"category":5,"tags":137},[14,138,139,140],"GitHub Actions","Vite","部署",{"category":5,"tags":142},[135],{"category":5,"tags":144},[135,145],"系统设计",{"category":5,"tags":147},[135,148,149,150],"安全","XSS","CSRF",{"category":152,"tags":153},"项目",[134,154],"PixiJS",{"category":152,"tags":156},null,{"category":40,"tags":158},[42,159,160,161],"栈","队列","JavaScript",{"category":40,"tags":163},[42,164,161],"哈希表",{"category":5,"tags":166},[167,161,168],"ES6","Set",{"category":40,"tags":170},[40,171,172],"动态规划","背包问题",{"category":40,"tags":174},[40,175],"滑动窗口",{"category":40,"tags":177},[42,178,161],"链表",{"category":40,"tags":180},[40,181,161,182],"ACM","面试",{"category":40,"tags":184},[40,161,185],"数据类型转换",{"category":40,"tags":187},[42,188,178,189],"顺序表","TypeScript",{"category":5,"tags":191},[135,154,134,192],"渲染",{"category":5,"tags":194},[135,195,134,196],"富文本编辑","wangEditor",{"category":40,"tags":198},[199,40,178],"力扣",{"category":5,"tags":201},[202,203,204,91],"DNS","加密","网络安全",{"category":5,"tags":206},[135,207],"Axios",{"category":5,"tags":209},[135,207,189,210],"接口封装",{"category":5,"tags":212},[135,213,145],"JWT",{"category":152,"tags":215},[134,216,217,154,218],"画布","React","项目开发",{"category":17,"tags":220},[221],"日志",{"category":5,"tags":223},[224,225,226,227],"Neo4j","图数据库","中心度分析","PageRank",{"category":12,"tags":229},[230,231,232,233],"论文","机器学习","随机森林","保险欺诈",{"category":5,"tags":235},[236],"人工智能",{"category":5,"tags":238},[231,40,32],{"category":12,"tags":240},[241,242,243,244],"共识算法","最长链","区块链","算法设计",{"category":5,"tags":246},[161,247,248,135],"闭包","作用域",{"category":5,"tags":250},[14,138,251,252],"RSS","自动化",{"category":30,"tags":254},[89,90,91,255],"安装",{"category":30,"tags":257},[258,91,259],"MSYS2","开发环境",{"category":5,"tags":261},[262,263,264,265],"团队协作","Git","Commit规范","代码审查",{"category":30,"tags":267},[268,269,270],"oh-my-posh","终端美化","CLI",{"category":5,"tags":272},[273,274,275],"上下文工程","Agent","RAG",{"category":5,"tags":277},[278,279,280],"前端工程化","技术选型","工程基建",{"category":5,"tags":282},[275],{"category":5,"tags":284},[285,286],"SDD","规格驱动开发",{"category":5,"tags":288},[289],"neovim",{"category":5,"tags":291},[292],"技术写作",{"category":5,"tags":294},[295,32,296,89,297],"FastAPI","后端","工程实践",{"category":152,"tags":299},[274,300],"Harness Engineering",{"category":5,"tags":302},[303],"RFC",{"category":152,"tags":305},[274,300,275],{"category":152,"tags":307},[274],{"category":40,"tags":309},[199,40,161,310],"两数之和",{"category":40,"tags":312},[199,40,161,313],"双指针",{"category":40,"tags":315},[199,40,161,178],{"category":40,"tags":317},[199,40,161,175],{"category":40,"tags":319},[199,40,161,320],"回溯",{"category":5,"tags":322},[323,324,325,326],"分布式处理与计算","Spark","Scala","RDD",{"category":5,"tags":328},[323,329,330,331],"线性回归","逻辑回归","监督学习",{"category":5,"tags":333},[323,334,335,336],"数值优化","牛顿法","收敛性",{"category":5,"tags":338},[323,339,340,341],"PCA","数据降维","正则化",{"category":5,"tags":343},[323,344,345,346],"聚类","层次聚类","K-Means",{"category":5,"tags":348},[323,349,350,351],"随机模拟","统计推断","EM算法",{"category":5,"tags":353},[24],{"category":5,"tags":355},[24],{"category":5,"tags":357},[24],{"category":40,"tags":359},[42,360],"图论",{"category":40,"tags":362},[42,363,364],"树","二叉树",{"category":40,"tags":366},[42,160],{"category":40,"tags":368},[42],{"category":40,"tags":370},[42,159],{"category":40,"tags":372},[42,40,373],"复杂度分析",{"category":40,"tags":375},[42,43,178],{"category":40,"tags":377},[42,43,188],{"category":40,"tags":379},[42,380],"基础概念",{"category":17,"tags":382},[383,384,385],"随记","照片","高中",{"category":17,"tags":387},[383,388,389],"团建","战地",{"category":17,"tags":391},[383,392],"生活",{"category":17,"tags":394},[383,395],"文学",{"category":17,"tags":397},[383,398,399],"SCP","模因",{"category":17,"tags":401},[383,402,403],"画集","艺术",{"category":17,"tags":405},[14,406,383],"写作",{"category":17,"tags":408},[383,409,410],"音乐","摇滚",{"category":17,"tags":412},[383,392],{"category":17,"tags":414},[383,409],{"category":17,"tags":416},[383,35,392],{"category":17,"tags":418},[383,419,420],"同人","手书",{"category":17,"tags":422},[383,392],{"category":17,"tags":424},[383,392],{"category":17,"tags":426},[383,427],"植物",{"category":17,"tags":429},[383,430],"读书",{"category":17,"tags":432},[383,392],{"category":17,"tags":434},[383,392],{"category":17,"tags":436},[383,392],{"category":17,"tags":438},[383,392],{"category":17,"tags":440},[383,392],{"category":17,"tags":442},[383,392],{"category":17,"tags":444},[14,445,383],"一周年",{"category":17,"tags":447},[383,392],{"category":17,"tags":449},[383,392],{"category":17,"tags":451},[35,452,453],"开源组织","SITE-193",{"category":17,"tags":455},[383,392],{"category":17,"tags":457},[383,458],"年末",{"category":17,"tags":460},[383,392],{"category":17,"tags":462},[383,392],{"category":17,"tags":464},[14,17],{"category":17,"tags":466},[383,392],{"category":17,"tags":468},[383,392],{"category":17,"tags":470},[383,392],{"category":17,"tags":472},[383,392],{"category":17,"tags":474},[383,475,476],"游戏","Control",{"category":30,"tags":478},[479,480,481,482],"Quadim","图像处理","四叉树","Rust",{"category":17,"tags":484},[14,485],"上线纪念",{"category":17,"tags":487},[383,395],{"category":30,"tags":489},[203,490],"测试",{"category":17,"tags":492},[383],{"category":17,"tags":494},[383,392],{"category":17,"tags":496},[383],{"category":5,"tags":498},[40],{"category":5,"tags":500},[40],{"category":5,"tags":502},[40],{"category":5,"tags":504},[40],{"category":5,"tags":506},[40],[508,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,579,583,587,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646,650,654,658,662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726,730,734,738,742,746,750,754,758,762,766,770,774,778,782,786,790,794,798,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865,869,873,877,881,885,889,893,897,901,904,907,911,915,919,923,927,930,934,938,942,946,950,954,957,961,965,969,973,977,981,984,988,992,996,1000,1004,1007,1011,1015,1019,1023,1027,1031,1035,1039,1043,1047,1051,1055,1059,1063,1067,1071,1075,1079],{"path":509,"words":510,"published":511,"date":156},"\u002Fposts\u002F2024\u002F2024-06-25-liteloaderqqnt",1296,"2024-06-25 11:03:08",{"path":513,"words":514,"published":515,"date":156},"\u002Fposts\u002F2024\u002F2024-06-26-ip签名",0,"2024-06-26 22:53:53",{"path":517,"words":518,"published":519,"date":156},"\u002Fposts\u002F2024\u002F2024-06-29-何加盐中文互联网正在加速崩塌",4853,"2024-06-29 00:47:13",{"path":521,"words":522,"published":523,"date":156},"\u002Fposts\u002F2024\u002F2024-07-12-github-chart",270,"2024-07-12 20:02:50",{"path":525,"words":526,"published":527,"date":156},"\u002Fposts\u002F2024\u002F2024-07-14-访客数统计",192,"2024-07-24 01:34:28",{"path":529,"words":530,"published":531,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-广大选课脚本",110,"2024-07-26 01:34:28",{"path":533,"words":534,"published":535,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数学分析笔记其二",14,"2024-07-26 23:54:02",{"path":537,"words":538,"published":539,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数据结构复习其二",12856,"2024-07-26 02:48:08",{"path":541,"words":542,"published":543,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数据结构复习相关",32856,"2024-07-26 02:24:14",{"path":545,"words":546,"published":547,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-线性代数与空间解析几何知识点全汇总",6110,"2024-07-26 03:27:55",{"path":549,"words":550,"published":551,"date":156},"\u002Fposts\u002F2024\u002F2024-07-31-typora-picgo-兰空图床打造markdown写作环境",311,"2024-07-31 12:56:23",{"path":553,"words":554,"published":555,"date":156},"\u002Fposts\u002F2024\u002F2024-09-02-jupyter配置中文",441,"2024-09-02 23:49:05",{"path":557,"words":558,"published":559,"date":156},"\u002Fposts\u002F2024\u002F2024-09-02-自定义vscode背景图片",100,"2024-09-02 23:39:00",{"path":561,"words":562,"published":563,"date":156},"\u002Fposts\u002F2024\u002F2024-09-03-制作gzhu校园网路由器",1423,"2024-09-03 23:43:18",{"path":565,"words":566,"published":567,"date":156},"\u002Fposts\u002F2024\u002F2024-09-26-09-25-2024",136,"2024-09-26 00:49:26",{"path":569,"words":570,"published":571,"date":156},"\u002Fposts\u002F2024\u002F2024-11-04-创建一个网络包解码器分析devp2p协议",1943,"2024-11-04 16:45:19",{"path":573,"words":574,"published":575,"date":156},"\u002Fposts\u002F2024\u002F2025-03-09-2024一些笔记常微分",16,"2024-12-09 22:51:00",{"path":577,"words":574,"published":578,"date":156},"\u002Fposts\u002F2024\u002F2025-03-09-2024一些笔记概率论","2025-03-09 22:51:00",{"path":580,"words":581,"published":582,"date":156},"\u002Fposts\u002F2025\u002F2025-03-01-windows下释放docker占用的wsl空间",164,"2025-03-01 13:54:15",{"path":584,"words":585,"published":586,"date":156},"\u002Fposts\u002F2025\u002F2025-03-01-爬虫实战-爬取广州大学课程表",774,"2025-03-01 14:55:48",{"path":588,"words":530,"published":589,"date":156},"\u002Fposts\u002F2025\u002F2025-04-03-hexo集成gitalk的问题","2025-04-03 14:26:34",{"path":591,"words":592,"published":593,"date":156},"\u002Fposts\u002F2025\u002F2025-09-22-记一次配置obsidian配合hexo写博客",92,"2025-09-22 16:47:52",{"path":595,"words":596,"published":597,"date":156},"\u002Fposts\u002F2025\u002F2025-10-24-10-20课题",204,"2025-10-24 08:15:01",{"path":599,"words":600,"published":601,"date":156},"\u002Fposts\u002F2025\u002F2025-11-02-组会朝花夕拾",501,"2025-11-02 18:56:59",{"path":603,"words":604,"published":605,"date":156},"\u002Fposts\u002F2025\u002F2025-11-05-基于随机加权推断模型im的参数估计算法",481,"2025-11-05 20:51:41",{"path":607,"words":608,"published":609,"date":156},"\u002Fposts\u002F2025\u002F2025-11-09-关于软考高项网规",884,"2025-11-09 19:54:52",{"path":611,"words":612,"published":613,"date":156},"\u002Fposts\u002F2025\u002F2025-11-17-arch-linux运行appimage相关",365,"2025-11-17 09:59:59",{"path":615,"words":616,"published":617,"date":156},"\u002Fposts\u002F2025\u002F2025-11-19-相关概念",2058,"2025-11-19 11:06:20",{"path":619,"words":620,"published":621,"date":156},"\u002Fposts\u002F2025\u002F2025-11-21-web可视化实践canvas",6393,"2025-11-21 14:50:48",{"path":623,"words":624,"published":625,"date":156},"\u002Fposts\u002F2025\u002F2025-11-22-使用-github-actions-自动部署基于vite的项目到-github-pages",272,"2025-11-23 01:59:24",{"path":627,"words":628,"published":629,"date":156},"\u002Fposts\u002F2025\u002F2025-11-22-关于前端包管理器npmpnpmyarn和bun",4890,"2025-11-22 21:21:15",{"path":631,"words":632,"published":633,"date":156},"\u002Fposts\u002F2025\u002F2025-11-23-undo-redo-机制具体实现",7839,"2025-11-23 19:15:00",{"path":635,"words":636,"published":637,"date":156},"\u002Fposts\u002F2025\u002F2025-11-27-前端安全-关于xss与crsf",1866,"2025-11-28 02:05:25",{"path":639,"words":640,"published":641,"date":156},"\u002Fposts\u002F2025\u002F2025-12-05-现代协同-2d-画布编辑器pixijs-v8",4285,"2025-12-05 02:00:16",{"path":643,"words":644,"published":645,"date":156},"\u002Fposts\u002F2025\u002F2025-12-07-杂谈-课题组系统设计",3710,"2025-12-07 21:09:33",{"path":647,"words":648,"published":649,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-javascript中的数组方法与栈stack和队列queue的实现",474,"2025-11-29 16:58:15",{"path":651,"words":652,"published":653,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于javascript-实现哈希表",189,"2025-11-27 11:31:39",{"path":655,"words":656,"published":657,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于javascript的set方法",332,"2025-12-25 15:26:18",{"path":659,"words":660,"published":661,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于动态规划(背包问题为例)",1238,"2025-11-17 18:24:04",{"path":663,"words":664,"published":665,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于滑动窗口",712,"2025-11-20 15:04:40",{"path":667,"words":668,"published":669,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于链表(javascript)",500,"2025-11-25 13:00:48",{"path":671,"words":672,"published":673,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-面试算法acm模式构建构建输入输出模板",2051,"2025-12-25 23:09:45",{"path":675,"words":676,"published":677,"date":156},"\u002Fposts\u002F2025\u002F2025-12-26-javascript-数字数组字符串的处理",483,"2025-12-26 11:20:25",{"path":679,"words":680,"published":681,"date":156},"\u002Fposts\u002F2025\u002F2025-12-26-javascripttypescript-的顺序表链表实现",446,"2025-12-26 12:16:12",{"path":683,"words":684,"published":685,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-前端画布设计vol-1-实现基础yuan素渲染和状态控制",2136,"2025-12-28 01:23:08",{"path":687,"words":688,"published":689,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-前端画布设计vol-2-实现富文本编辑",1838,"2025-12-28 02:58:47",{"path":691,"words":692,"published":693,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-算法刷题-关于链表操作",2135,"2025-12-27 16:12:42",{"path":695,"words":696,"published":697,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-配置dnscrypt-proxy实现加密dns服务windows",1899,"2025-11-15 01:06:37",{"path":699,"words":700,"published":701,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-关于网络请求xhrajaxfetchaxios",7788,"2025-10-28 15:48:46",{"path":703,"words":704,"published":705,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-接口封装与请求规范axios为例",2373,"2025-12-29 01:01:18",{"path":707,"words":708,"published":709,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-身份验证管理-基于-jwt-token-的实现",2709,"2025-11-23 22:04:41",{"path":711,"words":712,"published":713,"date":156},"\u002Fposts\u002F2025\u002F2025-12-29-记canvas画布项目开发",6254,"2025-12-29 04:52:15",{"path":715,"words":716,"published":717,"date":156},"\u002Fposts\u002F2025\u002Fabout-site",116,"2025-03-31 16:44:24",{"path":719,"words":720,"published":721,"date":156},"\u002Fposts\u002F2025\u002F使用neo4j图数据科学库gds进行中心度分析",143,"2025-04-02 23:37:24",{"path":723,"words":724,"published":725,"date":156},"\u002Fposts\u002F2026\u002F2026-01-03-论文实训草稿",10445,"2026-01-03 14:10:49",{"path":727,"words":728,"published":729,"date":156},"\u002Fposts\u002F2026\u002F2026-01-06-人工智能导论",11461,"2026-01-07 03:25:49",{"path":731,"words":732,"published":733,"date":156},"\u002Fposts\u002F2026\u002F2026-01-07-机器学习相关算法",82,"2026-01-08 02:28:13",{"path":735,"words":736,"published":737,"date":156},"\u002Fposts\u002F2026\u002F2026-01-16-关于低复杂度最长链共识算法设计",4466,"2026-01-16 10:33:23",{"path":739,"words":740,"published":741,"date":156},"\u002Fposts\u002F2026\u002F2026-01-19-杂记2026-01-19",5754,"2026-01-20 01:03:26",{"path":743,"words":744,"published":745,"date":156},"\u002Fposts\u002F2026\u002F2026-01-22-github-action-自动同步博客到-github-主页",1069,"2026-01-22 16:31:47",{"path":747,"words":748,"published":749,"date":156},"\u002Fposts\u002F2026\u002F2026-03-01-windows-wsl安装docker",257,"2026-03-01 20:55:31",{"path":751,"words":752,"published":753,"date":156},"\u002Fposts\u002F2026\u002F2026-03-14-关于-msys2",701,"2026-03-15 03:05:04",{"path":755,"words":756,"published":757,"date":156},"\u002Fposts\u002F2026\u002F2026-03-28-团队项目协作规范随记",2419,"2026-03-29 05:33:50",{"path":759,"words":760,"published":761,"date":156},"\u002Fposts\u002F2026\u002F2026-03-29-oh-my-posh配置分享",104,"2026-03-29 16:34:43",{"path":763,"words":764,"published":765,"date":156},"\u002Fposts\u002F2026\u002F2026-06-13-从上下文工程到-agent-harness-engineering",8840,"2026-06-13 21:06:20",{"path":767,"words":768,"published":769,"date":156},"\u002Fposts\u002F2026\u002F2026-07-13-简谈前端基建质量标准与ai友好建设",3814,"2026-07-13 21:06:20",{"path":771,"words":772,"published":773,"date":156},"\u002Fposts\u002F2026\u002F2026-07-15-agentic-rag-系统实践",13357,"2026-07-15 21:06:20",{"path":775,"words":776,"published":777,"date":156},"\u002Fposts\u002F2026\u002F2026-07-18-简谈sdd规范驱动开发-copy",4476,"2026-07-18 11:06:20",{"path":779,"words":780,"published":781,"date":156},"\u002Fposts\u002F2026\u002F2026-07-20-个人neovim配置分享",366,"2026-07-22 13:46:50",{"path":783,"words":784,"published":785,"date":156},"\u002Fposts\u002F2026\u002F2026-07-20-关于技术写作-设计文档",6763,"2026-07-20 13:46:50",{"path":787,"words":788,"published":789,"date":156},"\u002Fposts\u002F2026\u002F2026-07-29-fastapi-工程实践随记",3417,"2026-07-29 04:58:34",{"path":791,"words":792,"published":793,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-06-19-rfc-liskin_code_agent",3563,"2026-06-19 15:18:20",{"path":795,"words":796,"published":797,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-07-25-rfc-glushkov_ogas",13461,"2026-07-28 23:46:50",{"path":799,"words":800,"published":793,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-08-03-adr-ogas-arkhiv",2698,{"path":802,"words":803,"published":804,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002Frag\u002F2026-08-12-arkhiv_rag-vol-1",4366,"2026-08-12 15:18:20",{"path":806,"words":807,"published":808,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-25-力扣百题速练javascripttypescriptvol-1",3108,"2025-12-25 13:57:08",{"path":810,"words":811,"published":812,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-26-力扣百题速练javascripttypescriptvol-2",3185,"2025-12-26 13:57:08",{"path":814,"words":815,"published":816,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-28-力扣百题速练javascripttypescriptvol-3",2533,"2025-12-29 02:15:44",{"path":818,"words":819,"published":820,"date":156},"\u002Fposts\u002Fleetcode\u002F2026-01-17-力扣百题速练javascripttypescriptvol-4",3024,"2026-01-17 22:53:01",{"path":822,"words":823,"published":824,"date":156},"\u002Fposts\u002Fleetcode\u002F2026-01-19-力扣百题速练javascripttypescriptvol-5",293,"2026-01-19 15:15:12",{"path":826,"words":827,"published":828,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算spark系统与scala语言",4320,"2026-07-06 14:10:49",{"path":830,"words":831,"published":832,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算分类与回归分析",2081,"2026-07-07 12:40:29",{"path":834,"words":835,"published":836,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算数值优化方法",2182,"2026-07-07 13:50:29",{"path":838,"words":839,"published":840,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算数据降维",1583,"2026-07-07 21:50:29",{"path":842,"words":843,"published":844,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算聚类分析",1882,"2026-07-07 16:50:29",{"path":846,"words":847,"published":848,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算随机模拟与统计推断",2433,"2026-07-06 22:40:29",{"path":850,"words":851,"published":852,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-14-数据可视化-基本图像",10011,"2026-06-14 20:18:20",{"path":854,"words":855,"published":856,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-14-数据可视化-概论",10030,"2026-06-14 15:18:20",{"path":858,"words":859,"published":860,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-15-数据可视化-可视化库",2032,"2026-06-15 20:18:20",{"path":862,"words":863,"published":864,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-图",5451,"2025-04-15 20:48:06",{"path":866,"words":867,"published":868,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-树",4211,"2025-04-30 02:19:06",{"path":870,"words":871,"published":872,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-队列",921,"2025-04-11 15:30:08",{"path":874,"words":875,"published":876,"date":156},"\u002Fposts\u002F数据结构\u002F关于数据结构的一些想法",456,"2025-04-04 19:13:49",{"path":878,"words":879,"published":880,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-栈",920,"2025-04-18 00:17:37",{"path":882,"words":883,"published":884,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-算法复杂度",2153,"2025-04-05 16:09:55",{"path":886,"words":887,"published":888,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-线性表链表",4572,"2025-04-06 00:24:40",{"path":890,"words":891,"published":892,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-线性表顺序表",4191,"2025-04-05 22:09:59",{"path":894,"words":895,"published":896,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-绪论",2881,"2025-04-05 11:31:22",{"path":898,"words":899,"published":156,"date":900},"\u002Fposts\u002F杂记\u002F2023-12-26-2023年12月26日",7,"2023-12-26 23:51:33",{"path":902,"words":899,"published":156,"date":903},"\u002Fposts\u002F杂记\u002F2024-01-01-2024团建","2024-01-01 01:51:27",{"path":905,"words":581,"published":156,"date":906},"\u002Fposts\u002F杂记\u002F2024-01-09-随记","2024-01-09 20:50:35",{"path":908,"words":909,"published":156,"date":910},"\u002Fposts\u002F杂记\u002F2024-03-12-花名",5275,"2024-03-12 16:04:23",{"path":912,"words":913,"published":156,"date":914},"\u002Fposts\u002F杂记\u002F2024-04-15-逆模因",1353,"2024-04-15 00:26:16",{"path":916,"words":917,"published":156,"date":918},"\u002Fposts\u002F杂记\u002F2024-05-03-艺作",27,"2024-05-03 00:01:00",{"path":920,"words":921,"published":156,"date":922},"\u002Fposts\u002F杂记\u002F2024-05-21-关于博客",1720,"2024-02-21 23:21:11",{"path":924,"words":925,"published":156,"date":926},"\u002Fposts\u002F杂记\u002F2024-06-20-dnvrc维克多崔专访-2023",2036,"2024-06-20 00:28:39",{"path":928,"words":760,"published":156,"date":929},"\u002Fposts\u002F杂记\u002F2024-06-25-6月25日随记","2024-06-25 12:46:36",{"path":931,"words":932,"published":156,"date":933},"\u002Fposts\u002F杂记\u002F2024-06-25-歌名-想見星星",148,"2024-06-25 22:47:59",{"path":935,"words":936,"published":156,"date":937},"\u002Fposts\u002F杂记\u002F2024-07-11-桂花岗",6,"2024-07-11 00:28:17",{"path":939,"words":940,"published":156,"date":941},"\u002Fposts\u002F杂记\u002F2024-07-15-rolling-bocci",9,"2024-07-15 21:25:56",{"path":943,"words":944,"published":156,"date":945},"\u002Fposts\u002F杂记\u002F2024-07-22-七月九日",34,"2024-07-09 17:54:23",{"path":947,"words":948,"published":156,"date":949},"\u002Fposts\u002F杂记\u002F2024-07-22-六月随记",1052,"2024-07-22 01:03:19",{"path":951,"words":952,"published":156,"date":953},"\u002Fposts\u002F杂记\u002F2024-07-22-石菖蒲",41,"2024-07-10 01:26:05",{"path":955,"words":514,"published":156,"date":956},"\u002Fposts\u002F杂记\u002F2024-07-23-新书","2024-07-23 01:05:49",{"path":958,"words":959,"published":156,"date":960},"\u002Fposts\u002F杂记\u002F2024-07-29-年前",74,"2024-07-29 23:59:07",{"path":962,"words":963,"published":156,"date":964},"\u002Fposts\u002F杂记\u002F2024-07-30-周边",138,"2024-07-30 02:03:23",{"path":966,"words":967,"published":156,"date":968},"\u002Fposts\u002F杂记\u002F2024-07-31-2024-7-31日",185,"2024-07-31 01:21:52",{"path":970,"words":971,"published":156,"date":972},"\u002Fposts\u002F杂记\u002F2024-08-02-八月",1710,"2024-08-30 00:31:02",{"path":974,"words":975,"published":156,"date":976},"\u002Fposts\u002F杂记\u002F2024-09-01-九月",1484,"2024-09-26 16:30:15",{"path":978,"words":979,"published":156,"date":980},"\u002Fposts\u002F杂记\u002F2024-09-08-2024年9月8日",97,"2024-09-08 13:59:36",{"path":982,"words":514,"published":156,"date":983},"\u002Fposts\u002F杂记\u002F2024-09-19-博客站的一周年","2024-09-18 23:36:24",{"path":985,"words":986,"published":156,"date":987},"\u002Fposts\u002F杂记\u002F2024-10-03-十月",1028,"2024-10-31 23:54:27",{"path":989,"words":990,"published":156,"date":991},"\u002Fposts\u002F杂记\u002F2024-11-04-十一月",2134,"2024-11-30 00:04:39",{"path":993,"words":994,"published":156,"date":995},"\u002Fposts\u002F杂记\u002F2024-11-10-gzhu-site-193",80,"2024-11-10 19:19:12",{"path":997,"words":998,"published":156,"date":999},"\u002Fposts\u002F杂记\u002F2024-12-01-十二月",455,"2024-12-30 23:13:47",{"path":1001,"words":1002,"published":156,"date":1003},"\u002Fposts\u002F杂记\u002F2024-12-21-年末",23,"2024-12-21 23:21:49",{"path":1005,"words":522,"published":156,"date":1006},"\u002Fposts\u002F杂记\u002F2025-01-30-一月","2025-01-30 23:44:41",{"path":1008,"words":1009,"published":156,"date":1010},"\u002Fposts\u002F杂记\u002F2025-03-01-二月",224,"2025-02-28 00:11:08",{"path":1012,"words":1013,"published":156,"date":1014},"\u002Fposts\u002F杂记\u002F2025-03-01-博客杂谈",344,"2025-03-01 16:03:18",{"path":1016,"words":1017,"published":156,"date":1018},"\u002Fposts\u002F杂记\u002F2025-03-05-三月",2090,"2025-03-05 19:17:28",{"path":1020,"words":1021,"published":156,"date":1022},"\u002Fposts\u002F杂记\u002F2025-07-10-七月",361,"2025-07-10 22:04:32",{"path":1024,"words":1025,"published":156,"date":1026},"\u002Fposts\u002F杂记\u002F2025-09-21-九月",781,"2025-09-21 20:53:37",{"path":1028,"words":1029,"published":156,"date":1030},"\u002Fposts\u002F杂记\u002F2025-10-09-十月",591,"2025-10-09 00:35:07",{"path":1032,"words":1033,"published":156,"date":1034},"\u002Fposts\u002F杂记\u002Fcontrol",13,"2023-09-25 13:03:59",{"path":1036,"words":1037,"published":156,"date":1038},"\u002Fposts\u002F杂记\u002Fquadim四叉树图像处理",1094,"2023-10-21 11:27:06",{"path":1040,"words":1041,"published":156,"date":1042},"\u002Fposts\u002F杂记\u002Fsuccess",24,"2023-09-22 15:59:07",{"path":1044,"words":1045,"published":156,"date":1046},"\u002Fposts\u002F杂记\u002F三光年",295,"2023-11-18 04:18:40",{"path":1048,"words":1049,"published":156,"date":1050},"\u002Fposts\u002F杂记\u002F加密测试",961,"2023-11-21 14:24:01",{"path":1052,"words":1053,"published":156,"date":1054},"\u002Fposts\u002F杂记\u002F啊啊啊啊啊啊啊",54,"2023-09-20 17:29:33",{"path":1056,"words":1057,"published":156,"date":1058},"\u002Fposts\u002F杂记\u002F杂谈",124,"2023-09-25 23:11:32",{"path":1060,"words":1061,"published":156,"date":1062},"\u002Fposts\u002F杂记\u002F艹",25,"2023-10-21 17:40:43",{"path":1064,"words":1065,"published":1066,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习卷积神经网络",3168,"2026-06-07 11:23:08",{"path":1068,"words":1069,"published":1070,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习循环神经网络",2348,"2026-06-07 11:33:08",{"path":1072,"words":1073,"published":1074,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习改进学习方法",3360,"2026-06-07 10:13:08",{"path":1076,"words":1077,"published":1078,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习深度生成模型",2727,"2026-06-07 11:43:08",{"path":1080,"words":1081,"published":1082,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习神经网络基础",3205,"2026-06-07 10:03:08",{"id":1084,"title":1085,"abbrlink":1086,"body":1087,"category":40,"cover":156,"date":156,"description":1154,"extension":2101,"mathjax":2102,"meta":2103,"navigation":2106,"path":894,"published":896,"readingMinutes":2107,"seo":2108,"stem":2109,"sticky":156,"swiper_index":156,"tags":2110,"updated":156,"words":895,"__hash__":2111},"posts\u002Fposts\u002F数据结构\u002F数据结构-绪论.md","数据结构-绪论","45088",{"type":1088,"value":1089,"toc":2080},"minimark",[1090,1098,1102,1138,1144,1155,1158,1164,1172,1178,1181,1188,1195,1202,1209,1215,1221,1224,1234,1239,1242,1253,1256,1259,1264,1267,1270,1276,1281,1292,1298,1308,1315,1320,1327,1330,1335,1338,1344,1349,1354,1357,1360,1363,1368,1373,1376,1381,1387,1440,1445,1451,1500,1503,1508,1511,1516,1522,1591,1594,1597,1604,1606,1609,1612,1615,1623,1626,1632,1638,1641,1647,1649,1651,1662,1668,1671,1677,1683,1685,1687,1690,1696,1707,1713,1719,1721,1723,1726,1732,1741,1747,1753,1755,1757,1774,1780,1783,1789,1795,1797,1800,1815,1826,1840,1846,1849,1855,1861,1863,1865,1870,1892,1900,1924,1926,1929,1940,1945,1954,1960,1966,1971,1976,1979,1985,1988,1991,1997,2009,2015,2021,2024,2026,2029,2032,2052,2059,2065,2074],[1091,1092,1094],"h2",{"id":1093},"_11-数据结构的基本概念",[1095,1096,1097],"strong",{},"1.1 数据结构的基本概念",[1099,1100,1101],"p",{},"　　数据、数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。",[1103,1104,1105],"blockquote",{},[1099,1106,1107,1110,1111,1114,1115,1118,1119,1121,1122,1125,1126,1129,1130,1133,1134,1137],{},[1095,1108,1109],{},"数据","(data)是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。\n",[1095,1112,1113],{},"数据元素","(data element)是数据的基本单位，在计算机程序中通常作为一个整体进行考虑和处理。\n",[1095,1116,1117],{},"数据对象","(data object)是性质相同的数据元素的集合，是数据的一个子集。\n",[1095,1120,42],{},"(data structure)是相互之间存在一种或多种特定关系的数据元素的集合。\n",[1095,1123,1124],{},"存储结构","（",[1095,1127,1128],{},"物理结构","）是数据结构在计算机中的表示（又称映像）。\n",[1095,1131,1132],{},"数据类型","(data type)是一个值的集合和定义在这个值集上的一组操作的总称。\n",[1095,1135,1136],{},"抽象数据类型","(Abstract Data Type)是指一个数学模型以及定义在该模型上的一组操作。",[1139,1140,1142],"h3",{"id":1141},"抽象数据类型的定义",[1095,1143,1141],{},[1145,1146,1151],"pre",{"className":1147,"code":1149,"language":1150},[1148],"language-text","ADT 抽象数据类型名\n{\n    数据对象：数据对象的定义\n    数据关系：数据关系的定义\n    基本操作：基本操作的定义\n}ADT 抽象数据类型名\n","text",[1152,1153,1149],"code",{"__ignoreMap":1154},"",[1099,1156,1157],{},"例子如下",[1099,1159,1160,1163],{},[1095,1161,1162],{},"抽象数据类型复数和有理数的定义","（有理数是其分子、分母均为自然数且分母不为零的分数）。",[1145,1165,1170],{"className":1166,"code":1168,"language":1169,"meta":1154},[1167],"language-c","复数定义：\nADT Complex  \u002F\u002F复数定义 a±bi\n{\n    数据对象：D = {a, b | a,b为实数}\n    数据关系：R = {\u003Ca, b>}\n    基本操作：\n        InitComplex(&C, re, im)\n            操作结果：构造一个复数C，其实部和虚部分别为re和im\n        DestroyCmoplex(&C)\n            操作结果：销毁复数C\n        Get(C, k, &e)\n            初始条件：复数C已存在\n            操作结果：用e返回复数C的第k元的值\n        Put(&C, k, e)\n            初始条件：复数C已存在\n            操作结果：改变复数C的第k元的值为e\n        IsAscending(C)\n            初始条件：复数C已存在\n            操作结果：如果复数C的两个元素按升序排列，则返回1，否则返回0\n        IsDescending(C)\n            初始条件：复数C已存在\n            操作结果：如果复数C的两个元素按降序排列，则返回1，否则返回0\n        Max(C, &e)\n            初始条件：复数C已存在\n            操作结果：用e返回复数C的两个元素中值较大的一个\n        Min(C, &e)\n            初始条件：复数C已存在\n            操作结果：用e返回复数C的两个元素中值较小的一个\n}ADT Complex\n\n","c",[1152,1171,1168],{"__ignoreMap":1154},[1145,1173,1176],{"className":1174,"code":1175,"language":1169,"meta":1154},[1167],"有理数定义：\nADT RationalNumber  \u002F\u002F有理数定义\n{\n    数据对象：D={s, m | s,m为自然数，且m不为0}\n    数据关系：R={\u003Cs, m>}\n    基本操作：\n        InitRationalNumber(&R, s, m)\n            操作结果：构造一个有理数R，其分子和分母分别为s和m\n        DestroyRationalNumber(&R)\n            操作结果：销毁有理数R\n        Get(R, k, &e)\n            初始条件：有理数R已存在\n            操作结果：用e返回有理数R的第k元的值\n        Put(&R, k, e)\n            初始条件：有理数R已存在\n            操作结果：改变有理数R的第k元的值为e\n        IsAscending(R)\n            初始条件：有理数R已存在\n            操作结果：若有理数R的两个元素按升序排列，则返回1，否则返回0\n        IsDescending(R)\n            初始条件：有理数R已存在\n            操作结果：若有理数R的两个元素按降序排列，则返回1，否则返回0\n        Max(R, &e)\n            初始条件：有理数R已存在\n            操作结果：用e返回有理数R的两个元素中值较大的一个\n        Min(R, &e)\n            初始条件：有理数R已存在\n            操作结果：用e返回有理数R的两个元素中值较小的一个\n}ADT RationalNumber\n",[1152,1177,1175],{"__ignoreMap":1154},[1099,1179,1180],{},"根据数据元素之间关系的 不同特性，通常有下列几种类基本结构：",[1099,1182,1183,1184,1187],{},"(1) ",[1095,1185,1186],{},"集合"," 结构中的 如生 数据元素之间除了“同属千一个集合”的关系外，别无其他关系",[1099,1189,1190,1191,1194],{},"(2) ",[1095,1192,1193],{},"线性结构"," 结构中的数据元素之间存在一个对 一个的关系；",[1099,1196,1197,1198,1201],{},"(3) ",[1095,1199,1200],{},"树形结构"," 结构中的数据元素之间存在一 个对多个的关系；",[1099,1203,1204,1205,1208],{},"(4) ",[1095,1206,1207],{},"图状结构或网状结构"," 结构中的数据 元素之间存在多个对多个的关系。",[1139,1210,1212],{"id":1211},"_112-数据结构三要素",[1095,1213,1214],{},"1.1.2 数据结构三要素",[1099,1216,1217,1218],{},"　　　　",[1095,1219,1220],{},"① 逻辑结构",[1099,1222,1223],{},"　　　　　　逻辑结构指数据元素之间存在的逻辑关系，是固有的客观联系；",[1099,1225,1226,1227,1229,1230,1233],{},"　　　　　　逻辑结构分为",[1095,1228,1193],{},"与",[1095,1231,1232],{},"非线性结构","，比如：线性表、树、图等；",[1099,1235,1217,1236],{},[1095,1237,1238],{},"② 存储结构",[1099,1240,1241],{},"　　　　　　存储结构又称为物理结构，指数据结构在计算机中的表示（映像），是计算机内部的存储方法；",[1099,1243,1244,1245,1248,1249,1252],{},"　　　　　　存储结构主要有",[1095,1246,1247],{},"顺序存储、链式存储、索引存储","和",[1095,1250,1251],{},"散列存储","；",[1099,1254,1255],{},"　　　　　　一种逻辑结构通过映像便可以得到它的存储结构；",[1099,1257,1258],{},"　　　　　　诸如顺序表、哈希表、链表这样的表述，它们既体现了逻辑结构（均为线性），又体现了存储结构（顺序、散列、链式）；",[1099,1260,1261,1262,1252],{},"　　　　　　而这样的表述我们往往就直接称之为",[1095,1263,42],{},[1099,1265,1266],{},"　　　　　　诸如有序表，它只体现了逻辑结构（线性），而存储结构是未知的（可以是顺序、链式……）；",[1099,1268,1269],{},"　　　　　　不存在只体现存储结构而不体现逻辑结构的表述；",[1099,1271,1272,1273],{},"　　　　　　所以，我们认为：",[1095,1274,1275],{},"逻辑结构独立于存储结构。",[1099,1277,1217,1278],{},[1095,1279,1280],{},"③ 数据的运算（算法）",[1099,1282,1283,1284,1287,1288,1291],{},"　　　　　　算法包括运算的",[1095,1285,1286],{},"定义","（取决于逻辑结构，体现算法功能）与",[1095,1289,1290],{},"实现","（取决于存储结构，体现于操作步骤）。",[1139,1293,1295],{"id":1294},"_12-算法的基本概念",[1095,1296,1297],{},"1.2 算法的基本概念",[1099,1299,1300,1301,1304,1305,1252],{},"　　算法的 5 个重要特性：",[1095,1302,1303],{},"有穷性、确定性、有效性（可行性）、输入","，",[1095,1306,1307],{},"输出",[1099,1309,1310,1311,1314],{},"　　一个好的算法的目标：",[1095,1312,1313],{},"正确性、可读性、鲁棒性、效率与低存储量需求","。",[1099,1316,1317],{},[1095,1318,1319],{},"1.3 算法分析",[1099,1321,1322,1323,1326],{},"　　",[1095,1324,1325],{},"时间复杂度","指算法所有语句被重复执行次数总和的数量级。",[1099,1328,1329],{},"　　常见时间复杂度比较：",[1099,1331,1217,1332],{},[1095,1333,1334],{},"O(1) \u003C O(log n) \u003C O(n) \u003C O(n log n) \u003C O(n^2) \u003C O(n^3) \u003C O(2^n) \u003C O(n!) \u003C O(n^n)",[1099,1336,1337],{},"　　　　(log 表示以 2 为底的对数)",[1099,1339,1322,1340,1343],{},[1095,1341,1342],{},"空间复杂度","指算法耗费存储空间的数量级。",[1099,1345,1346],{},[1095,1347,1348],{},"1.4 时间复杂度的计算",[1139,1350,1352],{"id":1351},"计算时间复杂度",[1095,1353,1351],{},[1099,1355,1356],{},"问题规模——> 输入量的多少",[1099,1358,1359],{},"语句频度——> 一条语句的重复执行次数",[1099,1361,1362],{},"执行时间\u003C—— 所有语句频度之和",[1103,1364,1365],{},[1099,1366,1367],{},"1.基本操作，即只有常数项，认为其时间复杂度为O(1)\n2.顺序结构，时间复杂度按加法进行计算\n3.循环结构，时间复杂度按乘法进行计算\n4.分支结构，时间复杂度取最大值 判断一个算法的效率时，往往只需要关注操作数量的最高次项，其它次要项和常数项可以忽略\n5.在没有特殊说明时，我们所分析的算法的时间复杂度都是指最坏时间复杂度",[1099,1369,1370],{},[1095,1371,1372],{},"循环条件包含主体变量",[1099,1374,1375],{},"将执行次数代入循环条件进行求解：",[1099,1377,1378],{},[1095,1379,1380],{},"示例1：",[1145,1382,1385],{"className":1383,"code":1384,"language":1169,"meta":1154},[1167],"int i = 1;\nwhile (i \u003C= n)\n    i = i * 2;\n",[1152,1386,1384],{"__ignoreMap":1154},[1388,1389,1390,1405,1414,1423],"ul",{},[1391,1392,1393,1394,1398,1399,1125,1402,1404],"li",{},"每次循环后 ",[1395,1396,1397],"em",{},"i"," =2",[1395,1400,1401],{},"t",[1395,1403,1401],{}," 为执行次数）",[1391,1406,1407,1408,1410,1411],{},"终止条件：2",[1395,1409,1401],{}," ≤ ",[1395,1412,1413],{},"n",[1391,1415,1416,1417],{},"解得 ",[1395,1418,1419,1420,1413],{},"t ",[1395,1421,1422],{},"≤ log2",[1391,1424,1425,1426,1429,1430,1432,1433,1436,1437,1439],{},"时间复杂度：",[1395,1427,1428],{},"T","(",[1395,1431,1413],{},") = ",[1395,1434,1435],{},"O","(log",[1395,1438,1413],{},")",[1099,1441,1442],{},[1095,1443,1444],{},"示例2：",[1145,1446,1449],{"className":1447,"code":1448,"language":1169,"meta":1154},[1167],"int i = 3;\nwhile ((i + 1) * (i + 1) \u003C n)\n    i = i + 1;\n",[1152,1450,1448],{"__ignoreMap":1154},[1388,1452,1453,1467,1481,1489],{},[1391,1454,1455,1456,1458,1459,1461,1462,1458,1464,1466],{},"令 ",[1395,1457,1401],{},"=",[1395,1460,1397],{},"−3，则 ",[1395,1463,1397],{},[1395,1465,1401],{},"+3",[1391,1468,1469,1470,1472,1473,1475,1476,1478,1479],{},"代入条件：(",[1395,1471,1401],{},"+3+1)2\u003C",[1395,1474,1413],{},"⟹(",[1395,1477,1401],{},"+4)2\u003C",[1395,1480,1413],{},[1391,1482,1416,1483,1485,1486,1488],{},[1395,1484,1401],{},"\u003C",[1395,1487,1413],{},"−4",[1391,1490,1425,1491,1429,1493,1495,1496,1429,1498,1439],{},[1395,1492,1428],{},[1395,1494,1413],{},")=",[1395,1497,1435],{},[1395,1499,1413],{},[1501,1502],"hr",{},[1099,1504,1505],{},[1095,1506,1507],{},"循环条件与主体变量无关",[1099,1509,1510],{},"通过数学归纳法或递归展开直接计数：",[1099,1512,1513],{},[1095,1514,1515],{},"示例（递归函数）：",[1145,1517,1520],{"className":1518,"code":1519,"language":1169,"meta":1154},[1167],"int fact(int n) {\n    if (n \u003C= 1) return 1;\n    return n * fact(n - 1);\n}\n",[1152,1521,1519],{"__ignoreMap":1154},[1388,1523,1524,1537,1581],{},[1391,1525,1526,1527,1429,1529,1531,1532,1429,1534,1536],{},"递归方程：",[1395,1528,1428],{},[1395,1530,1413],{},")=1+",[1395,1533,1428],{},[1395,1535,1413],{},"−1)",[1391,1538,1539,1540,1429,1542,1531,1544,1429,1546,1548,1549,1429,1551,1553,1554,1557,1558,1429,1560,1562,1563,1565,1566,1458,1568,1570,1571,1573,1574,1576,1577,1429,1579,1439],{},"展开递推：",[1395,1541,1428],{},[1395,1543,1413],{},[1395,1545,1428],{},[1395,1547,1413],{},"−1)=1+1+",[1395,1550,1428],{},[1395,1552,1413],{},"−2) ⋮=",[1395,1555,1556],{},"k","+",[1395,1559,1428],{},[1395,1561,1413],{},"−",[1395,1564,1556],{},")(当 ",[1395,1567,1556],{},[1395,1569,1413],{},"−1)=(",[1395,1572,1413],{},"−1)+",[1395,1575,1428],{},"(1)=",[1395,1578,1435],{},[1395,1580,1413],{},[1391,1582,1425,1583,1429,1585,1495,1587,1429,1589,1439],{},[1395,1584,1428],{},[1395,1586,1413],{},[1395,1588,1435],{},[1395,1590,1413],{},[1091,1592,1593],{"id":1593},"常见的数据结构",[1099,1595,1596],{},"如下图所示，常见的数据结构可分为「线性数据结构」与「非线性数据结构」，具体为：「数组」、「链表」、「栈」、「队列」、「树」、「图」、「散列表」、「堆」。",[1099,1598,1599],{},[1600,1601],"img",{"alt":1602,"src":1603},"Picture1.png","https:\u002F\u002Fpic.leetcode-cn.com\u002F1599638810-SZDwfK-Picture1.png",[1501,1605],{},[1139,1607,1608],{"id":1608},"数组",[1099,1610,1611],{},"数组是将相同类型的元素存储于连续内存空间的数据结构，其长度不可变。",[1099,1613,1614],{},"如下图所示，构建此数组需要在初始化时给定长度，并对数组每个索引元素赋值，代码如下：",[1145,1616,1621],{"className":1617,"code":1619,"language":1620,"meta":1154},[1618],"language-c++","\u002F\u002F 初始化一个长度为 5 的数组 array\nint array[5];\n\u002F\u002F 元素赋值\narray[0] = 2;\narray[1] = 3;\narray[2] = 1;\narray[3] = 0;\narray[4] = 2;\n","c++",[1152,1622,1619],{"__ignoreMap":1154},[1099,1624,1625],{},"或者可以使用直接赋值的初始化方式，代码如下：",[1145,1627,1630],{"className":1628,"code":1629,"language":1620,"meta":1154},[1618],"int array[] = {2, 3, 1, 0, 2};\n",[1152,1631,1629],{"__ignoreMap":1154},[1099,1633,1634],{},[1600,1635],{"alt":1636,"src":1637},"Picture2.png","https:\u002F\u002Fpic.leetcode-cn.com\u002F1599587176-JAxwpf-Picture2.png",[1099,1639,1640],{},"「可变数组」是经常使用的数据结构，其基于数组和扩容机制实现，相比普通数组更加灵活。常用操作有：访问元素、添加元素、删除元素。",[1145,1642,1645],{"className":1643,"code":1644,"language":1620,"meta":1154},[1618],"\u002F\u002F 初始化可变数组\nvector\u003Cint> array;\n\n\u002F\u002F 向尾部添加元素\narray.push_back(2);\narray.push_back(3);\narray.push_back(1);\narray.push_back(0);\narray.push_back(2);\n",[1152,1646,1644],{"__ignoreMap":1154},[1501,1648],{},[1139,1650,178],{"id":178},[1099,1652,1653,1654,1657,1658,1661],{},"链表以节点为单位，每个元素都是一个独立对象，在内存空间的存储是非连续的。链表的节点对象具有两个成员变量：「值 ",[1152,1655,1656],{},"val","」，「后继节点引用 ",[1152,1659,1660],{},"next","」 。",[1145,1663,1666],{"className":1664,"code":1665,"language":1620,"meta":1154},[1618],"struct ListNode {\n    int val;        \u002F\u002F 节点值\n    ListNode *next; \u002F\u002F 后继节点引用\n    ListNode(int x) : val(x), next(NULL) {}\n};\n",[1152,1667,1665],{"__ignoreMap":1154},[1099,1669,1670],{},"如下图所示，建立此链表需要实例化每个节点，并构建各节点的引用指向。",[1145,1672,1675],{"className":1673,"code":1674,"language":1620,"meta":1154},[1618],"\u002F\u002F 实例化节点\nListNode *n1 = new ListNode(4); \u002F\u002F 节点 head\nListNode *n2 = new ListNode(5);\nListNode *n3 = new ListNode(1);\n\n\u002F\u002F 构建引用指向\nn1->next = n2;\nn2->next = n3;\n",[1152,1676,1674],{"__ignoreMap":1154},[1099,1678,1679],{},[1600,1680],{"alt":1681,"src":1682},"Picture3.png","https:\u002F\u002Fpic.leetcode-cn.com\u002F1599578767-zgLjYw-Picture3.png",[1501,1684],{},[1139,1686,159],{"id":159},[1099,1688,1689],{},"栈是一种具有 「先入后出」 特点的抽象数据结构，可使用数组或链表实现。",[1145,1691,1694],{"className":1692,"code":1693,"language":1620,"meta":1154},[1618],"stack\u003Cint> stk;\n",[1152,1695,1693],{"__ignoreMap":1154},[1099,1697,1698,1699,1702,1703,1706],{},"如下图所示，通过常用操作「入栈 ",[1152,1700,1701],{},"push()","」,「出栈 ",[1152,1704,1705],{},"pop()","」，展示了栈的先入后出特性。",[1145,1708,1711],{"className":1709,"code":1710,"language":1620,"meta":1154},[1618],"stk.push(1); \u002F\u002F 元素 1 入栈\nstk.push(2); \u002F\u002F 元素 2 入栈\nstk.pop();   \u002F\u002F 出栈 -> 元素 2\nstk.pop();   \u002F\u002F 出栈 -> 元素 1\n",[1152,1712,1710],{"__ignoreMap":1154},[1099,1714,1715],{},[1600,1716],{"alt":1717,"src":1718},"Picture4.png","https:\u002F\u002Fpic.leetcode-cn.com\u002F1599578767-ZifMEX-Picture4.png",[1501,1720],{},[1139,1722,160],{"id":160},[1099,1724,1725],{},"队列是一种具有 「先入先出」 特点的抽象数据结构，可使用链表实现。",[1145,1727,1730],{"className":1728,"code":1729,"language":1620,"meta":1154},[1618],"queue\u003Cint> que;\n",[1152,1731,1729],{"__ignoreMap":1154},[1099,1733,1734,1735,1737,1738,1740],{},"如下图所示，通过常用操作「入队 ",[1152,1736,1701],{},"」,「出队 ",[1152,1739,1705],{},"」，展示了队列的先入先出特性。",[1145,1742,1745],{"className":1743,"code":1744,"language":1620,"meta":1154},[1618],"que.push(1); \u002F\u002F 元素 1 入队\nque.push(2); \u002F\u002F 元素 2 入队\nque.pop();   \u002F\u002F 出队 -> 元素 1\nque.pop();   \u002F\u002F 出队 -> 元素 2\n",[1152,1746,1744],{"__ignoreMap":1154},[1099,1748,1749],{},[1600,1750],{"alt":1751,"src":1752},"Picture5.png","https:\u002F\u002Fpic.leetcode-cn.com\u002F1599588416-Majmwh-Picture5.png",[1501,1754],{},[1139,1756,363],{"id":363},[1099,1758,1759,1760,1763,1764,1766,1767,1770,1771,1661],{},"树是一种非线性数据结构，根据子节点数量可分为 「二叉树」 和 「多叉树」，最顶层的节点称为「根节点 ",[1152,1761,1762],{},"root","」。以二叉树为例，每个节点包含三个成员变量：「值 ",[1152,1765,1656],{},"」、「左子节点 ",[1152,1768,1769],{},"left","」、「右子节点 ",[1152,1772,1773],{},"right",[1145,1775,1778],{"className":1776,"code":1777,"language":1620,"meta":1154},[1618],"struct TreeNode {\n    int val;         \u002F\u002F 节点值\n    TreeNode *left;  \u002F\u002F 左子节点\n    TreeNode *right; \u002F\u002F 右子节点\n    TreeNode(int x) : val(x), left(NULL), right(NULL) {}\n};\n",[1152,1779,1777],{"__ignoreMap":1154},[1099,1781,1782],{},"如下图所示，建立此二叉树需要实例化每个节点，并构建各节点的引用指向。",[1145,1784,1787],{"className":1785,"code":1786,"language":1620,"meta":1154},[1618],"\u002F\u002F 初始化节点\nTreeNode *n1 = new TreeNode(3); \u002F\u002F 根节点 root\nTreeNode *n2 = new TreeNode(4);\nTreeNode *n3 = new TreeNode(5);\nTreeNode *n4 = new TreeNode(1);\nTreeNode *n5 = new TreeNode(2);\n\n\u002F\u002F 构建引用指向\nn1->left = n2;\nn1->right = n3;\nn2->left = n4;\nn2->right = n5;\n",[1152,1788,1786],{"__ignoreMap":1154},[1099,1790,1791],{},[1600,1792],{"alt":1793,"src":1794},"Picture6.png","https:\u002F\u002Fpic.leetcode-cn.com\u002F1599579136-bBARpC-Picture6.png",[1501,1796],{},[1139,1798,1799],{"id":1799},"图",[1099,1801,1802,1803,1806,1807,1810,1811,1814],{},"图是一种非线性数据结构，由「节点（顶点）",[1152,1804,1805],{},"vertex","」和「边 ",[1152,1808,1809],{},"edge","」组成，每条边连接一对顶点。根据边的方向有无，图可分为「有向图」和「无向图」。本文 ",[1095,1812,1813],{},"以无向图为例"," 开展介绍。",[1099,1816,1817,1818,1821,1822,1825],{},"如下图所示，此无向图的 ",[1095,1819,1820],{},"顶点"," 和 ",[1095,1823,1824],{},"边"," 集合分别为：",[1388,1827,1828,1834],{},[1391,1829,1830,1831],{},"顶点集合： ",[1152,1832,1833],{},"vertices = {1, 2, 3, 4, 5}",[1391,1835,1836,1837],{},"边集合： ",[1152,1838,1839],{},"edges = {(1, 2), (1, 3), (1, 4), (1, 5), (2, 4), (3, 5), (4, 5)}",[1099,1841,1842],{},[1600,1843],{"alt":1844,"src":1845},"Picture7.png","https:\u002F\u002Fpic.leetcode-cn.com\u002F1599579136-Fxseew-Picture7.png",[1099,1847,1848],{},"表示图的方法通常有两种：",[1099,1850,1851,1854],{},[1095,1852,1853],{},"邻接矩阵","：",[1145,1856,1859],{"className":1857,"code":1858,"language":1169,"meta":1154},[1167],"int vertices[5] = {1, 2, 3, 4, 5};\nint edges[5][5] = {{0, 1, 1, 1, 1},\n                   {1, 0, 0, 1, 0},\n                   {1, 0, 0, 0, 1},\n                   {1, 1, 0, 0, 1},\n                   {1, 0, 1, 1, 0}};\n",[1152,1860,1858],{"__ignoreMap":1154},[1501,1862],{},[1501,1864],{},[1099,1866,1867],{},[1095,1868,1869],{},"邻接表：",[1388,1871,1872,1882],{},[1391,1873,1874,1877,1878,1881],{},[1095,1875,1876],{},"顶点存储",": 数组 ",[1152,1879,1880],{},"vertices"," 存储顶点值",[1391,1883,1884,1887,1888,1891],{},[1095,1885,1886],{},"边存储",": 二维容器 ",[1152,1889,1890],{},"edges"," 存储边关系",[1145,1893,1898],{"className":1894,"code":1896,"language":1897,"meta":1154},[1895],"language-cpp","int vertices[5] = {1, 2, 3, 4, 5};\nvector\u003Cvector\u003Cint>> edges;\n\nvector\u003Cint> edge_1 = {1, 2, 3, 4};\nvector\u003Cint> edge_2 = {0, 3};\nvector\u003Cint> edge_3 = {0, 4};\nvector\u003Cint> edge_4 = {0, 1, 4};\nvector\u003Cint> edge_5 = {0, 2, 3};\nedges.push_back(edge_1);\nedges.push_back(edge_2);\nedges.push_back(edge_3);\nedges.push_back(edge_4);\nedges.push_back(edge_5);\n","cpp",[1152,1899,1896],{"__ignoreMap":1154},[1103,1901,1902,1907],{},[1099,1903,1904],{},[1095,1905,1906],{},"邻接矩阵 VS 邻接表 ：",[1099,1908,1909,1910,1913,1914,1916,1917,1920,1921,1923],{},"邻接矩阵的大小只与节点数量有关，即 N2",[1395,1911,1912],{},"N","2 ，其中 N",[1395,1915,1912],{}," 为节点数量。因此，当边数量明显少于节点数量时，使用邻接矩阵存储图会造成较大的内存浪费。\n因此，",[1095,1918,1919],{},"邻接表"," 适合存储稀疏图（顶点较多、边较少）； ",[1095,1922,1853],{}," 适合存储稠密图（顶点较少、边较多）。",[1501,1925],{},[1139,1927,1928],{"id":1928},"散列表",[1099,1930,1931,1932,1935,1936,1939],{},"散列表是一种非线性数据结构，通过利用 Hash 函数将指定的「键 ",[1152,1933,1934],{},"key","」映射至对应的「值 ",[1152,1937,1938],{},"value","」，以实现高效的元素查找。",[1103,1941,1942],{},[1099,1943,1944],{},"设想一个简单场景：小力、小特、小扣的学号分别为 10001, 10002, 10003 。\n现需求从「姓名」查找「学号」。",[1099,1946,1947,1948,1950,1951,1953],{},"则可通过建立姓名为 ",[1152,1949,1934],{}," ，学号为 ",[1152,1952,1938],{}," 的散列表实现此需求，代码如下：",[1145,1955,1958],{"className":1956,"code":1957,"language":1150},[1148],"\u002F\u002F 初始化散列表\nunordered_map\u003Cstring, int> dic;\n\n\u002F\u002F 添加 key -> value 键值对\ndic[\"小力\"] = 10001;\ndic[\"小特\"] = 10002;\ndic[\"小扣\"] = 10003;\n\n\u002F\u002F 从姓名查找学号\ndic.find(\"小力\")->second; \u002F\u002F -> 10001\ndic.find(\"小特\")->second; \u002F\u002F -> 10002\ndic.find(\"小扣\")->second; \u002F\u002F -> 10003\n",[1152,1959,1957],{"__ignoreMap":1154},[1099,1961,1962],{},[1600,1963],{"alt":1964,"src":1965},"Picture8.png","https:\u002F\u002Fpic.leetcode-cn.com\u002F1599811794-ruXMOV-Picture8.png",[1099,1967,1968],{},[1095,1969,1970],{},"Hash 函数设计示例 ：",[1103,1972,1973],{},[1099,1974,1975],{},"假设需求：从「学号」查找「姓名」。",[1099,1977,1978],{},"将三人的姓名存储至以下数组中，则各姓名在数组中的索引分别为 0, 1, 2 。",[1145,1980,1983],{"className":1981,"code":1982,"language":1150},[1148],"string names[] = { \"小力\", \"小特\", \"小扣\" };\n",[1152,1984,1982],{"__ignoreMap":1154},[1099,1986,1987],{},"此时，我们构造一个简单的 Hash 函数（ %% 为取余符号 ），公式和封装函数如下所示：",[1099,1989,1990],{},"hash(key)=(key−1)%10000",[1145,1992,1995],{"className":1993,"code":1994,"language":1150},[1148],"int hash(int id) {\n    int index = (id - 1) % 10000;\n    return index;\n}\n",[1152,1996,1994],{"__ignoreMap":1154},[1099,1998,1999,2000,2002,2003,2005,2006,2008],{},"则我们构建了以学号为 ",[1152,2001,1934],{}," 、姓名对应的数组索引为 ",[1152,2004,1938],{}," 的散列表。利用此 Hash 函数，则可在 O(1)",[1395,2007,1435],{},"(1) 时间复杂度下通过学号查找到对应姓名，即：",[1145,2010,2013],{"className":2011,"code":2012,"language":1150},[1148],"names[hash(10001)] \u002F\u002F 小力\nnames[hash(10002)] \u002F\u002F 小特\nnames[hash(10003)] \u002F\u002F 小扣\n",[1152,2014,2012],{"__ignoreMap":1154},[1099,2016,2017],{},[1600,2018],{"alt":2019,"src":2020},"Picture8-1.png","https:\u002F\u002Fpic.leetcode-cn.com\u002F1599811794-NfbpfW-Picture8-1.png",[1099,2022,2023],{},"以上设计只适用于此示例，实际的 Hash 函数需保证低碰撞率、 高鲁棒性等，以适用于各类数据和场景。",[1501,2025],{},[1139,2027,2028],{"id":2028},"堆",[1099,2030,2031],{},"堆是一种基于「完全二叉树」的数据结构，可使用数组实现。以堆为原理的排序算法称为「堆排序」，基于堆实现的数据结构为「优先队列」。堆分为「大顶堆」和「小顶堆」，大（小）顶堆：任意节点的值不大于（小于）其父节点的值。",[1103,2033,2034],{},[1099,2035,2036,2039,2040,2042,2043,2045,2046,2048,2049,2051],{},[1095,2037,2038],{},"完全二叉树定义："," 设二叉树深度为 k",[1395,2041,1556],{}," ，若二叉树除第 k",[1395,2044,1556],{}," 层外的其它各层（第 11 至 k−1",[1395,2047,1556],{},"−1 层）的节点达到最大个数，且处于第 k",[1395,2050,1556],{}," 层的节点都连续集中在最左边，则称此二叉树为完全二叉树。",[1099,2053,2054,2055,2058],{},"如下图所示，为包含 ",[1152,2056,2057],{},"1, 4, 2, 6, 8"," 元素的小顶堆。将堆（完全二叉树）中的结点按层编号，即可映射到右边的数组存储形式。",[1099,2060,2061],{},[1600,2062],{"alt":2063,"src":2064},"Picture9.png","https:\u002F\u002Fpic.leetcode-cn.com\u002F1599584901-xoiGEQ-Picture9.png",[1099,2066,2067,2068,2070,2071,2073],{},"通过使用「优先队列」的「压入 ",[1152,2069,1701],{},"」和「弹出 ",[1152,2072,1705],{},"」操作，即可完成堆排序，实现代码如下：",[1145,2075,2078],{"className":2076,"code":2077,"language":1150},[1148],"\u002F\u002F 初始化小顶堆\npriority_queue\u003Cint, vector\u003Cint>, greater\u003Cint>> heap;\n\n\u002F\u002F 元素入堆\nheap.push(1);\nheap.push(4);\nheap.push(2);\nheap.push(6);\nheap.push(8);\n\n\u002F\u002F 元素出堆（从小到大）\nheap.pop(); \u002F\u002F -> 1\nheap.pop(); \u002F\u002F -> 2\nheap.pop(); \u002F\u002F -> 4\nheap.pop(); \u002F\u002F -> 6\nheap.pop(); \u002F\u002F -> 8\n",[1152,2079,2077],{"__ignoreMap":1154},{"title":1154,"searchDepth":2081,"depth":2081,"links":2082},4,[2083,2091],{"id":1093,"depth":2084,"text":1097,"children":2085},2,[2086,2088,2089,2090],{"id":1141,"depth":2087,"text":1141},3,{"id":1211,"depth":2087,"text":1214},{"id":1294,"depth":2087,"text":1297},{"id":1351,"depth":2087,"text":1351},{"id":1593,"depth":2084,"text":1593,"children":2092},[2093,2094,2095,2096,2097,2098,2099,2100],{"id":1608,"depth":2087,"text":1608},{"id":178,"depth":2087,"text":178},{"id":159,"depth":2087,"text":159},{"id":160,"depth":2087,"text":160},{"id":363,"depth":2087,"text":363},{"id":1799,"depth":2087,"text":1799},{"id":1928,"depth":2087,"text":1928},{"id":2028,"depth":2087,"text":2028},"md",false,{"uuid":2104,"slots":2105},"725bf650-11ce-11f0-979d-49a5732c6321",{},true,10,{"title":1085,"description":1154},"posts\u002F数据结构\u002F数据结构-绪论",[42,380],"sEMMD6tcwOK85SSIrxAL6YYr5z1fDrTVz3q73Kvrv2M",1790443288698]