{"id":744,"date":"2025-12-04T04:18:17","date_gmt":"2025-12-04T04:18:17","guid":{"rendered":"https:\/\/learndeeplytw.com\/?p=744"},"modified":"2025-12-29T04:33:56","modified_gmt":"2025-12-29T04:33:56","slug":"sorting-networks","status":"publish","type":"post","link":"https:\/\/learndeeplytw.com\/en\/sorting-networks\/","title":{"rendered":"Faster than Lightning! Racing on Sorting Networks to Instantly Understand Supercomputer Parallel Computing"},"content":{"rendered":"\n<figure class=\"wp-embed-aspect-4-3 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Unplugged: The show. Part 7: Sorting networks\" width=\"1290\" height=\"968\" src=\"https:\/\/www.youtube.com\/embed\/LOxfdsBBjKI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"\">\u6211\u5011\u90fd\u77e5\u9053\u96fb\u8166\u5f88\u5feb\uff0c\u4f46\u4f60\u77e5\u9053\u96fb\u8166\u8b8a\u5feb\u7684\u79d8\u8a23\u662f\u4ec0\u9ebc\u55ce\uff1f \u4ee5\u524d\u7684\u96fb\u8166\u50cf\u662f\u4e00\u500b\u5eda\u5e2b\u53ea\u6709\u4e00\u500b\u7210\u5b50\uff0c\u716e\u5b8c\u6e6f\u624d\u80fd\u7092\u83dc\uff08\u9019\u53eb\u5e8f\u5217\u8655\u7406\uff09\u3002 \u73fe\u5728\u7684\u8d85\u7d1a\u96fb\u8166\uff0c\u50cf\u662f\u6709\u5e7e\u5343\u500b\u5eda\u5e2b\u540c\u6642\u5728\u5207\u83dc\u3001\u716e\u98ef\uff08\u9019\u53eb\u5e73\u884c\u8655\u7406\uff09\u3002 \u4eca\u5929\u8981\u5e36\u5b69\u5b50\u5230\u6236\u5916\uff0c\u7528\u7c89\u7b46\u756b\u51fa\u4e00\u500b<strong>\u300c\u6392\u5e8f\u7db2\u8def (Sorting Network)\u300d<\/strong>\uff0c\u8b93\u4ed6\u5011\u5316\u8eab\u70ba\u6578\u64da\u8cfd\u8eca\uff0c\u9ad4\u9a57\u4e0d\u9700\u8981\u6307\u63ee\u5b98\uff0c\u53ea\u8981\u8ddf\u8457\u7dda\u8d70\uff0c\u5c31\u80fd\u81ea\u52d5\u6392\u597d\u9806\u5e8f\u7684\u795e\u5947\u9b54\u6cd5\uff01<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u7b2c\u4e00\u968e\u6bb5\uff1a<strong>\u4e00\u500b\u4eba\u7684\u6975\u9650<\/strong><\/h4>\n\n\n\n<p class=\"\">\u9996\u5148\uff0c\u6211\u5011\u5148\u9ad4\u9a57\u4e00\u4e0b\u300c\u53ea\u6709\u4e00\u500b\u5927\u8166\u300d\u7684\u611f\u89ba\u3002<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"\"><strong>\u4efb\u52d9\u8a2d\u5b9a\uff1a<\/strong>\n<ul class=\"wp-block-list\">\n<li class=\"\">\u627e 6 \u4f4d\u5b69\u5b50\uff08\u6216\u662f\u7528\u73a9\u5076\u4ee3\u8868\uff09\uff0c\u6bcf\u4eba\u767c\u4e00\u5f35\u96a8\u6a5f\u6578\u5b57\u5361\u3002<\/li>\n\n\n\n<li class=\"\"><strong>\u898f\u5247\uff1a<\/strong> \u300c\u6211\u662f\u552f\u4e00\u7684\u96fb\u8166 CPU\u3002\u73fe\u5728\u4f60\u5011\u8981\u6392\u968a\uff0c\u4f46\u4f60\u5011\u4e0d\u80fd\u81ea\u5df1\u52d5\uff0c\u53ea\u80fd\u807d\u6211\u6307\u63ee\u3002\u300d<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li class=\"\"><strong>\u5e8f\u5217\u8655\u7406\uff1a<\/strong>\n<ul class=\"wp-block-list\">\n<li class=\"\">\u8001\u5e2b\/\u5bb6\u9577\u958b\u59cb\u6307\u63ee\uff1a\u300c3 \u865f\u4f60\u53bb\u7b2c\u4e00\u4f4d&#8230; 5 \u865f\u4f60\u8ddf 2 \u865f\u4ea4\u63db&#8230;\u300d<\/li>\n\n\n\n<li class=\"\"><strong>\u89c0\u5bdf\uff1a<\/strong> \u7576\u5bb6\u9577\u5728\u6307\u63ee\u7532\u7684\u6642\u5019\uff0c\u4e59\u4e19\u4e01\u90fd\u5728\u767c\u5446\u7b49\u5f85\u3002<\/li>\n\n\n\n<li class=\"\"><strong>\u63d0\u554f\uff1a<\/strong> \u300c\u4f60\u5011\u6709\u6c92\u6709\u767c\u73fe\uff0c\u5927\u90e8\u5206\u7684\u6642\u9593\u4f60\u5011\u90fd\u5728\u300e\u7b49\u300f\uff1f\u5982\u679c\u6211\u8981\u6392 100 \u500b\u4eba\uff0c\u6700\u5f8c\u90a3\u500b\u4eba\u662f\u4e0d\u662f\u6703\u7b49\u5230\u7761\u8457\uff1f\u300d<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">\u7b2c\u4e8c\u968e\u6bb5\uff1a<strong>\u5730\u4e0a\u7684\u9b54\u6cd5\u9663<\/strong><\/h4>\n\n\n\n<p class=\"\">\u6211\u5011\u8981\u756b\u51fa\u4e00\u500b\u300c\u8b93\u5927\u5bb6\u4e0d\u7528\u601d\u8003\uff0c\u8ddf\u8457\u8d70\u5c31\u6703\u5c0d\u300d\u7684\u8ecc\u9053\u3002<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"\"><strong>\u7e6a\u88fd\u5730\u5716\uff1a<\/strong>\n<ul class=\"wp-block-list\">\n<li class=\"\">\u53c3\u8003\u6559\u6750\uff0c\u5728\u5730\u4e0a\u7528\u7c89\u7b46\u6216\u81a0\u5e36\u756b\u51fa\u300c\u6392\u5e8f\u7db2\u8def\u5716\u300d\u3002\u5b83\u770b\u8d77\u4f86\u50cf\u4e00\u5806\u4ea4\u932f\u7684\u8ecc\u9053\u548c\u5713\u5708\u3002<\/li>\n\n\n\n<li class=\"\">\u6a19\u793a\u6e05\u695a\u300c\u5165\u53e3\u300d\u548c\u300c\u51fa\u53e3\u300d\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li class=\"\"><strong>\u89e3\u8aaa\u898f\u5247\uff1a<\/strong>\n<ul class=\"wp-block-list\">\n<li class=\"\">\u300c\u9019\u662f\u4e00\u500b\u81ea\u52d5\u5c0e\u822a\u8cfd\u8eca\u5834\u3002\u4f60\u5011\u6bcf\u500b\u4eba\u90fd\u662f\u8cfd\u8eca\uff0c\u62ff\u8457\u4f60\u7684\u6578\u5b57\u5361\u3002\u300d<\/li>\n\n\n\n<li class=\"\"><strong>\u53e3\u8a23\uff1a<\/strong> \u300c<strong>\u9047\u5230\u5713\u5708\u505c\u4e0b\u4f86\uff0c\u6bd4\u6bd4\u5927\u5c0f\u5206\u958b\u8dd1\uff01<\/strong>\u300d<\/li>\n\n\n\n<li class=\"\"><strong>\u9ec3\u91d1\u6cd5\u5247\uff1a<\/strong> \u5728\u5713\u5708\u76f8\u9047\u6642\uff0c\u6578\u5b57\u5c0f\u7684\u8d70\u5de6\u908a\uff08\u6216\u4e0a\u9762\u7684\u8def\uff09\uff0c\u6578\u5b57\u5927\u7684\u8d70\u53f3\u908a\uff08\u6216\u4e0b\u9762\u7684\u8def\uff09\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"382\" loading=\"lazy\" src=\"https:\/\/learndeeplytw.com\/wp-content\/uploads\/2025\/12\/image.webp\" alt=\"\" class=\"wp-image-704\" style=\"width:605px;height:auto\" srcset=\"https:\/\/learndeeplytw.com\/wp-content\/uploads\/2025\/12\/image.webp 750w, https:\/\/learndeeplytw.com\/wp-content\/uploads\/2025\/12\/image-300x153.webp 300w, https:\/\/learndeeplytw.com\/wp-content\/uploads\/2025\/12\/image-18x9.webp 18w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">\u7b2c\u4e09\u968e\u6bb5\uff1a<strong>\u8207\u6642\u9593\u8cfd\u8dd1<\/strong><\/h4>\n\n\n\n<p class=\"\">\u9019\u662f\u6d3b\u52d5\u6700\u9ad8\u6f6e\uff0c\u5b69\u5b50\u5c07\u89aa\u773c\u770b\u898b\u300c\u79e9\u5e8f\u300d\u662f\u5982\u4f55\u5f9e\u300c\u6df7\u4e82\u300d\u4e2d\u81ea\u52d5\u7522\u751f\u7684\u3002<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"\"><strong>\u5404\u5c31\u5404\u4f4d\uff1a<\/strong>\n<ul class=\"wp-block-list\">\n<li class=\"\">6 \u4f4d\u5b69\u5b50\u62ff\u8457\u4e82\u6578\u5361\u7247\uff08\u4f8b\u5982 5, 1, 6, 3, 4, 2\uff09\uff0c\u7ad9\u5728\u5165\u53e3\u7684\u516d\u500b\u683c\u5b50\u88e1\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li class=\"\"><strong>\u958b\u59cb\u57f7\u884c\uff1a<\/strong>\n<ul class=\"wp-block-list\">\n<li class=\"\">\u8001\u5e2b\/\u5bb6\u9577\u558a\uff1a\u300c\u958b\u59cb\uff01\u300d<\/li>\n\n\n\n<li class=\"\">\u5b69\u5b50\u5011\u6cbf\u8457\u7dda\u8d70\u3002<\/li>\n\n\n\n<li class=\"\"><strong>\u7b2c\u4e00\u95dc\uff1a<\/strong> \u5169\u5169\u76f8\u9047\uff0c\u6bd4\u5927\u5c0f\uff0c\u5206\u958b\u8d70\u3002<\/li>\n\n\n\n<li class=\"\"><strong>\u7b2c\u4e8c\u95dc\uff1a<\/strong> \u9047\u5230\u65b0\u5925\u4f34\uff0c\u518d\u6bd4\u5927\u5c0f\uff0c\u518d\u5206\u958b\u8d70\u3002<\/li>\n\n\n\n<li class=\"\"><strong>\u89c0\u5bdf\uff1a<\/strong> \u6240\u6709\u7684\u6bd4\u8f03\u662f<strong>\u540c\u6642\u767c\u751f<\/strong>\u7684\uff01\u6c92\u6709\u4eba\u5728\u767c\u5446\uff0c\u5927\u5bb6\u90fd\u5728\u5fd9\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li class=\"\"><strong>\u7d42\u9ede\u63ed\u66c9\uff1a<\/strong>\n<ul class=\"wp-block-list\">\n<li class=\"\">\u7576\u5927\u5bb6\u90fd\u8d70\u5230\u51fa\u53e3\u6642\uff0c\u8acb\u4ed6\u5011\u628a\u5361\u7247\u8209\u8d77\u4f86\u3002<\/li>\n\n\n\n<li class=\"\"><strong>\u9a5a\u559c\u6642\u523b\uff1a<\/strong> \u300c\u5929\u554a\uff01\u539f\u672c\u4e82\u4e03\u516b\u7cdf\u7684\u6578\u5b57\uff0c\u600e\u9ebc\u8b8a\u6210 1, 2, 3, 4, 5, 6 \u6392\u5f97\u597d\u597d\u7684\uff1f\u300d<\/li>\n\n\n\n<li class=\"\"><strong>\u8001\u5e2b\/\u5bb6\u9577\uff1a<\/strong> \u300c\u6211\u6709\u6307\u63ee\u4f60\u5011\u55ce\uff1f\u6c92\u6709\uff01\u662f\u9019\u500b\u5730\u5716\uff08\u6f14\u7b97\u6cd5\uff09\u8b93\u4f60\u5011\u81ea\u52d5\u6392\u597d\u7684\uff01\u300d<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">\u7b2c\u56db\u968e\u6bb5\uff1a\u6982\u5ff5\u9023\u7d50 (Concept Connection)<\/h4>\n\n\n\n<p class=\"\"><strong>\u70ba\u4ec0\u9ebc\u9019\u6a23\u6bd4\u8f03\u5feb\uff1f<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>\u8001\u5e2b\/\u5bb6\u9577<\/strong>\uff1a\u300c\u525b\u525b\u6211\u5011\u5728\u90a3\u908a\u8dd1\u4f86\u8dd1\u53bb\uff0c\u5176\u5be6\u7e3d\u5171\u505a\u4e86 12 \u6b21\u7684\u6bd4\u8f03\uff08\u6bd4\u5927\u5c0f\uff09\u3002\u4f46\u662f\uff0c\u6211\u5011\u611f\u89ba\u597d\u50cf\u53ea\u82b1\u4e86\u4e00\u9ede\u9ede\u6642\u9593\uff0c\u70ba\u4ec0\u9ebc\uff1f\u300d<\/li>\n\n\n\n<li class=\"\"><strong>\u5b69\u5b50<\/strong>\uff1a\u300c\u56e0\u70ba\u6211\u5011\u5927\u5bb6\u540c\u6642\u505a\u6bd4\u8f03\u554a\uff01\u300d<\/li>\n\n\n\n<li class=\"\"><strong><strong>\u8001\u5e2b\/\u5bb6\u9577<\/strong><\/strong>\uff1a\u300c\u8cd3\u679c\uff01\u9019\u5c31\u662f\u8d85\u7d1a\u96fb\u8166\u7684\u79d8\u5bc6\uff0c\u53eb\u505a\u300e\u5e73\u884c\u8655\u7406 (Parallel Processing)\u300f\u3002\u300d<\/li>\n\n\n\n<li class=\"\"><strong>\u61c9\u7528\u5834\u666f\uff1a<\/strong> \u9019\u5c31\u662f\u70ba\u4ec0\u9ebc\u96fb\u8166\u53ef\u4ee5\u540c\u6642\u8b93\u4f60\u770b YouTube\u3001\u4e0b\u8f09\u904a\u6232\u3001\u53c8\u4e00\u908a\u505a\u5176\u4ed6\u4e8b\uff0c\u56e0\u70ba\u5b83\u6709\u5f88\u591a\u300c\u624b\u300d\u5728\u540c\u6642\u505a\u4e8b\u3002<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u7b2c\u4e94\u968e\u6bb5\uff1a\u9664\u932f\u8207\u6311\u6230 (Debug &amp; Challenge)<\/h4>\n\n\n\n<p class=\"\"><strong>\u5982\u679c\u898f\u5247\u6539\u4e86\u6703\u600e\u6a23\uff1f<\/strong><\/p>\n\n\n\n<p class=\"\">\u900f\u904e\u6539\u8b8a\u898f\u5247\uff0c\u6e2c\u8a66\u5b69\u5b50\u5c0d\u6f14\u7b97\u6cd5\u908f\u8f2f\u7684\u7406\u89e3\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>\u6311\u6230\u4e00\uff1a\u53cd\u5411\u601d\u8003<\/strong>\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>\u63d0\u554f\uff1a<\/strong> \u300c\u5982\u679c\u6211\u5011\u628a\u898f\u5247\u5012\u904e\u4f86\uff1a<strong>\u300e\u5927\u7684\u8d70\u5de6\u908a\uff0c\u5c0f\u7684\u8d70\u53f3\u908a\u300f<\/strong>\uff0c\u4f60\u5011\u89ba\u5f97\u7d50\u679c\u6703\u8b8a\u6210\u600e\u6a23\uff1f\u300d<\/li>\n\n\n\n<li class=\"\"><strong>\u5be6\u9a57\uff1a<\/strong> \u8b93\u5b69\u5b50\u8dd1\u4e00\u6b21\u770b\u770b\u3002<\/li>\n\n\n\n<li class=\"\"><strong>\u767c\u73fe\uff1a<\/strong> \u6700\u5f8c\u7684\u9806\u5e8f\u6703\u8b8a\u6210\u5f9e\u5927\u5230\u5c0f\uff086, 5, 4&#8230;\uff09\uff01\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li class=\"\"><strong>\u6311\u6230\u4e8c\uff1a\u97f3\u6a02\u8207\u6587\u5b57<\/strong>\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>\u63d0\u554f\uff1a<\/strong> \u300c\u9019\u500b\u9b54\u6cd5\u8ecc\u9053\u53ea\u80fd\u6392\u6578\u5b57\u55ce\uff1f\u300d<\/li>\n\n\n\n<li class=\"\"><strong>\u5be6\u9a57\uff1a<\/strong> \u8a66\u8a66\u770b\u62ff\u8457\u5beb\u6709 A, B, C, D \u7684\u5361\u7247\uff0c\u6216\u662f\u756b\u8457\u4e0d\u540c\u97f3\u7b26\uff08Do, Re, Mi\uff09\u7684\u5361\u7247\u3002<\/li>\n\n\n\n<li class=\"\"><strong>\u7d50\u8ad6\uff1a<\/strong> \u53ea\u8981\u80fd\u300c\u6bd4\u5927\u5c0f\u300d\u7684\u6771\u897f\uff0c\u9019\u500b\u7db2\u8def\u901a\u901a\u80fd\u6392\uff01\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u6559\u5b78\u89c0\u5bdf\u91cd\u9ede\u8868 (Clinical Interview Guide)<\/h3>\n\n\n\n<p class=\"\">\u9019\u5f35\u8868\u5e6b\u52a9\u60a8\u5f15\u5c0e\u5b69\u5b50\u89c0\u5bdf\u300c\u5e73\u884c\u300d\u7684\u5a01\u529b\uff0c\u800c\u4e0d\u662f\u53ea\u5728\u610f\u8f38\u8d0f\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>\u89c0\u5bdf\u9ede<\/strong><\/td><td><strong>\u274c \u8f03\u7121\u6548\u7684\u53cd\u61c9 (\u53ea\u770b\u7d50\u679c)<\/strong><\/td><td><strong>\u2705 \u8f03\u6709\u6548\u7684\u5f15\u5c0e (\u5de5\u7a0b\u5e2b\u601d\u7dad)<\/strong><\/td><\/tr><\/thead><tbody><tr><td><strong>\u7576\u5b69\u5b50\u8d70\u932f\u908a\u6642<\/strong><\/td><td>\u300c\u4f60\u8d70\u932f\u4e86\uff0c\u91cd\u4f86\u3002\u300d<\/td><td>\u300c\u54a6\uff1f\u9019\u88e1\u597d\u50cf\u300e\u585e\u8eca\u300f\u4e86\u3002\u5982\u679c\u4f60\u62ff\u7684\u662f 5\uff0c\u4ed6\u62ff\u7684\u662f 3\uff0c\u6839\u64da\u300e\u5c0f\u5de6\u5927\u53f3\u300f\u7684\u898f\u5247\uff0c\u8ecc\u9053\u61c9\u8a72\u628a\u4f60\u5e36\u53bb\u54ea\u88e1\uff1f\u300d(\u628a\u932f\u8aa4\u6b78\u548e\u65bc\u57f7\u884c\uff0c\u800c\u975e\u5b69\u5b50\u80fd\u529b)<\/td><\/tr><tr><td><strong>\u89e3\u91cb\u70ba\u4ec0\u9ebc\u8981\u756b\u9019\u9ebc\u8907\u96dc\u7684\u7dda<\/strong><\/td><td>\u300c\u9019\u5c31\u662f\u6392\u5e8f\u7db2\u8def\u7684\u516c\u5f0f\u3002\u300d<\/td><td>\u300c\u9019\u5c31\u50cf\u662f\u8a2d\u8a08\u4e00\u500b\u5de5\u5ee0\u7684\u8f38\u9001\u5e36\u3002\u53ea\u8981\u8f38\u9001\u5e36\uff08\u7dda\uff09\u756b\u5c0d\u4e86\uff0c\u4e0d\u7ba1\u4e1f\u4ec0\u9ebc\u6578\u5b57\u9032\u53bb\uff0c\u51fa\u4f86\u90fd\u6703\u662f\u6574\u9f4a\u7684\u7522\u54c1\u3002\u9019\u5c31\u662f\u81ea\u52d5\u5316\u7684\u53b2\u5bb3\uff01\u300d<\/td><\/tr><tr><td><strong>\u6bd4\u8f03\u5e8f\u5217\u8207\u5e73\u884c<\/strong><\/td><td>\u300c\u5e73\u884c\u8655\u7406\u6bd4\u8f03\u5feb\u3002\u300d<\/td><td>\u300c\u5982\u679c\u4f60\u53ea\u6709\u4e00\u500b\u4eba\uff08\u6bd4\u5982\u505a\u98ef\u53ea\u6709\u4e00\u500b\u7210\u5b50\uff09\uff0c\u4f60\u6703\u600e\u9ebc\u505a\uff1f\u5982\u679c\u6709\u5f88\u591a\u4eba\uff08\u56db\u500b\u7210\u5b50\uff09\uff0c\u4f60\u53c8\u6703\u600e\u9ebc\u505a\uff1f\u54ea\u4e00\u7a2e\u6bd4\u8f03\u7701\u6642\u9593\uff1f\u300d<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"> \u7d66<strong>\u8001\u5e2b\/\u5bb6\u9577<\/strong>\u7684\u5efa\u8b70<\/h3>\n\n\n\n<p class=\"\">\u300c\u7c89\u7b46\u8207\u5730\u677f\u300d\u662f\u9019\u5802\u8ab2\u6700\u597d\u7684\u5de5\u5177\u3002<\/p>\n\n\n\n<p class=\"\">\u7576\u5b69\u5b50\u5728\u5713\u5708\u8655\u505c\u4e0b\u4f86\u7b49\u5f85\u53e6\u4e00\u4f4d\u5925\u4f34\u6642\uff0c\u90a3\u662f\u300c\u540c\u6b65 (Synchronization)\u300d\u7684\u5b8c\u7f8e\u5c55\u793a\u2014\u2014\u5728\u5e73\u884c\u904b\u7b97\u4e2d\uff0c\u5feb\u7684\u5fc5\u9808\u7b49\u6162\u7684\uff0c\u624d\u80fd\u9032\u884c\u4e0b\u4e00\u6b65\u6bd4\u8f03\u3002\u9019\u500b\u300c\u7b49\u5f85\u300d\u7684\u904e\u7a0b\uff0c\u5c31\u662f\u6700\u68d2\u7684\u8eab\u9ad4\u5b78\u7fd2\uff01<\/p>\n\n\n\n<p class=\"\">\u9806\u4fbf\u63d0\u4e00\u4e0b\uff0c\u96d6\u7136\u9019\u88ab\u7a31\u70ba\u201c\u7db2\u7d61\u201d\uff0c\u4f46\u5b83\u53ea\u662f\u8a08\u7b97\u6a5f\u79d1\u5b78\u4e2d\u773e\u591a\u7db2\u7d61\u985e\u578b\u4e2d\u7684\u4e00\u7a2e\u3002\u5e38\u898b\u7684\u300c\u7db2\u8def\u300d\u662f\u901a\u8a0a\u7db2\u7d61\uff0c\u4f8b\u5982\u884c\u52d5\u96fb\u8a71\u4f7f\u7528\u7684\u96fb\u4fe1\u7db2\u7d61\uff0c\u7576\u7136\u9084\u6709\u4e92\u806f\u7db2\uff01\u6b64\u5916\uff0c\u9084\u6709\u4e00\u4e9b\u7db2\u8def\u7528\u65bc\u8868\u793a\u8af8\u5982\u8def\u7dda\u5716\u548c\u822a\u7dda\u4e4b\u985e\u7684\u8cc7\u8a0a\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u672c\u6d3b\u52d5\u4e2d\u7684\u6392\u5e8f\u7db2\u7d61\u4e26\u975e\u4e0a\u8ff0\u4efb\u4f55\u4e00\u7a2e\u7db2\u7d61\u985e\u578b\uff0c\u5b83\u88ab\u7a31\u70ba\u6bd4\u8f03\u5668\u7db2\u7d61\uff0c\u56e0\u70ba\u5728\u9019\u7a2e\u7db2\u7d61\u4e2d\uff0c\u6bcf\u500b\u7bc0\u9ede\u6bd4\u8f03\u7684\u662f\u5169\u500b\u503c\uff0c\u800c\u4e0d\u662f\u5c07\u4e0d\u540c\u7684\u8a2d\u5099\uff08\u4f8b\u5982\u624b\u6a5f\u548c\u8a08\u7b97\u6a5f\uff09\u9023\u63a5\u5728\u4e00\u8d77\u3002<\/p>\n\n\n\n<!-- Sorting Network WordPress Embed Code -->\n<!-- Copy and paste this into a Custom HTML block in WordPress -->\n\n<div id=\"sorting-network-wrapper\">\n    <!-- Load Fonts -->\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=JetBrains+Mono:wght@400;500;600;700&#038;display=swap\"\n        rel=\"stylesheet\">\n\n    <style>\n        #sorting-network-wrapper {\n            --bg-primary: #0d0d0d;\n            --bg-secondary: #1a1a1a;\n            --bg-tertiary: #252525;\n            --neon-green: #00ff88;\n            --neon-green-dim: #00cc6a;\n            --neon-green-glow: rgba(0, 255, 136, 0.3);\n            --neon-cyan: #00d4ff;\n            --neon-yellow: #ffdd00;\n            --neon-red: #ff4444;\n            --neon-purple: #b366ff;\n            --text-primary: #e0e0e0;\n            --text-secondary: #888;\n            --border-color: #333;\n\n            font-family: 'JetBrains Mono', 'Consolas', 'Monaco', monospace;\n            background: var(--bg-secondary);\n            border: 1px solid var(--neon-green);\n            border-radius: 4px;\n            box-shadow: 0 0 20px var(--neon-green-glow);\n            position: relative;\n            overflow: hidden;\n            color: var(--text-primary);\n            padding: 0;\n            margin: 0;\n        }\n\n        #sorting-network-wrapper * {\n            box-sizing: border-box;\n        }\n\n        @keyframes sn-pulse-glow {\n\n            0%,\n            100% {\n                box-shadow: 0 0 5px var(--neon-green-glow), 0 0 10px var(--neon-green-glow);\n            }\n\n            50% {\n                box-shadow: 0 0 10px var(--neon-green-glow), 0 0 20px var(--neon-green-glow), 0 0 30px var(--neon-green-glow);\n            }\n        }\n\n        #sorting-network-wrapper .sn-header {\n            background: var(--bg-tertiary);\n            border-bottom: 1px solid var(--border-color);\n            padding: 10px 15px;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n        }\n\n        #sorting-network-wrapper .sn-title {\n            color: var(--neon-green);\n            font-size: 0.95em;\n            font-weight: 600;\n            text-transform: uppercase;\n            letter-spacing: 2px;\n            text-shadow: 0 0 10px var(--neon-green-glow);\n            margin: 0;\n        }\n\n        #sorting-network-wrapper .sn-lang-btn {\n            padding: 5px 10px;\n            font-size: 0.7em;\n            font-family: inherit;\n            border: 1px solid var(--neon-cyan);\n            background: transparent;\n            color: var(--neon-cyan);\n            cursor: pointer;\n            transition: all 0.2s;\n        }\n\n        #sorting-network-wrapper .sn-lang-btn:hover {\n            background: rgba(0, 212, 255, 0.1);\n        }\n\n        #sorting-network-wrapper .sn-main {\n            padding: 12px 15px;\n        }\n\n        #sorting-network-wrapper .sn-control-grid {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 10px;\n            margin-bottom: 12px;\n        }\n\n        #sorting-network-wrapper .sn-panel {\n            background: var(--bg-tertiary);\n            border: 1px solid var(--border-color);\n            border-radius: 4px;\n            padding: 10px;\n        }\n\n        #sorting-network-wrapper .sn-panel-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 8px;\n            padding-bottom: 6px;\n            border-bottom: 1px solid var(--border-color);\n        }\n\n        #sorting-network-wrapper .sn-panel-title {\n            color: var(--text-secondary);\n            font-size: 0.65em;\n            text-transform: uppercase;\n            letter-spacing: 1px;\n        }\n\n        #sorting-network-wrapper .sn-mode-buttons {\n            display: flex;\n            gap: 6px;\n        }\n\n        #sorting-network-wrapper .sn-mode-btn {\n            flex: 1;\n            padding: 8px 12px;\n            font-size: 0.75em;\n            font-family: inherit;\n            border: 1px solid var(--border-color);\n            background: var(--bg-secondary);\n            color: var(--text-secondary);\n            cursor: pointer;\n            transition: all 0.2s;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            gap: 4px;\n        }\n\n        #sorting-network-wrapper .sn-mode-btn:hover {\n            border-color: var(--neon-green);\n            color: var(--neon-green);\n        }\n\n        #sorting-network-wrapper .sn-mode-btn.active {\n            border-color: var(--neon-green);\n            background: rgba(0, 255, 136, 0.1);\n            color: var(--neon-green);\n            box-shadow: 0 0 10px var(--neon-green-glow);\n        }\n\n        #sorting-network-wrapper .sn-speed-control {\n            display: flex;\n            flex-direction: column;\n            gap: 6px;\n        }\n\n        #sorting-network-wrapper .sn-speed-display {\n            text-align: center;\n            font-size: 1.1em;\n            color: var(--neon-purple);\n            font-weight: 600;\n        }\n\n        #sorting-network-wrapper .sn-speed-slider {\n            -webkit-appearance: none;\n            width: 100%;\n            height: 5px;\n            border-radius: 3px;\n            background: var(--bg-secondary);\n            border: 1px solid var(--border-color);\n        }\n\n        #sorting-network-wrapper .sn-speed-slider::-webkit-slider-thumb {\n            -webkit-appearance: none;\n            width: 16px;\n            height: 16px;\n            border-radius: 50%;\n            background: var(--neon-purple);\n            cursor: pointer;\n            box-shadow: 0 0 10px rgba(179, 102, 255, 0.5);\n        }\n\n        #sorting-network-wrapper .sn-stats-grid {\n            display: flex;\n            gap: 8px;\n        }\n\n        #sorting-network-wrapper .sn-stat-item {\n            flex: 1;\n            text-align: center;\n            padding: 6px;\n            background: var(--bg-secondary);\n            border: 1px solid var(--border-color);\n            border-radius: 4px;\n        }\n\n        #sorting-network-wrapper .sn-stat-label {\n            font-size: 0.6em;\n            color: var(--text-secondary);\n            text-transform: uppercase;\n            margin-bottom: 3px;\n        }\n\n        #sorting-network-wrapper .sn-stat-value {\n            font-size: 1.1em;\n            font-weight: 600;\n            color: var(--neon-green);\n            text-shadow: 0 0 10px var(--neon-green-glow);\n        }\n\n        #sorting-network-wrapper .sn-network-panel {\n            background: var(--bg-tertiary);\n            border: 1px solid var(--border-color);\n            border-radius: 4px;\n            margin-bottom: 12px;\n            overflow: hidden;\n        }\n\n        #sorting-network-wrapper .sn-network-header {\n            background: var(--bg-secondary);\n            padding: 6px 10px;\n            border-bottom: 1px solid var(--border-color);\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n        }\n\n        #sorting-network-wrapper .sn-network-title {\n            color: var(--text-secondary);\n            font-size: 0.65em;\n            text-transform: uppercase;\n        }\n\n        #sorting-network-wrapper .sn-network-info {\n            display: flex;\n            gap: 10px;\n            font-size: 0.6em;\n            color: var(--text-secondary);\n        }\n\n        #sorting-network-wrapper .sn-network-info span {\n            display: flex;\n            align-items: center;\n            gap: 3px;\n        }\n\n        #sorting-network-wrapper .sn-legend-dot {\n            width: 6px;\n            height: 6px;\n            border-radius: 50%;\n        }\n\n        #sorting-network-wrapper .sn-legend-dot.input {\n            background: var(--neon-green);\n        }\n\n        #sorting-network-wrapper .sn-legend-dot.output {\n            background: var(--neon-red);\n        }\n\n        #sorting-network-wrapper .sn-legend-dot.comparator {\n            background: var(--neon-purple);\n        }\n\n        #sorting-network-wrapper .sn-network-area {\n            position: relative;\n            width: 100%;\n            height: 350px;\n            background:\n                linear-gradient(90deg, rgba(0, 255, 136, 0.03) 1px, transparent 1px),\n                linear-gradient(rgba(0, 255, 136, 0.03) 1px, transparent 1px),\n                var(--bg-primary);\n            background-size: 20px 20px;\n        }\n\n        #sorting-network-wrapper .sn-network-area canvas {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n        }\n\n        #sorting-network-wrapper .sn-number-card {\n            position: absolute;\n            width: 40px;\n            height: 40px;\n            background: var(--bg-secondary);\n            border: 2px solid var(--neon-green);\n            color: var(--neon-green);\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            font-size: 1.1em;\n            font-weight: 700;\n            font-family: inherit;\n            cursor: default;\n            transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n            box-shadow: 0 0 10px var(--neon-green-glow);\n            z-index: 10;\n        }\n\n        #sorting-network-wrapper .sn-number-card.completed {\n            border-color: var(--neon-cyan);\n            color: var(--neon-cyan);\n            background: rgba(0, 212, 255, 0.1);\n            box-shadow: 0 0 15px rgba(0, 212, 255, 0.4);\n        }\n\n        #sorting-network-wrapper .sn-controls-panel {\n            background: var(--bg-tertiary);\n            border: 1px solid var(--border-color);\n            border-radius: 4px;\n            padding: 10px;\n        }\n\n        #sorting-network-wrapper .sn-controls {\n            display: flex;\n            gap: 8px;\n            justify-content: center;\n        }\n\n        #sorting-network-wrapper .sn-btn {\n            padding: 10px 20px;\n            font-size: 0.8em;\n            font-family: inherit;\n            font-weight: 500;\n            border: 1px solid var(--neon-green);\n            background: var(--bg-secondary);\n            color: var(--neon-green);\n            cursor: pointer;\n            transition: all 0.2s;\n            display: flex;\n            align-items: center;\n            gap: 6px;\n            text-transform: uppercase;\n            letter-spacing: 1px;\n        }\n\n        #sorting-network-wrapper .sn-btn:hover {\n            background: rgba(0, 255, 136, 0.1);\n            box-shadow: 0 0 10px var(--neon-green-glow);\n        }\n\n        #sorting-network-wrapper .sn-message-box {\n            padding: 8px 15px;\n            font-size: 0.75em;\n            display: none;\n            border-left: 3px solid var(--neon-green);\n            background: var(--bg-secondary);\n            margin-bottom: 10px;\n        }\n\n        #sorting-network-wrapper .sn-message-box::before {\n            content: '> ';\n            color: var(--neon-green);\n        }\n\n        #sorting-network-wrapper .sn-message-box.success {\n            border-left-color: var(--neon-green);\n            color: var(--neon-green);\n        }\n\n        #sorting-network-wrapper .sn-message-box.error {\n            border-left-color: var(--neon-red);\n            color: var(--neon-red);\n        }\n\n        #sorting-network-wrapper .sn-message-box.info {\n            border-left-color: var(--neon-cyan);\n            color: var(--neon-cyan);\n        }\n\n        #sorting-network-wrapper .sn-message-box.warning {\n            border-left-color: var(--neon-yellow);\n            color: var(--neon-yellow);\n        }\n    <\/style>\n\n    <!-- Header -->\n    <div class=\"sn-header\">\n        <h1 class=\"sn-title\" data-sn-i18n=\"title\">\u6392\u5e8f\u7db2\u8def\u6f14\u793a<\/h1>\n        <button class=\"sn-lang-btn\" id=\"snLangBtn\" onclick=\"snToggleLanguage()\">EN<\/button>\n    <\/div>\n\n    <!-- Main Content -->\n    <div class=\"sn-main\">\n        <!-- Control Grid -->\n        <div class=\"sn-control-grid\">\n            <!-- Network Size -->\n            <div class=\"sn-panel\">\n                <div class=\"sn-panel-header\">\n                    <span class=\"sn-panel-title\" data-sn-i18n=\"networkSize\">\u7db2\u8def\u5927\u5c0f<\/span>\n                <\/div>\n                <div class=\"sn-mode-buttons\">\n                    <button class=\"sn-mode-btn\" id=\"snSize4\" onclick=\"snSelectNetworkSize(4)\">4<\/button>\n                    <button class=\"sn-mode-btn active\" id=\"snSize6\" onclick=\"snSelectNetworkSize(6)\">6<\/button>\n                <\/div>\n            <\/div>\n\n            <!-- Sort Mode -->\n            <div class=\"sn-panel\">\n                <div class=\"sn-panel-header\">\n                    <span class=\"sn-panel-title\" data-sn-i18n=\"sortMode\">\u6392\u5e8f\u6a21\u5f0f<\/span>\n                <\/div>\n                <div class=\"sn-mode-buttons\">\n                    <button class=\"sn-mode-btn active\" id=\"snModeAsc\" onclick=\"snSelectMode('asc')\">\n                        <span>\u25b2<\/span> <span data-sn-i18n=\"asc\">\u5347\u5e8f<\/span>\n                    <\/button>\n                    <button class=\"sn-mode-btn\" id=\"snModeDesc\" onclick=\"snSelectMode('desc')\">\n                        <span>\u25bc<\/span> <span data-sn-i18n=\"desc\">\u964d\u5e8f<\/span>\n                    <\/button>\n                <\/div>\n            <\/div>\n\n            <!-- Speed Control -->\n            <div class=\"sn-panel\">\n                <div class=\"sn-panel-header\">\n                    <span class=\"sn-panel-title\" data-sn-i18n=\"speed\">\u901f\u5ea6<\/span>\n                <\/div>\n                <div class=\"sn-speed-control\">\n                    <div class=\"sn-speed-display\" id=\"snSpeedDisplay\">1.0x<\/div>\n                    <input type=\"range\" class=\"sn-speed-slider\" id=\"snSpeedSlider\" min=\"0\" max=\"4\" value=\"2\"\n                        oninput=\"snUpdateSpeed()\">\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Stats -->\n        <div class=\"sn-panel\" style=\"margin-bottom: 12px;\">\n            <div class=\"sn-stats-grid\">\n                <div class=\"sn-stat-item\">\n                    <div class=\"sn-stat-label\" data-sn-i18n=\"moves\">\u79fb\u52d5\u6b21\u6578<\/div>\n                    <div class=\"sn-stat-value\" id=\"snMoves\">0<\/div>\n                <\/div>\n                <div class=\"sn-stat-item\">\n                    <div class=\"sn-stat-label\" data-sn-i18n=\"progress\">\u9032\u5ea6<\/div>\n                    <div class=\"sn-stat-value\" id=\"snProgress\">0\/6<\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Message Box -->\n        <div class=\"sn-message-box\" id=\"snMessageBox\"><\/div>\n\n        <!-- Network Visualization -->\n        <div class=\"sn-network-panel\">\n            <div class=\"sn-network-header\">\n                <span class=\"sn-network-title\" data-sn-i18n=\"networkTopology\">\u7db2\u8def\u62d3\u64b2\u5716<\/span>\n                <div class=\"sn-network-info\">\n                    <span>\n                        <div class=\"sn-legend-dot input\"><\/div> INPUT\n                    <\/span>\n                    <span>\n                        <div class=\"sn-legend-dot comparator\"><\/div> COMPARATOR\n                    <\/span>\n                    <span>\n                        <div class=\"sn-legend-dot output\"><\/div> OUTPUT\n                    <\/span>\n                <\/div>\n            <\/div>\n            <div class=\"sn-network-area\" id=\"snNetworkArea\">\n                <canvas id=\"snCanvas\"><\/canvas>\n            <\/div>\n        <\/div>\n\n        <!-- Controls -->\n        <div class=\"sn-controls-panel\">\n            <div class=\"sn-controls\">\n                <button class=\"sn-btn\" id=\"snNewSeqBtn\" onclick=\"snGenerateNewSequence()\">\n                    <span data-sn-i18n=\"newSequence\">\u7522\u751f\u5e8f\u5217<\/span>\n                <\/button>\n                <button class=\"sn-btn\" id=\"snAutoBtn\" onclick=\"snAutoPlay()\">\n                    <span>\u25b6<\/span> <span data-sn-i18n=\"startDemo\">\u958b\u59cb\u6f14\u793a<\/span>\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        (function () {\n            'use strict';\n\n            \/\/ Translations\n            var snTexts = {\n                zh: {\n                    title: '\u6392\u5e8f\u7db2\u8def\u6f14\u793a',\n                    networkSize: '\u7db2\u8def\u5927\u5c0f',\n                    sortMode: '\u6392\u5e8f\u6a21\u5f0f',\n                    asc: '\u5347\u5e8f',\n                    desc: '\u964d\u5e8f',\n                    speed: '\u901f\u5ea6',\n                    moves: '\u79fb\u52d5\u6b21\u6578',\n                    progress: '\u9032\u5ea6',\n                    networkTopology: '\u7db2\u8def\u62d3\u64b2\u5716',\n                    newSequence: '\u7522\u751f\u5e8f\u5217',\n                    startDemo: '\u958b\u59cb\u6f14\u793a',\n                    stopDemo: '\u505c\u6b62',\n                    restartDemo: '\u91cd\u65b0\u6f14\u793a',\n                    continueDemo: '\u7e7c\u7e8c\u6f14\u793a',\n                    demoStart: 'DEMO: \u81ea\u52d5\u6f14\u793a\u958b\u59cb...',\n                    demoStop: 'DEMO: \u6f14\u793a\u5df2\u505c\u6b62',\n                    initComplete: 'INIT: \u5e8f\u5217\u5df2\u8f09\u5165',\n                    sortSuccess: 'SUCCESS: \u6392\u5e8f\u5b8c\u6210!',\n                    sortError: 'ERROR: \u6392\u5e8f\u932f\u8aa4!',\n                    result: '\u7d50\u679c',\n                    moves: '\u79fb\u52d5\u6b21\u6578'\n                },\n                en: {\n                    title: 'SORTING NETWORK',\n                    networkSize: 'Network Size',\n                    sortMode: 'Sort Mode',\n                    asc: 'ASC',\n                    desc: 'DESC',\n                    speed: 'Speed',\n                    moves: 'Moves',\n                    progress: 'Progress',\n                    networkTopology: 'Network Topology',\n                    newSequence: 'NEW SEQUENCE',\n                    startDemo: 'START DEMO',\n                    stopDemo: 'STOP',\n                    restartDemo: 'RESTART',\n                    continueDemo: 'CONTINUE',\n                    demoStart: 'DEMO: Auto demonstration started...',\n                    demoStop: 'DEMO: Demonstration stopped',\n                    initComplete: 'INIT: Sequence loaded',\n                    sortSuccess: 'SUCCESS: Sorting complete!',\n                    sortError: 'ERROR: Sorting failed!',\n                    result: 'Result',\n                    moves: 'Moves'\n                }\n            };\n\n            var snCurrentLang = 'zh';\n            var snSpeedValues = [0.5, 0.75, 1.0, 1.25, 1.5];\n            var snCurrentSpeedIndex = 2;\n\n            var snGame = {\n                mode: 'asc',\n                cards: [],\n                moves: 0,\n                finished: 0,\n                active: false,\n                autoPlaying: false,\n                networkSize: 6,\n                currentSequence: null\n            };\n\n            \/\/ Network configurations\n            var snNetworkConfigs = {\n                4: {\n                    nodes: [\n                        { id: 'in0', x: 0, y: 0, type: 'input' },\n                        { id: 'in1', x: 0, y: 1, type: 'input' },\n                        { id: 'in2', x: 0, y: 2, type: 'input' },\n                        { id: 'in3', x: 0, y: 3, type: 'input' },\n                        { id: 'c1_0', x: 1.5, y: 0.5, type: 'comparator' },\n                        { id: 'c1_1', x: 1.5, y: 2.5, type: 'comparator' },\n                        { id: 'c2_0', x: 3, y: 1.5, type: 'comparator' },\n                        { id: 'c3_0', x: 4.5, y: 0.5, type: 'comparator' },\n                        { id: 'c3_1', x: 4.5, y: 2.5, type: 'comparator' },\n                        { id: 'out0', x: 6, y: 0, type: 'output' },\n                        { id: 'out1', x: 6, y: 1, type: 'output' },\n                        { id: 'out2', x: 6, y: 2, type: 'output' },\n                        { id: 'out3', x: 6, y: 3, type: 'output' }\n                    ],\n                    edges: [\n                        { from: 'in0', to: 'c1_0' }, { from: 'in1', to: 'c1_0' },\n                        { from: 'in2', to: 'c1_1' }, { from: 'in3', to: 'c1_1' },\n                        { from: 'c1_0', to: 'c3_0' },\n                        { from: 'c1_0', to: 'c2_0' }, { from: 'c1_1', to: 'c2_0' },\n                        { from: 'c1_1', to: 'c3_1' },\n                        { from: 'c2_0', to: 'c3_0' }, { from: 'c2_0', to: 'c3_1' },\n                        { from: 'c3_0', to: 'out0' }, { from: 'c3_0', to: 'out1' },\n                        { from: 'c3_1', to: 'out2' }, { from: 'c3_1', to: 'out3' }\n                    ],\n                    maxX: 6, maxY: 3\n                },\n                6: {\n                    nodes: [\n                        { id: 'in0', x: 0, y: 0, type: 'input' },\n                        { id: 'in1', x: 0, y: 1, type: 'input' },\n                        { id: 'in2', x: 0, y: 2, type: 'input' },\n                        { id: 'in3', x: 0, y: 3, type: 'input' },\n                        { id: 'in4', x: 0, y: 4, type: 'input' },\n                        { id: 'in5', x: 0, y: 5, type: 'input' },\n                        { id: 'c1_0', x: 1.5, y: 0.5, type: 'comparator' },\n                        { id: 'c1_1', x: 1.5, y: 2.5, type: 'comparator' },\n                        { id: 'c1_2', x: 1.5, y: 4.5, type: 'comparator' },\n                        { id: 'c2_0', x: 3, y: 0.5, type: 'comparator' },\n                        { id: 'c2_1', x: 3, y: 2.5, type: 'comparator' },\n                        { id: 'c2_2', x: 3, y: 4.5, type: 'comparator' },\n                        { id: 'c3_0', x: 4.5, y: 0.5, type: 'comparator' },\n                        { id: 'c3_1', x: 4.5, y: 2.5, type: 'comparator' },\n                        { id: 'c3_2', x: 4.5, y: 4.5, type: 'comparator' },\n                        { id: 'c4_0', x: 6, y: 1.5, type: 'comparator' },\n                        { id: 'c4_1', x: 6, y: 3.5, type: 'comparator' },\n                        { id: 'c5_0', x: 7.5, y: 0.5, type: 'comparator' },\n                        { id: 'c5_1', x: 7.5, y: 2.5, type: 'comparator' },\n                        { id: 'c5_2', x: 7.5, y: 4.5, type: 'comparator' },\n                        { id: 'out0', x: 9, y: 0, type: 'output' },\n                        { id: 'out1', x: 9, y: 1, type: 'output' },\n                        { id: 'out2', x: 9, y: 2, type: 'output' },\n                        { id: 'out3', x: 9, y: 3, type: 'output' },\n                        { id: 'out4', x: 9, y: 4, type: 'output' },\n                        { id: 'out5', x: 9, y: 5, type: 'output' }\n                    ],\n                    edges: [\n                        { from: 'in0', to: 'c1_0' }, { from: 'in1', to: 'c1_0' },\n                        { from: 'in2', to: 'c1_1' }, { from: 'in3', to: 'c1_1' },\n                        { from: 'in4', to: 'c1_2' }, { from: 'in5', to: 'c1_2' },\n                        { from: 'c1_0', to: 'c2_0' }, { from: 'c1_0', to: 'c2_1' },\n                        { from: 'c1_1', to: 'c2_0' }, { from: 'c1_1', to: 'c2_2' },\n                        { from: 'c1_2', to: 'c2_1' }, { from: 'c1_2', to: 'c2_2' },\n                        { from: 'c2_0', to: 'c3_0' }, { from: 'c2_0', to: 'c3_1' },\n                        { from: 'c2_1', to: 'c3_0' }, { from: 'c2_1', to: 'c3_2' },\n                        { from: 'c2_2', to: 'c3_1' }, { from: 'c2_2', to: 'c3_2' },\n                        { from: 'c3_0', to: 'c4_0' }, { from: 'c3_1', to: 'c4_0' },\n                        { from: 'c3_1', to: 'c4_1' }, { from: 'c3_2', to: 'c4_1' },\n                        { from: 'c3_0', to: 'c5_0' }, { from: 'c3_2', to: 'c5_2' },\n                        { from: 'c4_0', to: 'c5_0' }, { from: 'c4_0', to: 'c5_1' },\n                        { from: 'c4_1', to: 'c5_1' }, { from: 'c4_1', to: 'c5_2' },\n                        { from: 'c5_0', to: 'out0' }, { from: 'c5_0', to: 'out1' },\n                        { from: 'c5_1', to: 'out2' }, { from: 'c5_1', to: 'out3' },\n                        { from: 'c5_2', to: 'out4' }, { from: 'c5_2', to: 'out5' }\n                    ],\n                    maxX: 9, maxY: 5\n                }\n            };\n\n            var snNetwork = snNetworkConfigs[6];\n            var snCanvas, snCtx, snArea;\n\n            \/\/ Toggle Language\n            window.snToggleLanguage = function () {\n                snCurrentLang = snCurrentLang === 'zh' ? 'en' : 'zh';\n                document.getElementById('snLangBtn').textContent = snCurrentLang === 'zh' ? 'EN' : '\u4e2d\u6587';\n\n                document.querySelectorAll('[data-sn-i18n]').forEach(function (el) {\n                    var key = el.getAttribute('data-sn-i18n');\n                    if (snTexts[snCurrentLang][key]) {\n                        el.textContent = snTexts[snCurrentLang][key];\n                    }\n                });\n\n                snUpdateButtonText();\n            };\n\n            function snUpdateButtonText() {\n                var btn = document.getElementById('snAutoBtn');\n                var spanText = btn.querySelector('span:last-child');\n                var t = snTexts[snCurrentLang];\n\n                if (snGame.autoPlaying) {\n                    spanText.textContent = t.stopDemo;\n                } else if (snGame.finished === snGame.networkSize) {\n                    spanText.textContent = t.restartDemo;\n                } else {\n                    spanText.textContent = t.startDemo;\n                }\n            }\n\n            \/\/ Update Speed\n            window.snUpdateSpeed = function () {\n                snCurrentSpeedIndex = parseInt(document.getElementById('snSpeedSlider').value);\n                document.getElementById('snSpeedDisplay').textContent = snSpeedValues[snCurrentSpeedIndex] + 'x';\n            };\n\n            function snGetDelay() {\n                return 500 \/ snSpeedValues[snCurrentSpeedIndex];\n            }\n\n            \/\/ Select Network Size\n            window.snSelectNetworkSize = function (size) {\n                if (snGame.autoPlaying) return;\n                snGame.networkSize = size;\n                snGame.currentSequence = null;\n                snNetwork = snNetworkConfigs[size];\n\n                document.getElementById('snSize4').classList.toggle('active', size === 4);\n                document.getElementById('snSize6').classList.toggle('active', size === 6);\n\n                snRestartGame();\n                snAdjustCanvas();\n                snDrawNetwork();\n\n                var btn = document.getElementById('snAutoBtn');\n                btn.querySelector('span:first-child').textContent = '\\u25B6';\n                btn.querySelector('span:last-child').textContent = snTexts[snCurrentLang].startDemo;\n            };\n\n            \/\/ Select Mode\n            window.snSelectMode = function (mode) {\n                if (snGame.autoPlaying) return;\n                snGame.mode = mode;\n                document.getElementById('snModeAsc').classList.toggle('active', mode === 'asc');\n                document.getElementById('snModeDesc').classList.toggle('active', mode === 'desc');\n            };\n\n            \/\/ Canvas functions\n            function snAdjustCanvas() {\n                var rect = snArea.getBoundingClientRect();\n                snCanvas.width = rect.width;\n                snCanvas.height = rect.height;\n            }\n\n            function snGetPosition(node) {\n                var padding = 50;\n                var rect = snArea.getBoundingClientRect();\n                var usableWidth = rect.width - padding * 2;\n                var usableHeight = rect.height - padding * 2;\n\n                return {\n                    x: padding + (node.x \/ snNetwork.maxX) * usableWidth,\n                    y: padding + (node.y \/ snNetwork.maxY) * usableHeight\n                };\n            }\n\n            function snDrawNetwork() {\n                snCtx.clearRect(0, 0, snCanvas.width, snCanvas.height);\n\n                \/\/ Draw edges\n                snCtx.shadowColor = 'rgba(0, 255, 136, 0.5)';\n                snCtx.shadowBlur = 5;\n                snCtx.strokeStyle = '#00ff88';\n                snCtx.lineWidth = 2;\n\n                snNetwork.edges.forEach(function (edge) {\n                    var fromNode = snNetwork.nodes.find(function (n) { return n.id === edge.from; });\n                    var toNode = snNetwork.nodes.find(function (n) { return n.id === edge.to; });\n                    var from = snGetPosition(fromNode);\n                    var to = snGetPosition(toNode);\n\n                    snCtx.beginPath();\n                    snCtx.moveTo(from.x, from.y);\n                    snCtx.lineTo(to.x, to.y);\n                    snCtx.stroke();\n                });\n\n                snCtx.shadowBlur = 0;\n\n                \/\/ Draw comparators (vertical boxes)\n                snNetwork.nodes.filter(function (n) { return n.type === 'comparator'; }).forEach(function (node) {\n                    var pos = snGetPosition(node);\n                    var width = 36;\n                    var height = 65;\n\n                    snCtx.fillStyle = 'rgba(179, 102, 255, 0.1)';\n                    snCtx.strokeStyle = '#b366ff';\n                    snCtx.lineWidth = 2;\n                    snCtx.shadowColor = 'rgba(179, 102, 255, 0.5)';\n                    snCtx.shadowBlur = 10;\n\n                    snCtx.beginPath();\n                    snCtx.rect(pos.x - width \/ 2, pos.y - height \/ 2, width, height);\n                    snCtx.fill();\n                    snCtx.stroke();\n                    snCtx.shadowBlur = 0;\n                });\n\n                snCtx.shadowBlur = 0;\n\n                \/\/ Draw input\/output nodes\n                snNetwork.nodes.filter(function (n) { return n.type !== 'comparator'; }).forEach(function (node) {\n                    var pos = snGetPosition(node);\n\n                    snCtx.beginPath();\n                    snCtx.arc(pos.x, pos.y, 10, 0, Math.PI * 2);\n\n                    if (node.type === 'input') {\n                        snCtx.fillStyle = 'rgba(0, 255, 136, 0.2)';\n                        snCtx.strokeStyle = '#00ff88';\n                        snCtx.shadowColor = 'rgba(0, 255, 136, 0.5)';\n                    } else {\n                        snCtx.fillStyle = 'rgba(255, 68, 68, 0.2)';\n                        snCtx.strokeStyle = '#ff4444';\n                        snCtx.shadowColor = 'rgba(255, 68, 68, 0.5)';\n                    }\n\n                    snCtx.shadowBlur = 10;\n                    snCtx.lineWidth = 2;\n                    snCtx.fill();\n                    snCtx.stroke();\n                    snCtx.shadowBlur = 0;\n                });\n            }\n\n            \/\/ Game functions\n            function snInitGame(useStoredSequence) {\n                snGame.active = true;\n                snGame.moves = 0;\n                snGame.finished = 0;\n                snGame.cards = [];\n\n                document.querySelectorAll('.sn-number-card').forEach(function (card) { card.remove(); });\n\n                var nums;\n                if (useStoredSequence && snGame.currentSequence) {\n                    nums = snGame.currentSequence.slice();\n                } else {\n                    nums = [];\n                    for (var i = 1; i <= snGame.networkSize; i++) nums.push(i);\n                    for (var i = nums.length - 1; i > 0; i--) {\n                        var j = Math.floor(Math.random() * (i + 1));\n                        var temp = nums[i];\n                        nums[i] = nums[j];\n                        nums[j] = temp;\n                    }\n                    snGame.currentSequence = nums.slice();\n                }\n\n                nums.forEach(function (num, idx) {\n                    var inputNode = snNetwork.nodes.find(function (n) { return n.id === 'in' + idx; });\n                    var pos = snGetPosition(inputNode);\n\n                    var cardData = {\n                        value: num,\n                        currentNode: inputNode.id,\n                        fromNode: inputNode.id,\n                        element: snCreateCard(num, pos.x, pos.y)\n                    };\n\n                    snGame.cards.push(cardData);\n                });\n\n                snUpdateStats();\n                snShowMsg(snTexts[snCurrentLang].initComplete + ': [' + nums.join(', ') + ']', 'info');\n            }\n\n            window.snGenerateNewSequence = function () {\n                if (snGame.autoPlaying) {\n                    snGame.autoPlaying = false;\n                }\n                snRestartGame();\n                snInitGame(false);\n\n                var btn = document.getElementById('snAutoBtn');\n                btn.querySelector('span:first-child').textContent = '\\u25B6';\n                btn.querySelector('span:last-child').textContent = snTexts[snCurrentLang].startDemo;\n            };\n\n            function snCreateCard(num, x, y) {\n                var card = document.createElement('div');\n                card.className = 'sn-number-card';\n                card.textContent = num;\n                card.style.left = (x - 20) + 'px';\n                card.style.top = (y - 20) + 'px';\n                snArea.appendChild(card);\n                return card;\n            }\n\n            function snMoveCardTo(cardData, targetNode, fromNodeId) {\n                cardData.fromNode = fromNodeId;\n                cardData.currentNode = targetNode.id;\n\n                var pos = snGetPosition(targetNode);\n                var offsetY = 0;\n\n                \/\/ If moving to comparator, position based on entry point\n                if (targetNode.type === 'comparator') {\n                    \/\/ Find all source nodes for this comparator\n                    var incomingEdges = snNetwork.edges.filter(function (e) { return e.to === targetNode.id; });\n                    var sourceYValues = incomingEdges.map(function (e) {\n                        var src = snNetwork.nodes.find(function (n) { return n.id === e.from; });\n                        return src ? src.y : 0;\n                    });\n                    var minSourceY = Math.min.apply(null, sourceYValues);\n\n                    var fromNode = snNetwork.nodes.find(function (n) { return n.id === fromNodeId; });\n                    if (fromNode) {\n                        \/\/ If fromNode is the upper source (equal to min y), position at top\n                        offsetY = (fromNode.y === minSourceY) ? -18 : 18;\n                    }\n                }\n\n                cardData.element.style.left = (pos.x - 20) + 'px';\n                cardData.element.style.top = (pos.y - 20 + offsetY) + 'px';\n\n                \/\/ Mark as just arrived at comparator\n                if (targetNode.type === 'comparator') {\n                    cardData.justArrived = true;\n                }\n\n                if (targetNode.type === 'output') {\n                    snGame.finished++;\n                    cardData.element.classList.add('completed');\n                    snUpdateStats();\n\n                    if (snGame.finished === snGame.networkSize) {\n                        setTimeout(snCheckResult, 500);\n                    }\n                }\n            }\n\n            function snProcessCardMove(cardData) {\n                var currentNode = snNetwork.nodes.find(function (n) { return n.id === cardData.currentNode; });\n                var possibleNext = snNetwork.edges.filter(function (e) { return e.from === cardData.currentNode; });\n                if (possibleNext.length === 0) return false;\n\n                var nextNode;\n\n                if (currentNode.type === 'comparator') {\n                    var others = snGame.cards.filter(function (c) {\n                        return c.currentNode === cardData.currentNode && c !== cardData;\n                    });\n\n                    if (others.length > 0) {\n                        var other = others[0];\n                        var shouldGoUp = snGame.mode === 'asc' ?\n                            cardData.value < other.value :\n                            cardData.value > other.value;\n\n                        var paths = possibleNext.map(function (e) {\n                            return {\n                                edge: e,\n                                node: snNetwork.nodes.find(function (n) { return n.id === e.to; })\n                            };\n                        }).sort(function (a, b) { return a.node.y - b.node.y; });\n\n                        nextNode = shouldGoUp ? paths[0].node : paths[paths.length - 1].node;\n                        var otherNext = shouldGoUp ? paths[paths.length - 1].node : paths[0].node;\n                        snMoveCardTo(other, otherNext, currentNode.id);\n                    } else {\n                        return false;\n                    }\n                } else {\n                    nextNode = snNetwork.nodes.find(function (n) { return n.id === possibleNext[0].to; });\n                }\n\n                snMoveCardTo(cardData, nextNode, currentNode.id);\n                snGame.moves++;\n                snUpdateStats();\n                return true;\n            }\n\n            function snCheckResult() {\n                snGame.active = false;\n                snGame.autoPlaying = false;\n\n                var result = snGame.cards\n                    .filter(function (c) { return c.currentNode.indexOf('out') === 0; })\n                    .sort(function (a, b) {\n                        var aIdx = parseInt(a.currentNode.replace('out', ''));\n                        var bIdx = parseInt(b.currentNode.replace('out', ''));\n                        return aIdx - bIdx;\n                    })\n                    .map(function (c) { return c.value; });\n\n                var expected = [];\n                for (var i = 1; i <= snGame.networkSize; i++) {\n                    expected.push(snGame.mode === 'asc' ? i : snGame.networkSize - i + 1);\n                }\n\n                var correct = true;\n                for (var i = 0; i < result.length; i++) {\n                    if (result[i] !== expected[i]) correct = false;\n                }\n\n                var t = snTexts[snCurrentLang];\n                var btn = document.getElementById('snAutoBtn');\n                btn.querySelector('span:first-child').textContent = '\\u25B6';\n                btn.querySelector('span:last-child').textContent = t.restartDemo;\n\n                if (correct) {\n                    snShowMsg(t.sortSuccess + ' ' + t.result + ': [' + result.join(', ') + '] | ' + t.moves + ': ' + snGame.moves, 'success');\n                } else {\n                    snShowMsg(t.sortError + ' ' + t.result + ': [' + result.join(', ') + ']', 'error');\n                }\n            }\n\n            function snRestartGame() {\n                snGame.autoPlaying = false;\n                snGame.cards.forEach(function (card) {\n                    if (card.element) card.element.remove();\n                });\n\n                snGame.cards = [];\n                snGame.moves = 0;\n                snGame.finished = 0;\n                snGame.active = false;\n\n                snUpdateStats();\n                snHideMsg();\n            }\n\n            \/\/ Auto-play (using setTimeout instead of async\/await for WordPress compatibility)\n            window.snAutoPlay = function () {\n                var btn = document.getElementById('snAutoBtn');\n                var t = snTexts[snCurrentLang];\n\n                if (snGame.autoPlaying) {\n                    snGame.autoPlaying = false;\n                    btn.querySelector('span:first-child').textContent = '\\u25B6';\n                    btn.querySelector('span:last-child').textContent = t.continueDemo;\n                    snShowMsg(t.demoStop, 'warning');\n                    return;\n                }\n\n                function startAutoPlay() {\n                    snGame.autoPlaying = true;\n                    btn.querySelector('span:first-child').textContent = '\\u25A0';\n                    btn.querySelector('span:last-child').textContent = t.stopDemo;\n                    snShowMsg(t.demoStart, 'info');\n                    runAutoPlayLoop();\n                }\n\n                function runAutoPlayLoop() {\n                    if (!snGame.autoPlaying || snGame.finished >= snGame.networkSize) {\n                        if (snGame.finished >= snGame.networkSize) {\n                            snGame.autoPlaying = false;\n                            btn.querySelector('span:first-child').textContent = '\\u25B6';\n                            btn.querySelector('span:last-child').textContent = t.restartDemo;\n                        }\n                        return;\n                    }\n\n                    var movableCards = snGame.cards.filter(function (c) {\n                        var node = snNetwork.nodes.find(function (n) { return n.id === c.currentNode; });\n                        if (node.type === 'output') return false;\n                        if (node.type === 'comparator') {\n                            var others = snGame.cards.filter(function (o) {\n                                return o.currentNode === c.currentNode && o !== c;\n                            });\n                            return others.length > 0 && !c.justArrived && !others[0].justArrived;\n                        }\n                        return true;\n                    });\n\n                    if (movableCards.length === 0) {\n                        setTimeout(runAutoPlayLoop, snGetDelay() * 0.6);\n                        return;\n                    }\n\n                    var cardsByLayer = {};\n                    movableCards.forEach(function (card) {\n                        var node = snNetwork.nodes.find(function (n) { return n.id === card.currentNode; });\n                        var layerX = node.x;\n                        if (!cardsByLayer[layerX]) cardsByLayer[layerX] = [];\n                        cardsByLayer[layerX].push(card);\n                    });\n\n                    var earliestLayer = Math.min.apply(null, Object.keys(cardsByLayer).map(Number));\n                    var cardsToMove = cardsByLayer[earliestLayer];\n                    var processedComparators = {};\n\n                    cardsToMove.forEach(function (card) {\n                        var node = snNetwork.nodes.find(function (n) { return n.id === card.currentNode; });\n                        if (node.type === 'comparator') {\n                            if (processedComparators[card.currentNode]) return;\n                            processedComparators[card.currentNode] = true;\n                        }\n                        snProcessCardMove(card);\n                    });\n\n                    snGame.cards.forEach(function (c) { c.justArrived = false; });\n\n                    setTimeout(runAutoPlayLoop, snGetDelay());\n                }\n\n                if (snGame.finished === snGame.networkSize) {\n                    snRestartGame();\n                    setTimeout(function () {\n                        snInitGame(true);\n                        setTimeout(startAutoPlay, 300);\n                    }, 100);\n                } else if (!snGame.active) {\n                    snInitGame(false);\n                    setTimeout(startAutoPlay, 300);\n                } else {\n                    startAutoPlay();\n                }\n            };\n\n            function snSleep(ms) {\n                return new Promise(function (resolve) { setTimeout(resolve, ms); });\n            }\n\n            function snShowMsg(text, type) {\n                var box = document.getElementById('snMessageBox');\n                box.textContent = text;\n                box.className = 'sn-message-box ' + type;\n                box.style.display = 'block';\n            }\n\n            function snHideMsg() {\n                document.getElementById('snMessageBox').style.display = 'none';\n            }\n\n            function snUpdateStats() {\n                document.getElementById('snMoves').textContent = snGame.moves;\n                document.getElementById('snProgress').textContent = snGame.finished + '\/' + snGame.networkSize;\n            }\n\n            \/\/ Initialize\n            function snInit() {\n                snCanvas = document.getElementById('snCanvas');\n                snCtx = snCanvas.getContext('2d');\n                snArea = document.getElementById('snNetworkArea');\n\n                snAdjustCanvas();\n                snDrawNetwork();\n\n                window.addEventListener('resize', function () {\n                    snAdjustCanvas();\n                    snDrawNetwork();\n\n                    snGame.cards.forEach(function (card) {\n                        var node = snNetwork.nodes.find(function (n) { return n.id === card.currentNode; });\n                        var pos = snGetPosition(node);\n                        card.element.style.left = (pos.x - 20) + 'px';\n                        card.element.style.top = (pos.y - 20) + 'px';\n                    });\n                });\n            }\n\n            \/\/ Wait for DOM\n            if (document.readyState === 'loading') {\n                document.addEventListener('DOMContentLoaded', snInit);\n            } else {\n                snInit();\n            }\n        })();\n    <\/script>\n<\/div>\n\n\n\n<p class=\"\">\u53c3\u8003\u4f86\u6e90\uff1a<a href=\"https:\/\/www.csunplugged.org\/en\/topics\/sorting-networks\/\" target=\"_blank\" rel=\"noopener\">csunplugged sorting networks<\/a><\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n<\/div>\n\n\n\n<p class=\"\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6211\u5011\u90fd\u77e5\u9053\u96fb\u8166\u5f88\u5feb\uff0c\u4f46\u4f60\u77e5\u9053\u96fb\u8166\u8b8a\u5feb\u7684\u79d8\u8a23\u662f\u4ec0\u9ebc\u55ce\uff1f \u4ee5\u524d\u7684\u96fb\u8166\u50cf\u662f\u4e00\u500b\u5eda\u5e2b\u53ea\u6709\u4e00\u500b\u7210\u5b50\uff0c\u716e\u5b8c\u6e6f\u624d\u80fd\u7092\u83dc\uff08\u9019\u53eb [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":751,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","footnotes":""},"categories":[9,18],"tags":[],"class_list":["post-744","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cs-unplugged","category-algorithms"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/learndeeplytw.com\/en\/wp-json\/wp\/v2\/posts\/744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/learndeeplytw.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/learndeeplytw.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/learndeeplytw.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/learndeeplytw.com\/en\/wp-json\/wp\/v2\/comments?post=744"}],"version-history":[{"count":11,"href":"https:\/\/learndeeplytw.com\/en\/wp-json\/wp\/v2\/posts\/744\/revisions"}],"predecessor-version":[{"id":883,"href":"https:\/\/learndeeplytw.com\/en\/wp-json\/wp\/v2\/posts\/744\/revisions\/883"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/learndeeplytw.com\/en\/wp-json\/wp\/v2\/media\/751"}],"wp:attachment":[{"href":"https:\/\/learndeeplytw.com\/en\/wp-json\/wp\/v2\/media?parent=744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/learndeeplytw.com\/en\/wp-json\/wp\/v2\/categories?post=744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/learndeeplytw.com\/en\/wp-json\/wp\/v2\/tags?post=744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}