[{"data":1,"prerenderedAt":16947},["ShallowReactive",2],{"search-navigation":3,"fundamentals-all":961},[4,54],{"title":5,"path":6,"stem":7,"children":8,"page":53},"Fundamentals","\u002Ffundamentals","fundamentals",[9,13,17,21,25,29,33,37,41,45,49],{"title":10,"path":11,"stem":12},"Ký hiệu Big-O và các lớp tăng trưởng","\u002Ffundamentals\u002Fbig-o-notation","fundamentals\u002Fbig-o-notation",{"title":14,"path":15,"stem":16},"Chiều dữ liệu và chiều tính toán","\u002Ffundamentals\u002Fchieu-du-lieu-va-tinh-toan","fundamentals\u002Fchieu-du-lieu-va-tinh-toan",{"title":18,"path":19,"stem":20},"Đệ quy: tư duy và cái giá","\u002Ffundamentals\u002Fde-quy","fundamentals\u002Fde-quy",{"title":22,"path":23,"stem":24},"Giải thuật ngẫu nhiên và độ chính xác","\u002Ffundamentals\u002Fgiai-thuat-ngau-nhien-va-do-chinh-xac","fundamentals\u002Fgiai-thuat-ngau-nhien-va-do-chinh-xac",{"title":26,"path":27,"stem":28},"Nguyên lý thiết kế hướng đối tượng","\u002Ffundamentals\u002Fnguyen-ly-thiet-ke-huong-doi-tuong","fundamentals\u002Fnguyen-ly-thiet-ke-huong-doi-tuong",{"title":30,"path":31,"stem":32},"Nhập môn design patterns","\u002Ffundamentals\u002Fnhap-mon-design-patterns","fundamentals\u002Fnhap-mon-design-patterns",{"title":34,"path":35,"stem":36},"P, NP và độ khó bài toán","\u002Ffundamentals\u002Fp-np-va-do-kho","fundamentals\u002Fp-np-va-do-kho",{"title":38,"path":39,"stem":40},"Mô hình RAM và chi phí tính toán","\u002Ffundamentals\u002Fram-model-va-chi-phi","fundamentals\u002Fram-model-va-chi-phi",{"title":42,"path":43,"stem":44},"Thiết kế và kiểm chứng thuật toán","\u002Ffundamentals\u002Fthiet-ke-va-kiem-chung-thuat-toan","fundamentals\u002Fthiet-ke-va-kiem-chung-thuat-toan",{"title":46,"path":47,"stem":48},"Thuật toán và môi trường phát triển","\u002Ffundamentals\u002Fthuat-toan-moi-truong-phat-trien","fundamentals\u002Fthuat-toan-moi-truong-phat-trien",{"title":50,"path":51,"stem":52},"Độ phức tạp thời gian và không gian","\u002Ffundamentals\u002Ftime-space-complexity","fundamentals\u002Ftime-space-complexity",false,{"title":55,"path":56,"stem":57,"children":58,"page":53},"Challenges","\u002Fchallenges","challenges",[59,64,69,74,79,84,89,94,99,104,109,114,119,124,129,134,139,144,149,154,159,164,169,174,179,184,189,194,199,204,209,214,219,224,229,234,239,244,249,254,259,264,269,274,279,284,289,294,299,304,309,314,319,324,329,334,339,344,349,354,359,364,369,374,379,384,389,394,399,404,409,414,419,424,429,434,439,444,449,454,459,464,469,474,479,484,489,494,499,504,509,514,519,524,529,534,539,544,549,554,559,564,569,574,579,584,589,594,599,604,609,614,619,624,629,634,639,644,649,654,659,664,669,674,679,684,689,694,699,704,709,714,719,724,729,734,739,744,749,754,759,764,769,774,779,786,791,796,801,806,811,816,821,826,831,836,841,846,851,856,861,866,871,876,881,886,891,896,901,906,911,916,921,926,931,936,941,946,951,956],{"title":60,"path":61,"stem":62,"day":63},"Dynamic Array: mảng động và cách tự cài đặt","\u002Fchallenges\u002Fmang-va-danh-sach","challenges\u002F1.mang-va-danh-sach",1,{"title":65,"path":66,"stem":67,"day":68},"Linked list đơn, đôi và so sánh với mảng","\u002Fchallenges\u002Flinked-list","challenges\u002F2.linked-list",2,{"title":70,"path":71,"stem":72,"day":73},"SOLID, Open-Closed và Dependency Inversion thực hành","\u002Fchallenges\u002Fsolid-thuc-hanh","challenges\u002F3.solid-thuc-hanh",3,{"title":75,"path":76,"stem":77,"day":78},"Stack, queue, deque: LIFO, FIFO và ứng dụng","\u002Fchallenges\u002Fstack-va-queue","challenges\u002F4.stack-va-queue",4,{"title":80,"path":81,"stem":82,"day":83},"Dictionary, set và ý tưởng băm","\u002Fchallenges\u002Fdictionary-va-set","challenges\u002F5.dictionary-va-set",5,{"title":85,"path":86,"stem":87,"day":88},"Strategy: đóng gói họ thuật toán bay và kêu của vịt","\u002Fchallenges\u002Fstrategy-pattern","challenges\u002F6.strategy-pattern",6,{"title":90,"path":91,"stem":92,"day":93},"Cây và binary search tree: thuật ngữ và bất biến","\u002Fchallenges\u002Fcay-va-bst","challenges\u002F7.cay-va-bst",7,{"title":95,"path":96,"stem":97,"day":98},"Thực hành đệ quy: base case, trace và memo","\u002Fchallenges\u002Fde-quy-thuc-hanh","challenges\u002F8.de-quy-thuc-hanh",8,{"title":100,"path":101,"stem":102,"day":103},"Observer: publisher-subscriber và loose coupling","\u002Fchallenges\u002Fobserver-co-ban","challenges\u002F9.observer-co-ban",9,{"title":105,"path":106,"stem":107,"day":108},"Bộ ba sắp xếp O(n²): bubble, selection, insertion","\u002Fchallenges\u002Fsap-xep-co-ban","challenges\u002F10.sap-xep-co-ban",10,{"title":110,"path":111,"stem":112,"day":113},"Sắp xếp hiệu quả: merge, shell, quick và cách chọn","\u002Fchallenges\u002Fsap-xep-hieu-qua","challenges\u002F11.sap-xep-hieu-qua",11,{"title":115,"path":116,"stem":117,"day":118},"Decorator: Starbuzz Coffee và chuỗi bọc","\u002Fchallenges\u002Fdecorator-co-ban","challenges\u002F12.decorator-co-ban",12,{"title":120,"path":121,"stem":122,"day":123},"Tìm kiếm: linear, binary và interpolation","\u002Fchallenges\u002Ftim-kiem-co-ban","challenges\u002F13.tim-kiem-co-ban",13,{"title":125,"path":126,"stem":127,"day":128},"Ma trận và bảng dữ liệu trong thuật toán","\u002Fchallenges\u002Fma-tran-va-du-lieu-bang","challenges\u002F14.ma-tran-va-du-lieu-bang",14,{"title":130,"path":131,"stem":132,"day":133},"Observer nâng cao: pull vs push và trạm thời tiết","\u002Fchallenges\u002Fobserver-nang-cao","challenges\u002F15.observer-nang-cao",15,{"title":135,"path":136,"stem":137,"day":138},"Brute-force và greedy nhập môn qua TSP","\u002Fchallenges\u002Fbrute-force-va-greedy","challenges\u002F16.brute-force-va-greedy",16,{"title":140,"path":141,"stem":142,"day":143},"Quy hoạch động: bài toán con gối nhau và memo","\u002Fchallenges\u002Fquy-hoach-dong-nhap-mon","challenges\u002F17.quy-hoach-dong-nhap-mon",17,{"title":145,"path":146,"stem":147,"day":148},"Simple Factory: đóng gói khởi tạo đối tượng pizza","\u002Fchallenges\u002Fsimple-factory","challenges\u002F18.simple-factory",18,{"title":150,"path":151,"stem":152,"day":153},"Singleton: Chocolate Factory và an toàn đa luồng","\u002Fchallenges\u002Fsingleton-pattern","challenges\u002F19.singleton-pattern",19,{"title":155,"path":156,"stem":157,"day":158},"Adapter: vịt-gà tây và object vs class adapter","\u002Fchallenges\u002Fadapter-pattern","challenges\u002F20.adapter-pattern",20,{"title":160,"path":161,"stem":162,"day":163},"Mini project 1: benchmark sắp xếp và cấu trúc cơ bản","\u002Fchallenges\u002Fmini-project-sort","challenges\u002F21.mini-project-sort",21,{"title":165,"path":166,"stem":167,"day":168},"Học không giám sát - vòng đời, khoảng cách, phân khúc","\u002Fchallenges\u002Funsupervised-tong-quan","challenges\u002F22.unsupervised-tong-quan",22,{"title":170,"path":171,"stem":172,"day":173},"Priority queue và binary heap: API và biểu diễn mảng","\u002Fchallenges\u002Fpriority-queue-va-heap","challenges\u002F23.priority-queue-va-heap",23,{"title":175,"path":176,"stem":177,"day":178},"Thao tác heap: BubbleUp, PushDown, Heapify, Top, Update","\u002Fchallenges\u002Fheap-operations","challenges\u002F24.heap-operations",24,{"title":180,"path":181,"stem":182,"day":183},"Factory Method: framework và creator song song product","\u002Fchallenges\u002Ffactory-method","challenges\u002F25.factory-method",25,{"title":185,"path":186,"stem":187,"day":188},"D-ary heap, branching factor và bài toán top-K","\u002Fchallenges\u002Fd-ary-heap-va-topk","challenges\u002F26.d-ary-heap-va-topk",26,{"title":190,"path":191,"stem":192,"day":193},"Mã Huffman: nén tham lam bằng heap","\u002Fchallenges\u002Fma-huffman","challenges\u002F27.ma-huffman",27,{"title":195,"path":196,"stem":197,"day":198},"Command: remote control và khe cắm lệnh","\u002Fchallenges\u002Fcommand-co-ban","challenges\u002F28.command-co-ban",28,{"title":200,"path":201,"stem":202,"day":203},"Treap: BST kết hợp heap và phép xoay","\u002Fchallenges\u002Ftreap-co-ban","challenges\u002F29.treap-co-ban",29,{"title":205,"path":206,"stem":207,"day":208},"Bloom filter: cơ chế bit, false positive và ứng dụng","\u002Fchallenges\u002Fbo-loc-bloom","challenges\u002F30.bo-loc-bloom",30,{"title":210,"path":211,"stem":212,"day":213},"Facade: rạp hát tại gia và Least Knowledge","\u002Fchallenges\u002Ffacade-pattern","challenges\u002F31.facade-pattern",31,{"title":215,"path":216,"stem":217,"day":218},"Disjoint set: bài toán distinct subsets và cài đặt naive","\u002Fchallenges\u002Fdisjoint-set-co-ban","challenges\u002F32.disjoint-set-co-ban",32,{"title":220,"path":221,"stem":222,"day":223},"Union-Find tối ưu và Kruskal tìm cây khung","\u002Fchallenges\u002Funion-find-va-kruskal","challenges\u002F33.union-find-va-kruskal",33,{"title":225,"path":226,"stem":227,"day":228},"Template Method: khung pha chế và Hollywood principle","\u002Fchallenges\u002Ftemplate-method","challenges\u002F34.template-method",34,{"title":230,"path":231,"stem":232,"day":233},"Trie: nút, cạnh, search, insert, remove, prefix","\u002Fchallenges\u002Ftrie-co-ban","challenges\u002F35.trie-co-ban",35,{"title":235,"path":236,"stem":237,"day":238},"Radix trie nén cạnh và ứng dụng autocomplete, spell-check","\u002Fchallenges\u002Fradix-trie-va-ung-dung","challenges\u002F36.radix-trie-va-ung-dung",36,{"title":240,"path":241,"stem":242,"day":243},"Iterator: sáp nhập quán ăn và single responsibility","\u002Fchallenges\u002Fiterator-pattern","challenges\u002F37.iterator-pattern",37,{"title":245,"path":246,"stem":247,"day":248},"Hash table nâng cao: hàm băm và xử lý xung đột","\u002Fchallenges\u002Fhash-table-nang-cao","challenges\u002F38.hash-table-nang-cao",38,{"title":250,"path":251,"stem":252,"day":253},"LRU cache: thứ tự thời gian và đuổi dữ liệu cũ","\u002Fchallenges\u002Flru-cache","challenges\u002F39.lru-cache",39,{"title":255,"path":256,"stem":257,"day":258},"Biểu diễn đồ thị và BFS tìm đường ngắn nhất","\u002Fchallenges\u002Fdo-thi-va-bfs","challenges\u002F40.do-thi-va-bfs",40,{"title":260,"path":261,"stem":262,"day":263},"DFS, ngăn xếp và so sánh với BFS","\u002Fchallenges\u002Fdfs-va-so-sanh","challenges\u002F41.dfs-va-so-sanh",41,{"title":265,"path":266,"stem":267,"day":268},"Dijkstra với heap cho đồ thị có trọng số","\u002Fchallenges\u002Fdijkstra-voi-heap","challenges\u002F42.dijkstra-voi-heap",42,{"title":270,"path":271,"stem":272,"day":273},"A* heuristic và Prim cây khung nhỏ nhất","\u002Fchallenges\u002Fa-star-va-prim","challenges\u002F43.a-star-va-prim",43,{"title":275,"path":276,"stem":277,"day":278},"Egonet và centrality - degree, betweenness, closeness, eigenvector","\u002Fchallenges\u002Fcentrality-va-egonet","challenges\u002F44.centrality-va-egonet",44,{"title":280,"path":281,"stem":282,"day":283},"K-d tree - luân phiên chiều, bất biến và cân bằng","\u002Fchallenges\u002Fkd-tree-co-ban","challenges\u002F45.kd-tree-co-ban",45,{"title":285,"path":286,"stem":287,"day":288},"Ứng dụng NN - nearest hub, giảm màu ảnh, hạt vật lý","\u002Fchallenges\u002Fung-dung-nn-search","challenges\u002F46.ung-dung-nn-search",46,{"title":290,"path":291,"stem":292,"day":293},"K-means - khởi tạo, hội tụ và curse of dimensionality","\u002Fchallenges\u002Fkmeans","challenges\u002F47.kmeans",47,{"title":295,"path":296,"stem":297,"day":298},"DBSCAN - density-reachable, lõi, biên, nhiễu","\u002Fchallenges\u002Fdbscan","challenges\u002F48.dbscan",48,{"title":300,"path":301,"stem":302,"day":303},"Đánh giá clustering - silhouette và diễn giải","\u002Fchallenges\u002Fdanh-gia-clustering","challenges\u002F49.danh-gia-clustering",49,{"title":305,"path":306,"stem":307,"day":308},"MapReduce - map, reduce qua ví dụ Donald Duck","\u002Fchallenges\u002Fmapreduce-co-ban","challenges\u002F50.mapreduce-co-ban",50,{"title":310,"path":311,"stem":312,"day":313},"Luật giỏ hàng - Apriori và FP-growth","\u002Fchallenges\u002Fluat-gio-hang","challenges\u002F51.luat-gio-hang",51,{"title":315,"path":316,"stem":317,"day":318},"Học có giám sát - pipeline, scaling và phân loại bài toán","\u002Fchallenges\u002Fsupervised-tong-quan","challenges\u002F52.supervised-tong-quan",52,{"title":320,"path":321,"stem":322,"day":323},"Decision tree - split, impurity và pruning","\u002Fchallenges\u002Fcay-quyet-dinh","challenges\u002F53.cay-quyet-dinh",53,{"title":325,"path":326,"stem":327,"day":328},"Naive Bayes và mô hình xác suất cho text","\u002Fchallenges\u002Fnaive-bayes","challenges\u002F54.naive-bayes",54,{"title":330,"path":331,"stem":332,"day":333},"Hồi quy tuyến tính, bội và logistic","\u002Fchallenges\u002Fhoi-quy","challenges\u002F55.hoi-quy",55,{"title":335,"path":336,"stem":337,"day":338},"Đánh giá mô hình - confusion matrix, precision, recall, overfitting","\u002Fchallenges\u002Fdanh-gia-mo-hinh","challenges\u002F56.danh-gia-mo-hinh",56,{"title":340,"path":341,"stem":342,"day":343},"NLP cơ bản: tokenize, BoW và TF-IDF","\u002Fchallenges\u002Fnlp-co-ban","challenges\u002F57.nlp-co-ban",57,{"title":345,"path":346,"stem":347,"day":348},"Gợi ý content-based và đồng xuất hiện","\u002Fchallenges\u002Frecsys-content","challenges\u002F58.recsys-content",58,{"title":350,"path":351,"stem":352,"day":353},"Collaborative filtering user-based và item-based","\u002Fchallenges\u002Frecsys-collaborative","challenges\u002F59.recsys-collaborative",59,{"title":355,"path":356,"stem":357,"day":358},"CAP theorem và lưu trữ phân tán","\u002Fchallenges\u002Fcap-va-luu-tru","challenges\u002F60.cap-va-luu-tru",60,{"title":360,"path":361,"stem":362,"day":363},"Nén dữ liệu: LZ77 và định dạng nâng cao","\u002Fchallenges\u002Fnen-du-lieu","challenges\u002F61.nen-du-lieu",61,{"title":365,"path":366,"stem":367,"day":368},"Mật mã cơ bản: thay thế, hoán vị, băm, đối xứng","\u002Fchallenges\u002Fcrypto-co-ban","challenges\u002F62.crypto-co-ban",62,{"title":370,"path":371,"stem":372,"day":373},"Explainability: hộp trắng, hộp đen và giảm bias","\u002Fchallenges\u002Fexplainability-dao-duc","challenges\u002F63.explainability-dao-duc",63,{"title":375,"path":376,"stem":377,"day":378},"Tổ chức patterns C\u002FS\u002FB và anti-patterns","\u002Fchallenges\u002Fto-chuc-anti-patterns","challenges\u002F64.to-chuc-anti-patterns",64,{"title":380,"path":381,"stem":382,"day":383},"Treap nâng cao: insert, delete và cân bằng kỳ vọng","\u002Fchallenges\u002Ftreap-nang-cao","challenges\u002F65.treap-nang-cao",65,{"title":385,"path":386,"stem":387,"day":388},"LFU, freshness, async và khóa đồng bộ trong cache","\u002Fchallenges\u002Flfu-va-chien-luoc-cache","challenges\u002F66.lfu-va-chien-luoc-cache",66,{"title":390,"path":391,"stem":392,"day":393},"Composite: thực đơn cây, trong suốt vs an toàn","\u002Fchallenges\u002Fcomposite-pattern","challenges\u002F67.composite-pattern",67,{"title":395,"path":396,"stem":397,"day":398},"Kết hợp Iterator và Composite duyệt cây đệ quy","\u002Fchallenges\u002Fiterator-composite","challenges\u002F68.iterator-composite",68,{"title":400,"path":401,"stem":402,"day":403},"Nearest neighbor và region search trên k-d tree","\u002Fchallenges\u002Fkd-tree-nang-cao","challenges\u002F69.kd-tree-nang-cao",69,{"title":405,"path":406,"stem":407,"day":408},"Bài toán nearest neighbor và R-tree indexing","\u002Fchallenges\u002Fnn-search-va-rtree","challenges\u002F70.nn-search-va-rtree",70,{"title":410,"path":411,"stem":412,"day":413},"Decorator thực tế: thư viện vào-ra và tự viết decorator","\u002Fchallenges\u002Fdecorator-io","challenges\u002F71.decorator-io",71,{"title":415,"path":416,"stem":417,"day":418},"Case study phát hiện gian lận bằng SNA và watchtower","\u002Fchallenges\u002Fgian-lan-watchtower","challenges\u002F72.gian-lan-watchtower",72,{"title":420,"path":421,"stem":422,"day":423},"PageRank lan truyền điểm số và damping","\u002Fchallenges\u002Fpagerank","challenges\u002F73.pagerank",73,{"title":425,"path":426,"stem":427,"day":428},"Abstract Factory: họ nguyên liệu và vùng miền","\u002Fchallenges\u002Fabstract-factory","challenges\u002F74.abstract-factory",74,{"title":430,"path":431,"stem":432,"day":433},"So sánh 3 factory và nghịch lý mở rộng","\u002Fchallenges\u002Ffactory-so-sanh","challenges\u002F75.factory-so-sanh",75,{"title":435,"path":436,"stem":437,"day":438},"Quy hoạch tuyến tính - hàm mục tiêu, ràng buộc, capacity planning","\u002Fchallenges\u002Fquy-hoach-tuyen-tinh","challenges\u002F76.quy-hoach-tuyen-tinh",76,{"title":440,"path":441,"stem":442,"day":443},"Quy hoạch động nâng cao - overlapping, tái cấu trúc nghiệm","\u002Fchallenges\u002Fquy-hoach-dong-nang-cao","challenges\u002F77.quy-hoach-dong-nang-cao",77,{"title":445,"path":446,"stem":447,"day":448},"TSP dưới 3 chiến lược - brute-force, greedy, DP","\u002Fchallenges\u002Ftsp-ba-chien-luoc","challenges\u002F78.tsp-ba-chien-luoc",78,{"title":450,"path":451,"stem":452,"day":453},"Đồ thị phẳng: nhúng và định lý Kuratowski","\u002Fchallenges\u002Fdo-thi-phang","challenges\u002F79.do-thi-phang",79,{"title":455,"path":456,"stem":457,"day":458},"Mini project 2 - tuyến giao hàng BFS, DFS, Dijkstra","\u002Fchallenges\u002Fmini-project-graph","challenges\u002F80.mini-project-graph",80,{"title":460,"path":461,"stem":462,"day":463},"Command: undo bằng state và macro mở tiệc","\u002Fchallenges\u002Fcommand-undo-macro","challenges\u002F81.command-undo-macro",81,{"title":465,"path":466,"stem":467,"day":468},"Command thực tế: hàng đợi, logging và ActionListener","\u002Fchallenges\u002Fcommand-queue-log","challenges\u002F82.command-queue-log",82,{"title":470,"path":471,"stem":472,"day":473},"OPTICS và phân cụm phân cấp","\u002Fchallenges\u002Foptics-phan-cap","challenges\u002F83.optics-phan-cap",83,{"title":475,"path":476,"stem":477,"day":478},"Giảm chiều PCA - vector riêng và PC1, PC2","\u002Fchallenges\u002Fgiam-chieu-pca","challenges\u002F84.giam-chieu-pca",84,{"title":480,"path":481,"stem":482,"day":483},"State: máy bán kẹo và ủy thác trạng thái","\u002Fchallenges\u002Fstate-co-ban","challenges\u002F85.state-co-ban",85,{"title":485,"path":486,"stem":487,"day":488},"State nâng cao: game 1\u002F10 và State vs Strategy","\u002Fchallenges\u002Fstate-nang-cao","challenges\u002F86.state-nang-cao",86,{"title":490,"path":491,"stem":492,"day":493},"MapReduce cho K-means và canopy clustering","\u002Fchallenges\u002Fmapreduce-kmeans-canopy","challenges\u002F87.mapreduce-kmeans-canopy",87,{"title":495,"path":496,"stem":497,"day":498},"MapReduce DBSCAN và khởi tạo centroid","\u002Fchallenges\u002Fmapreduce-dbscan","challenges\u002F88.mapreduce-dbscan",88,{"title":500,"path":501,"stem":502,"day":503},"Random forest, GBM và XGBoost","\u002Fchallenges\u002Frung-va-boosting","challenges\u002F89.rung-va-boosting",89,{"title":505,"path":506,"stem":507,"day":508},"SVM - margin, kernel và dữ liệu phi tuyến","\u002Fchallenges\u002Fsvm","challenges\u002F90.svm",90,{"title":510,"path":511,"stem":512,"day":513},"Matrix factorization, cold start và mô hình lai","\u002Fchallenges\u002Frecsys-nang-cao","challenges\u002F91.recsys-nang-cao",91,{"title":515,"path":516,"stem":517,"day":518},"Bridge và Builder còn lại nhưng quan trọng","\u002Fchallenges\u002Fbridge-builder","challenges\u002F92.bridge-builder",92,{"title":520,"path":521,"stem":522,"day":523},"Perceptron, XOR và kiến trúc mạng noron","\u002Fchallenges\u002Fperceptron-mang-noron","challenges\u002F93.perceptron-mang-noron",93,{"title":525,"path":526,"stem":527,"day":528},"Huấn luyện mạng: loss, backprop và hàm kích hoạt","\u002Fchallenges\u002Fhuan-luyen-mang","challenges\u002F94.huan-luyen-mang",94,{"title":530,"path":531,"stem":532,"day":533},"Mediator, Memento và Prototype","\u002Fchallenges\u002Fmediator-memento-prototype","challenges\u002F95.mediator-memento-prototype",95,{"title":535,"path":536,"stem":537,"day":538},"CNN: tích chập và gộp cho ảnh","\u002Fchallenges\u002Fcnn","challenges\u002F96.cnn",96,{"title":540,"path":541,"stem":542,"day":543},"GAN và transfer learning","\u002Fchallenges\u002Fgan-va-transfer","challenges\u002F97.gan-va-transfer",97,{"title":545,"path":546,"stem":547,"day":548},"Proxy: truy cập từ xa và virtual ảnh bìa","\u002Fchallenges\u002Fproxy-remote-virtual","challenges\u002F98.proxy-remote-virtual",98,{"title":550,"path":551,"stem":552,"day":553},"Word embedding và sentiment bằng Naive Bayes","\u002Fchallenges\u002Fembedding-sentiment","challenges\u002F99.embedding-sentiment",99,{"title":555,"path":556,"stem":557,"day":558},"Mô hình chuỗi và RNN với BPTT","\u002Fchallenges\u002Frnn-chuoi","challenges\u002F100.rnn-chuoi",100,{"title":560,"path":561,"stem":562,"day":563},"LSTM và GRU: cổng và trí nhớ dài hạn","\u002Fchallenges\u002Flstm-gru","challenges\u002F101.lstm-gru",101,{"title":565,"path":566,"stem":567,"day":568},"Attention, self-attention và Transformer","\u002Fchallenges\u002Fattention-transformer","challenges\u002F102.attention-transformer",102,{"title":570,"path":571,"stem":572,"day":573},"GPT vs BERT và Seq2Seq bottleneck","\u002Fchallenges\u002Fgpt-bert","challenges\u002F103.gpt-bert",103,{"title":575,"path":576,"stem":577,"day":578},"Chain of Responsibility và Flyweight","\u002Fchallenges\u002Fchain-flyweight","challenges\u002F104.chain-flyweight",104,{"title":580,"path":581,"stem":582,"day":583},"Stream processing thời gian thực và StreamSensing","\u002Fchallenges\u002Fstream-processing","challenges\u002F105.stream-processing",105,{"title":585,"path":586,"stem":587,"day":588},"Bất đối xứng, PKI, blockchain và chống MITM","\u002Fchallenges\u002Fcrypto-nang-cao","challenges\u002F106.crypto-nang-cao",106,{"title":590,"path":591,"stem":592,"day":593},"MVC: compound pattern điều khiển nhịp DJ","\u002Fchallenges\u002Fmvc-compound","challenges\u002F107.mvc-compound",107,{"title":595,"path":596,"stem":597,"day":598},"Đàn vịt compound: 4 patterns trong một app","\u002Fchallenges\u002Fcompound-ducks","challenges\u002F108.compound-ducks",108,{"title":600,"path":601,"stem":602,"day":603},"Spark, in-memory và elasticity hệ thống lớn","\u002Fchallenges\u002Fspark-large-scale","challenges\u002F109.spark-large-scale",109,{"title":605,"path":606,"stem":607,"day":608},"Hiệu năng tính toán: Amdahl, CUDA và data locality","\u002Fchallenges\u002Fhieu-nang-tinh-toan","challenges\u002F110.hieu-nang-tinh-toan",110,{"title":610,"path":611,"stem":612,"day":613},"Gradient descent: cost, step và local minima","\u002Fchallenges\u002Fgradient-descent","challenges\u002F111.gradient-descent",111,{"title":615,"path":616,"stem":617,"day":618},"Gradient cho hồi quy tuyến tính và graph embedding","\u002Fchallenges\u002Fgradient-ung-dung","challenges\u002F112.gradient-ung-dung",112,{"title":620,"path":621,"stem":622,"day":623},"Simulated annealing: leo lên để xuống đáy","\u002Fchallenges\u002Fsimulated-annealing","challenges\u002F113.simulated-annealing",113,{"title":625,"path":626,"stem":627,"day":628},"SA cho TSP: transition, 2-opt và tỉa cành","\u002Fchallenges\u002Fsa-tsp","challenges\u002F114.sa-tsp",114,{"title":630,"path":631,"stem":632,"day":633},"Giải thuật di truyền: chromosome, fitness, selection","\u002Fchallenges\u002Fgenetic-co-ban","challenges\u002F115.genetic-co-ban",115,{"title":635,"path":636,"stem":637,"day":638},"Project: refactor SimUDuck bằng Strategy và Observer","\u002Fchallenges\u002Fproject-simuduck","challenges\u002F116.project-simuduck",116,{"title":640,"path":641,"stem":642,"day":643},"Project: Pizza Store bằng Factory và Decorator","\u002Fchallenges\u002Fproject-pizza","challenges\u002F117.project-pizza",117,{"title":645,"path":646,"stem":647,"day":648},"Kể chuyện patterns và SOLID khi phỏng vấn","\u002Fchallenges\u002Fpatterns-phong-van","challenges\u002F118.patterns-phong-van",118,{"title":650,"path":651,"stem":652,"day":653},"SS-tree và similarity search gần đúng cho ảnh","\u002Fchallenges\u002Fss-tree-similarity","challenges\u002F119.ss-tree-similarity",119,{"title":655,"path":656,"stem":657,"day":658},"Planarity testing và crossing number tối thiểu","\u002Fchallenges\u002Fplanarity-crossing","challenges\u002F120.planarity-crossing",120,{"title":660,"path":661,"stem":662,"day":663},"SA vẽ đồ thị: force-directed và min edge crossing","\u002Fchallenges\u002Fsa-graph-drawing","challenges\u002F121.sa-graph-drawing",121,{"title":665,"path":666,"stem":667,"day":668},"Lai, đột biến và GA cho TSP, vertex cover","\u002Fchallenges\u002Fgenetic-nang-cao","challenges\u002F122.genetic-nang-cao",122,{"title":670,"path":671,"stem":672,"day":673},"Dynamic proxy, protection proxy và vườn thú proxy","\u002Fchallenges\u002Fproxy-dynamic","challenges\u002F123.proxy-dynamic",123,{"title":675,"path":676,"stem":677,"day":678},"Interpreter và Visitor cho ngôn ngữ và cấu trúc","\u002Fchallenges\u002Finterpreter-visitor","challenges\u002F124.interpreter-visitor",124,{"title":680,"path":681,"stem":682,"day":683},"Project: rạp hát Facade và Command macro","\u002Fchallenges\u002Fproject-hometheater","challenges\u002F125.project-hometheater",125,{"title":685,"path":686,"stem":687,"day":688},"App: autocomplete có Trie và cache LRU","\u002Fchallenges\u002Fapp-autocomplete","challenges\u002F126.app-autocomplete",126,{"title":690,"path":691,"stem":692,"day":693},"App: mini search engine với Trie, ranking và Bloom","\u002Fchallenges\u002Fapp-search-engine","challenges\u002F127.app-search-engine",127,{"title":695,"path":696,"stem":697,"day":698},"App: rate limiter bằng cache và hàng đợi","\u002Fchallenges\u002Fapp-rate-limiter","challenges\u002F128.app-rate-limiter",128,{"title":700,"path":701,"stem":702,"day":703},"App: top-K trên stream bằng heap","\u002Fchallenges\u002Fapp-topk-stream","challenges\u002F129.app-topk-stream",129,{"title":705,"path":706,"stem":707,"day":708},"App: pipeline phát hiện gian lận bằng đồ thị","\u002Fchallenges\u002Fapp-fraud-pipeline","challenges\u002F130.app-fraud-pipeline",130,{"title":710,"path":711,"stem":712,"day":713},"App: recommendation engine end-to-end","\u002Fchallenges\u002Fapp-recsys-pipeline","challenges\u002F131.app-recsys-pipeline",131,{"title":715,"path":716,"stem":717,"day":718},"App: pipeline clustering từ K-means tới OPTICS","\u002Fchallenges\u002Fapp-clustering-pipeline","challenges\u002F132.app-clustering-pipeline",132,{"title":720,"path":721,"stem":722,"day":723},"App: wordcount MapReduce và Spark job","\u002Fchallenges\u002Fapp-mapreduce-spark","challenges\u002F133.app-mapreduce-spark",133,{"title":725,"path":726,"stem":727,"day":728},"App: tuyến giao hàng so sánh BFS, Dijkstra, A*","\u002Fchallenges\u002Fapp-delivery-routes","challenges\u002F134.app-delivery-routes",134,{"title":730,"path":731,"stem":732,"day":733},"App: thiết kế mạng với Prim và Kruskal","\u002Fchallenges\u002Fapp-mst-network","challenges\u002F135.app-mst-network",135,{"title":735,"path":736,"stem":737,"day":738},"App: TSP so găng greedy, SA và GA","\u002Fchallenges\u002Fapp-tsp-showdown","challenges\u002F136.app-tsp-showdown",136,{"title":740,"path":741,"stem":742,"day":743},"App: nhúng và vẽ đồ thị force-directed","\u002Fchallenges\u002Fapp-graph-embedding","challenges\u002F137.app-graph-embedding",137,{"title":745,"path":746,"stem":747,"day":748},"App: tuning siêu tham số với gradient và eval","\u002Fchallenges\u002Fapp-tuning","challenges\u002F138.app-tuning",138,{"title":750,"path":751,"stem":752,"day":753},"App: sentiment từ tokenize tới Naive Bayes","\u002Fchallenges\u002Fapp-sentiment","challenges\u002F139.app-sentiment",139,{"title":755,"path":756,"stem":757,"day":758},"App: tìm ảnh với CNN và similarity search","\u002Fchallenges\u002Fapp-image-search","challenges\u002F140.app-image-search",140,{"title":760,"path":761,"stem":762,"day":763},"App: dự báo chuỗi với RNN và LSTM","\u002Fchallenges\u002Fapp-forecast","challenges\u002F141.app-forecast",141,{"title":765,"path":766,"stem":767,"day":768},"App: chat bảo mật với TLS handshake và PKI","\u002Fchallenges\u002Fapp-secure-chat","challenges\u002F142.app-secure-chat",142,{"title":770,"path":771,"stem":772,"day":773},"App: pipeline batch vs stream và CAP","\u002Fchallenges\u002Fapp-data-pipeline","challenges\u002F143.app-data-pipeline",143,{"title":775,"path":776,"stem":777,"day":778},"App: hệ thống cache LRU, LFU và locks","\u002Fchallenges\u002Fapp-cache-system","challenges\u002F144.app-cache-system",144,{"title":780,"path":781,"stem":782,"children":783,"day":785},"App: index DB với B-tree, hash và Bloom","\u002Fchallenges\u002Fapp-db-index","challenges\u002F145.app-db-index",[784],{"title":780,"path":781,"stem":782,"day":785},145,{"title":787,"path":788,"stem":789,"day":790},"App: spell checker với Trie và độ tương đồng","\u002Fchallenges\u002Fapp-spell-checker","challenges\u002F146.app-spell-checker",146,{"title":792,"path":793,"stem":794,"day":795},"App: AI game kẹo với State và Strategy","\u002Fchallenges\u002Fapp-game-ai","challenges\u002F147.app-game-ai",147,{"title":797,"path":798,"stem":799,"day":800},"App: text editor undo với stack, Command và Memento","\u002Fchallenges\u002Fapp-text-editor","challenges\u002F148.app-text-editor",148,{"title":802,"path":803,"stem":804,"day":805},"App: hệ thống thông báo với Observer và queue","\u002Fchallenges\u002Fapp-notification","challenges\u002F149.app-notification",149,{"title":807,"path":808,"stem":809,"day":810},"Ôn tập tổng hợp: từ sắp xếp tới tối ưu","\u002Fchallenges\u002Fon-tap-tong-hop","challenges\u002F150.on-tap-tong-hop",150,{"title":812,"path":813,"stem":814,"day":815},"Capstone: benchmark sort và graph traversal","\u002Fchallenges\u002Fcapstone-sort-graph","challenges\u002F151.capstone-sort-graph",151,{"title":817,"path":818,"stem":819,"day":820},"Capstone: autocomplete cache LRU và Trie nâng cao","\u002Fchallenges\u002Fcapstone-cache-trie","challenges\u002F152.capstone-cache-trie",152,{"title":822,"path":823,"stem":824,"day":825},"Capstone: clustering pipeline và báo cáo metric","\u002Fchallenges\u002Fcapstone-clustering","challenges\u002F153.capstone-clustering",153,{"title":827,"path":828,"stem":829,"day":830},"Capstone: recsys có đo cold start và sparsity","\u002Fchallenges\u002Fcapstone-recsys","challenges\u002F154.capstone-recsys",154,{"title":832,"path":833,"stem":834,"day":835},"Capstone: hệ thống lớn có mật mã và streaming","\u002Fchallenges\u002Fcapstone-crypto-scale","challenges\u002F155.capstone-crypto-scale",155,{"title":837,"path":838,"stem":839,"day":840},"Capstone: tối ưu TSP và vẽ đồ thị tổng hợp","\u002Fchallenges\u002Fcapstone-optimization","challenges\u002F156.capstone-optimization",156,{"title":842,"path":843,"stem":844,"day":845},"Capstone: SimUDuck refactor toàn diện","\u002Fchallenges\u002Fcapstone-patterns-duck","challenges\u002F157.capstone-patterns-duck",157,{"title":847,"path":848,"stem":849,"day":850},"Capstone: Pizza Store đa vùng và toppings","\u002Fchallenges\u002Fcapstone-patterns-pizza","challenges\u002F158.capstone-patterns-pizza",158,{"title":852,"path":853,"stem":854,"day":855},"Capstone: home theater Facade và macro","\u002Fchallenges\u002Fcapstone-patterns-home","challenges\u002F159.capstone-patterns-home",159,{"title":857,"path":858,"stem":859,"day":860},"Capstone: mạng xã hội mini với graph và feed","\u002Fchallenges\u002Fcapstone-social","challenges\u002F160.capstone-social",160,{"title":862,"path":863,"stem":864,"day":865},"Phỏng vấn 1: array, string và two pointers","\u002Fchallenges\u002Fphong-van-algo-1","challenges\u002F161.phong-van-algo-1",161,{"title":867,"path":868,"stem":869,"day":870},"Phỏng vấn 2: BST, heap và top-k","\u002Fchallenges\u002Fphong-van-algo-2","challenges\u002F162.phong-van-algo-2",162,{"title":872,"path":873,"stem":874,"day":875},"Phỏng vấn 3: BFS, DFS, Dijkstra trên ma trận","\u002Fchallenges\u002Fphong-van-graph","challenges\u002F163.phong-van-graph",163,{"title":877,"path":878,"stem":879,"day":880},"Phỏng vấn 4: DP kinh điển và greedy chứng minh","\u002Fchallenges\u002Fphong-van-dp","challenges\u002F164.phong-van-dp",164,{"title":882,"path":883,"stem":884,"day":885},"Phỏng vấn 5: cache, rate limiter và search","\u002Fchallenges\u002Fphong-van-system","challenges\u002F165.phong-van-system",165,{"title":887,"path":888,"stem":889,"day":890},"Phỏng vấn 6: kể chuyện patterns và SOLID","\u002Fchallenges\u002Fphong-van-patterns","challenges\u002F166.phong-van-patterns",166,{"title":892,"path":893,"stem":894,"day":895},"Dự án cuối 1: đặc tả và chia module","\u002Fchallenges\u002Fdu-an-cuoi-1","challenges\u002F167.du-an-cuoi-1",167,{"title":897,"path":898,"stem":899,"day":900},"Dự án cuối 2: benchmark và profiling","\u002Fchallenges\u002Fdu-an-cuoi-2","challenges\u002F168.du-an-cuoi-2",168,{"title":902,"path":903,"stem":904,"day":905},"Dự án cuối 3: dữ liệu lớn và evaluate","\u002Fchallenges\u002Fdu-an-cuoi-3","challenges\u002F169.du-an-cuoi-3",169,{"title":907,"path":908,"stem":909,"day":910},"Dự án cuối 4: áp dụng patterns và review chéo","\u002Fchallenges\u002Fdu-an-cuoi-4","challenges\u002F170.du-an-cuoi-4",170,{"title":912,"path":913,"stem":914,"day":915},"Tổng kết 180 ngày: bản đồ tri thức","\u002Fchallenges\u002Ftong-ket-180-ngay","challenges\u002F171.tong-ket-180-ngay",171,{"title":917,"path":918,"stem":919,"day":920},"Lộ trình sau 180 ngày: ML, systems, research","\u002Fchallenges\u002Flo-trinh-sau-180","challenges\u002F172.lo-trinh-sau-180",172,{"title":922,"path":923,"stem":924,"day":925},"Checklist năng lực: tự đánh giá 180 kỹ năng","\u002Fchallenges\u002Fchecklist-nang-luc","challenges\u002F173.checklist-nang-luc",173,{"title":927,"path":928,"stem":929,"day":930},"Bộ đề luyện thêm 50 bài tự ra đề","\u002Fchallenges\u002Fbo-de-luyen-them","challenges\u002F174.bo-de-luyen-them",174,{"title":932,"path":933,"stem":934,"day":935},"System design cơ bản: scale, ELB và sharding","\u002Fchallenges\u002Fsystem-design-co-ban","challenges\u002F175.system-design-co-ban",175,{"title":937,"path":938,"stem":939,"day":940},"Đọc whitepaper và viết blog kỹ thuật","\u002Fchallenges\u002Fdoc-paper-viet-blog","challenges\u002F176.doc-paper-viet-blog",176,{"title":942,"path":943,"stem":944,"day":945},"Ngày open source: đọc source và đóng góp","\u002Fchallenges\u002Fopen-source-day","challenges\u002F177.open-source-day",177,{"title":947,"path":948,"stem":949,"day":950},"Mock interview và peer review chéo","\u002Fchallenges\u002Fmock-interview","challenges\u002F178.mock-interview",178,{"title":952,"path":953,"stem":954,"day":955},"Hoàn thiện sản phẩm demo cuối khóa","\u002Fchallenges\u002Fsan-pham-demo","challenges\u002F179.san-pham-demo",179,{"title":957,"path":958,"stem":959,"day":960},"Demo day và tổng kết","\u002Fchallenges\u002Fle-tot-nghiep","challenges\u002F180.le-tot-nghiep",180,[962,9033,9287,10310,11525,11903,12239,13381,14863,15579,16081],{"id":963,"title":10,"body":964,"category":7,"day":9020,"description":9021,"difficulty":9022,"estimatedMinutes":283,"extension":9023,"lastUpdate":9024,"meta":9025,"navigation":9026,"outcomes":9020,"path":11,"prerequisites":9020,"seo":9027,"stem":12,"tags":9028,"__hash__":9032},"fundamentals\u002Ffundamentals\u002Fbig-o-notation.md",{"type":965,"value":966,"toc":9006},"minimark",[967,972,976,979,983,986,989,992,996,1293,1635,1638,1942,2050,2415,2523,2555,2559,2562,2959,2962,2965,2968,3630,3881,3914,3918,3921,4564,4812,4815,4819,4867,4870,4936,5069,5116,5193,5272,5500,5503,5846,6565,6569,6572,6575,6579,6700,6703,6776,6780,6783,6786,6790,6793,6973,7120,7318,7651,7746,8023,8034,8208,8337,8447,8451],[968,969,971],"h2",{"id":970},"_1-tổng-quan","1. Tổng quan",[973,974,975],"p",{},"Hai thuật toán cùng giải một bài toán. Ta không hỏi máy nào chạy nhanh hơn.",[973,977,978],{},"Ta hỏi chi phí tăng nhanh ra sao khi đầu vào lớn dần. Big-O là ngôn ngữ trả lời câu hỏi đó.",[968,980,982],{"id":981},"_2-nguồn-gốc-bachmann-và-ý-tưởng-bậc-tăng-trưởng","2. Nguồn gốc: Bachmann và ý tưởng bậc tăng trưởng",[973,984,985],{},"Paul Bachmann đưa ra ký hiệu O(n) năm 1894. Ý ông rất gọn: bậc tăng của chi phí không vượt bậc của n.",[973,987,988],{},"Thay vì đếm từng phép tính, ta nhìn hình dạng đường cong. Thuật toán A tốn 100 bước, B tốn 10 bước trên mẫu thử.",[973,990,991],{},"Hai con số đó chưa nói lên tương lai. Nhưng nếu A tăng theo bình phương còn B tăng theo n, ta đoán được mọi kích thước đầu vào.",[968,993,995],{"id":994},"_3-định-nghĩa-chặn-trên-và-cặp-hằng-số-c-n0","3. Định nghĩa chặn trên và cặp hằng số c, n0",[973,997,998,999,1069,1070,1131,1132,1203,1204,1247,1248,1292],{},"Nói ",[1000,1001,1004,1038],"span",{"className":1002},[1003],"katex",[1000,1005,1008],{"className":1006},[1007],"katex-mathml",[1009,1010,1012],"math",{"xmlns":1011},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[1013,1014,1015,1033],"semantics",{},[1016,1017,1018,1022,1027,1030],"mrow",{},[1019,1020,1021],"mi",{},"f",[1023,1024,1026],"mo",{"stretchy":1025},"false","(",[1019,1028,1029],{},"n",[1023,1031,1032],{"stretchy":1025},")",[1034,1035,1037],"annotation",{"encoding":1036},"application\u002Fx-tex","f(n)",[1000,1039,1043],{"className":1040,"ariaHidden":1042},[1041],"katex-html","true",[1000,1044,1047,1052,1058,1062,1065],{"className":1045},[1046],"base",[1000,1048],{"className":1049,"style":1051},[1050],"strut","height:1em;vertical-align:-0.25em;",[1000,1053,1021],{"className":1054,"style":1057},[1055,1056],"mord","mathnormal","margin-right:0.1076em;",[1000,1059,1026],{"className":1060},[1061],"mopen",[1000,1063,1029],{"className":1064},[1055,1056],[1000,1066,1032],{"className":1067},[1068],"mclose"," thuộc ",[1000,1071,1073,1101],{"className":1072},[1003],[1000,1074,1076],{"className":1075},[1007],[1009,1077,1078],{"xmlns":1011},[1013,1079,1080,1098],{},[1016,1081,1082,1085,1087,1090,1092,1094,1096],{},[1019,1083,1084],{},"O",[1023,1086,1026],{"stretchy":1025},[1019,1088,1089],{},"g",[1023,1091,1026],{"stretchy":1025},[1019,1093,1029],{},[1023,1095,1032],{"stretchy":1025},[1023,1097,1032],{"stretchy":1025},[1034,1099,1100],{"encoding":1036},"O(g(n))",[1000,1102,1104],{"className":1103,"ariaHidden":1042},[1041],[1000,1105,1107,1110,1114,1117,1121,1124,1127],{"className":1106},[1046],[1000,1108],{"className":1109,"style":1051},[1050],[1000,1111,1084],{"className":1112,"style":1113},[1055,1056],"margin-right:0.0278em;",[1000,1115,1026],{"className":1116},[1061],[1000,1118,1089],{"className":1119,"style":1120},[1055,1056],"margin-right:0.0359em;",[1000,1122,1026],{"className":1123},[1061],[1000,1125,1029],{"className":1126},[1055,1056],[1000,1128,1130],{"className":1129},[1068],"))"," nghĩa là tỉ số ",[1000,1133,1135,1167],{"className":1134},[1003],[1000,1136,1138],{"className":1137},[1007],[1009,1139,1140],{"xmlns":1011},[1013,1141,1142,1164],{},[1016,1143,1144,1146,1148,1150,1152,1156,1158,1160,1162],{},[1019,1145,1021],{},[1023,1147,1026],{"stretchy":1025},[1019,1149,1029],{},[1023,1151,1032],{"stretchy":1025},[1019,1153,1155],{"mathvariant":1154},"normal","\u002F",[1019,1157,1089],{},[1023,1159,1026],{"stretchy":1025},[1019,1161,1029],{},[1023,1163,1032],{"stretchy":1025},[1034,1165,1166],{"encoding":1036},"f(n)\u002Fg(n)",[1000,1168,1170],{"className":1169,"ariaHidden":1042},[1041],[1000,1171,1173,1176,1179,1182,1185,1188,1191,1194,1197,1200],{"className":1172},[1046],[1000,1174],{"className":1175,"style":1051},[1050],[1000,1177,1021],{"className":1178,"style":1057},[1055,1056],[1000,1180,1026],{"className":1181},[1061],[1000,1183,1029],{"className":1184},[1055,1056],[1000,1186,1032],{"className":1187},[1068],[1000,1189,1155],{"className":1190},[1055],[1000,1192,1089],{"className":1193,"style":1120},[1055,1056],[1000,1195,1026],{"className":1196},[1061],[1000,1198,1029],{"className":1199},[1055,1056],[1000,1201,1032],{"className":1202},[1068]," bị chặn khi n lớn dần. Dù đầu vào phình to, ",[1000,1205,1207,1226],{"className":1206},[1003],[1000,1208,1210],{"className":1209},[1007],[1009,1211,1212],{"xmlns":1011},[1013,1213,1214,1224],{},[1016,1215,1216,1218,1220,1222],{},[1019,1217,1021],{},[1023,1219,1026],{"stretchy":1025},[1019,1221,1029],{},[1023,1223,1032],{"stretchy":1025},[1034,1225,1037],{"encoding":1036},[1000,1227,1229],{"className":1228,"ariaHidden":1042},[1041],[1000,1230,1232,1235,1238,1241,1244],{"className":1231},[1046],[1000,1233],{"className":1234,"style":1051},[1050],[1000,1236,1021],{"className":1237,"style":1057},[1055,1056],[1000,1239,1026],{"className":1240},[1061],[1000,1242,1029],{"className":1243},[1055,1056],[1000,1245,1032],{"className":1246},[1068]," không vượt ",[1000,1249,1251,1271],{"className":1250},[1003],[1000,1252,1254],{"className":1253},[1007],[1009,1255,1256],{"xmlns":1011},[1013,1257,1258,1268],{},[1016,1259,1260,1262,1264,1266],{},[1019,1261,1089],{},[1023,1263,1026],{"stretchy":1025},[1019,1265,1029],{},[1023,1267,1032],{"stretchy":1025},[1034,1269,1270],{"encoding":1036},"g(n)",[1000,1272,1274],{"className":1273,"ariaHidden":1042},[1041],[1000,1275,1277,1280,1283,1286,1289],{"className":1276},[1046],[1000,1278],{"className":1279,"style":1051},[1050],[1000,1281,1089],{"className":1282,"style":1120},[1055,1056],[1000,1284,1026],{"className":1285},[1061],[1000,1287,1029],{"className":1288},[1055,1056],[1000,1290,1032],{"className":1291},[1068]," một cách mất kiểm soát.",[973,1294,1295,1296,1069,1474,1549,1550,1634],{},"Ví dụ: ",[1000,1297,1299,1347],{"className":1298},[1003],[1000,1300,1302],{"className":1301},[1007],[1009,1303,1304],{"xmlns":1011},[1013,1305,1306,1344],{},[1016,1307,1308,1310,1312,1314,1316,1319,1323,1331,1334,1337,1339,1341],{},[1019,1309,1021],{},[1023,1311,1026],{"stretchy":1025},[1019,1313,1029],{},[1023,1315,1032],{"stretchy":1025},[1023,1317,1318],{},"=",[1320,1321,1322],"mn",{},"1000",[1324,1325,1326,1328],"msup",{},[1019,1327,1029],{},[1320,1329,1330],{},"2",[1023,1332,1333],{},"+",[1320,1335,1336],{},"100",[1019,1338,1029],{},[1023,1340,1333],{},[1320,1342,1343],{},"10",[1034,1345,1346],{"encoding":1036},"f(n) = 1000n^2 + 100n + 10",[1000,1348,1350,1380,1442,1464],{"className":1349,"ariaHidden":1042},[1041],[1000,1351,1353,1356,1359,1362,1365,1368,1373,1377],{"className":1352},[1046],[1000,1354],{"className":1355,"style":1051},[1050],[1000,1357,1021],{"className":1358,"style":1057},[1055,1056],[1000,1360,1026],{"className":1361},[1061],[1000,1363,1029],{"className":1364},[1055,1056],[1000,1366,1032],{"className":1367},[1068],[1000,1369],{"className":1370,"style":1372},[1371],"mspace","margin-right:0.2778em;",[1000,1374,1318],{"className":1375},[1376],"mrel",[1000,1378],{"className":1379,"style":1372},[1371],[1000,1381,1383,1387,1390,1431,1435,1439],{"className":1382},[1046],[1000,1384],{"className":1385,"style":1386},[1050],"height:0.8974em;vertical-align:-0.0833em;",[1000,1388,1322],{"className":1389},[1055],[1000,1391,1393,1396],{"className":1392},[1055],[1000,1394,1029],{"className":1395},[1055,1056],[1000,1397,1400],{"className":1398},[1399],"msupsub",[1000,1401,1404],{"className":1402},[1403],"vlist-t",[1000,1405,1408],{"className":1406},[1407],"vlist-r",[1000,1409,1413],{"className":1410,"style":1412},[1411],"vlist","height:0.8141em;",[1000,1414,1416,1421],{"style":1415},"top:-3.063em;margin-right:0.05em;",[1000,1417],{"className":1418,"style":1420},[1419],"pstrut","height:2.7em;",[1000,1422,1428],{"className":1423},[1424,1425,1426,1427],"sizing","reset-size6","size3","mtight",[1000,1429,1330],{"className":1430},[1055,1427],[1000,1432],{"className":1433,"style":1434},[1371],"margin-right:0.2222em;",[1000,1436,1333],{"className":1437},[1438],"mbin",[1000,1440],{"className":1441,"style":1434},[1371],[1000,1443,1445,1449,1452,1455,1458,1461],{"className":1444},[1046],[1000,1446],{"className":1447,"style":1448},[1050],"height:0.7278em;vertical-align:-0.0833em;",[1000,1450,1336],{"className":1451},[1055],[1000,1453,1029],{"className":1454},[1055,1056],[1000,1456],{"className":1457,"style":1434},[1371],[1000,1459,1333],{"className":1460},[1438],[1000,1462],{"className":1463,"style":1434},[1371],[1000,1465,1467,1471],{"className":1466},[1046],[1000,1468],{"className":1469,"style":1470},[1050],"height:0.6444em;",[1000,1472,1343],{"className":1473},[1055],[1000,1475,1477,1501],{"className":1476},[1003],[1000,1478,1480],{"className":1479},[1007],[1009,1481,1482],{"xmlns":1011},[1013,1483,1484,1498],{},[1016,1485,1486,1488,1490,1496],{},[1019,1487,1084],{},[1023,1489,1026],{"stretchy":1025},[1324,1491,1492,1494],{},[1019,1493,1029],{},[1320,1495,1330],{},[1023,1497,1032],{"stretchy":1025},[1034,1499,1500],{"encoding":1036},"O(n^2)",[1000,1502,1504],{"className":1503,"ariaHidden":1042},[1041],[1000,1505,1507,1511,1514,1517,1546],{"className":1506},[1046],[1000,1508],{"className":1509,"style":1510},[1050],"height:1.0641em;vertical-align:-0.25em;",[1000,1512,1084],{"className":1513,"style":1113},[1055,1056],[1000,1515,1026],{"className":1516},[1061],[1000,1518,1520,1523],{"className":1519},[1055],[1000,1521,1029],{"className":1522},[1055,1056],[1000,1524,1526],{"className":1525},[1399],[1000,1527,1529],{"className":1528},[1403],[1000,1530,1532],{"className":1531},[1407],[1000,1533,1535],{"className":1534,"style":1412},[1411],[1000,1536,1537,1540],{"style":1415},[1000,1538],{"className":1539,"style":1420},[1419],[1000,1541,1543],{"className":1542},[1424,1425,1426,1427],[1000,1544,1330],{"className":1545},[1055,1427],[1000,1547,1032],{"className":1548},[1068],". Tỉ số ",[1000,1551,1553,1581],{"className":1552},[1003],[1000,1554,1556],{"className":1555},[1007],[1009,1557,1558],{"xmlns":1011},[1013,1559,1560,1578],{},[1016,1561,1562,1564,1566,1568,1570,1572],{},[1019,1563,1021],{},[1023,1565,1026],{"stretchy":1025},[1019,1567,1029],{},[1023,1569,1032],{"stretchy":1025},[1019,1571,1155],{"mathvariant":1154},[1324,1573,1574,1576],{},[1019,1575,1029],{},[1320,1577,1330],{},[1034,1579,1580],{"encoding":1036},"f(n)\u002Fn^2",[1000,1582,1584],{"className":1583,"ariaHidden":1042},[1041],[1000,1585,1587,1590,1593,1596,1599,1602,1605],{"className":1586},[1046],[1000,1588],{"className":1589,"style":1510},[1050],[1000,1591,1021],{"className":1592,"style":1057},[1055,1056],[1000,1594,1026],{"className":1595},[1061],[1000,1597,1029],{"className":1598},[1055,1056],[1000,1600,1032],{"className":1601},[1068],[1000,1603,1155],{"className":1604},[1055],[1000,1606,1608,1611],{"className":1607},[1055],[1000,1609,1029],{"className":1610},[1055,1056],[1000,1612,1614],{"className":1613},[1399],[1000,1615,1617],{"className":1616},[1403],[1000,1618,1620],{"className":1619},[1407],[1000,1621,1623],{"className":1622,"style":1412},[1411],[1000,1624,1625,1628],{"style":1415},[1000,1626],{"className":1627,"style":1420},[1419],[1000,1629,1631],{"className":1630},[1424,1425,1426,1427],[1000,1632,1330],{"className":1633},[1055,1427]," quanh quẩn gần 1000.",[973,1636,1637],{},"Khi n đủ lớn, đầu vào tăng gấp đôi thì chi phí tăng xấp xỉ gấp bốn. Đó là bản chất của bậc hai.",[973,1639,1640,1641,1735,1736,1766,1767,1846,1847,1941],{},"Định nghĩa chặt chẽ: ",[1000,1642,1644,1681],{"className":1643},[1003],[1000,1645,1647],{"className":1646},[1007],[1009,1648,1649],{"xmlns":1011},[1013,1650,1651,1678],{},[1016,1652,1653,1655,1657,1659,1661,1664,1666,1668,1670,1672,1674,1676],{},[1019,1654,1089],{},[1023,1656,1026],{"stretchy":1025},[1019,1658,1029],{},[1023,1660,1032],{"stretchy":1025},[1023,1662,1663],{},"∈",[1019,1665,1084],{},[1023,1667,1026],{"stretchy":1025},[1019,1669,1021],{},[1023,1671,1026],{"stretchy":1025},[1019,1673,1029],{},[1023,1675,1032],{"stretchy":1025},[1023,1677,1032],{"stretchy":1025},[1034,1679,1680],{"encoding":1036},"g(n) \\in O(f(n))",[1000,1682,1684,1711],{"className":1683,"ariaHidden":1042},[1041],[1000,1685,1687,1690,1693,1696,1699,1702,1705,1708],{"className":1686},[1046],[1000,1688],{"className":1689,"style":1051},[1050],[1000,1691,1089],{"className":1692,"style":1120},[1055,1056],[1000,1694,1026],{"className":1695},[1061],[1000,1697,1029],{"className":1698},[1055,1056],[1000,1700,1032],{"className":1701},[1068],[1000,1703],{"className":1704,"style":1372},[1371],[1000,1706,1663],{"className":1707},[1376],[1000,1709],{"className":1710,"style":1372},[1371],[1000,1712,1714,1717,1720,1723,1726,1729,1732],{"className":1713},[1046],[1000,1715],{"className":1716,"style":1051},[1050],[1000,1718,1084],{"className":1719,"style":1113},[1055,1056],[1000,1721,1026],{"className":1722},[1061],[1000,1724,1021],{"className":1725,"style":1057},[1055,1056],[1000,1727,1026],{"className":1728},[1061],[1000,1730,1029],{"className":1731},[1055,1056],[1000,1733,1130],{"className":1734},[1068]," nghĩa là có hằng số ",[1000,1737,1739,1753],{"className":1738},[1003],[1000,1740,1742],{"className":1741},[1007],[1009,1743,1744],{"xmlns":1011},[1013,1745,1746,1751],{},[1016,1747,1748],{},[1019,1749,1750],{},"c",[1034,1752,1750],{"encoding":1036},[1000,1754,1756],{"className":1755,"ariaHidden":1042},[1041],[1000,1757,1759,1763],{"className":1758},[1046],[1000,1760],{"className":1761,"style":1762},[1050],"height:0.4306em;",[1000,1764,1750],{"className":1765},[1055,1056]," và ngưỡng ",[1000,1768,1770,1790],{"className":1769},[1003],[1000,1771,1773],{"className":1772},[1007],[1009,1774,1775],{"xmlns":1011},[1013,1776,1777,1787],{},[1016,1778,1779],{},[1780,1781,1782,1784],"msub",{},[1019,1783,1029],{},[1320,1785,1786],{},"0",[1034,1788,1789],{"encoding":1036},"n_0",[1000,1791,1793],{"className":1792,"ariaHidden":1042},[1041],[1000,1794,1796,1800],{"className":1795},[1046],[1000,1797],{"className":1798,"style":1799},[1050],"height:0.5806em;vertical-align:-0.15em;",[1000,1801,1803,1806],{"className":1802},[1055],[1000,1804,1029],{"className":1805},[1055,1056],[1000,1807,1809],{"className":1808},[1399],[1000,1810,1813,1837],{"className":1811},[1403,1812],"vlist-t2",[1000,1814,1816,1832],{"className":1815},[1407],[1000,1817,1820],{"className":1818,"style":1819},[1411],"height:0.3011em;",[1000,1821,1823,1826],{"style":1822},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[1000,1824],{"className":1825,"style":1420},[1419],[1000,1827,1829],{"className":1828},[1424,1425,1426,1427],[1000,1830,1786],{"className":1831},[1055,1427],[1000,1833,1836],{"className":1834},[1835],"vlist-s","​",[1000,1838,1840],{"className":1839},[1407],[1000,1841,1844],{"className":1842,"style":1843},[1411],"height:0.15em;",[1000,1845],{}," sao cho mọi ",[1000,1848,1850,1873],{"className":1849},[1003],[1000,1851,1853],{"className":1852},[1007],[1009,1854,1855],{"xmlns":1011},[1013,1856,1857,1870],{},[1016,1858,1859,1861,1864],{},[1019,1860,1029],{},[1023,1862,1863],{},">",[1780,1865,1866,1868],{},[1019,1867,1029],{},[1320,1869,1786],{},[1034,1871,1872],{"encoding":1036},"n > n_0",[1000,1874,1876,1895],{"className":1875,"ariaHidden":1042},[1041],[1000,1877,1879,1883,1886,1889,1892],{"className":1878},[1046],[1000,1880],{"className":1881,"style":1882},[1050],"height:0.5782em;vertical-align:-0.0391em;",[1000,1884,1029],{"className":1885},[1055,1056],[1000,1887],{"className":1888,"style":1372},[1371],[1000,1890,1863],{"className":1891},[1376],[1000,1893],{"className":1894,"style":1372},[1371],[1000,1896,1898,1901],{"className":1897},[1046],[1000,1899],{"className":1900,"style":1799},[1050],[1000,1902,1904,1907],{"className":1903},[1055],[1000,1905,1029],{"className":1906},[1055,1056],[1000,1908,1910],{"className":1909},[1399],[1000,1911,1913,1933],{"className":1912},[1403,1812],[1000,1914,1916,1930],{"className":1915},[1407],[1000,1917,1919],{"className":1918,"style":1819},[1411],[1000,1920,1921,1924],{"style":1822},[1000,1922],{"className":1923,"style":1420},[1419],[1000,1925,1927],{"className":1926},[1424,1425,1426,1427],[1000,1928,1786],{"className":1929},[1055,1427],[1000,1931,1836],{"className":1932},[1835],[1000,1934,1936],{"className":1935},[1407],[1000,1937,1939],{"className":1938,"style":1843},[1411],[1000,1940],{},":",[973,1943,1944],{},[1000,1945,1947,1983],{"className":1946},[1003],[1000,1948,1950],{"className":1949},[1007],[1009,1951,1952],{"xmlns":1011},[1013,1953,1954,1980],{},[1016,1955,1956,1958,1960,1962,1964,1967,1969,1972,1974,1976,1978],{},[1019,1957,1089],{},[1023,1959,1026],{"stretchy":1025},[1019,1961,1029],{},[1023,1963,1032],{"stretchy":1025},[1023,1965,1966],{},"≤",[1019,1968,1750],{},[1023,1970,1971],{},"⋅",[1019,1973,1021],{},[1023,1975,1026],{"stretchy":1025},[1019,1977,1029],{},[1023,1979,1032],{"stretchy":1025},[1034,1981,1982],{"encoding":1036},"g(n) \\le c \\cdot f(n)",[1000,1984,1986,2013,2032],{"className":1985,"ariaHidden":1042},[1041],[1000,1987,1989,1992,1995,1998,2001,2004,2007,2010],{"className":1988},[1046],[1000,1990],{"className":1991,"style":1051},[1050],[1000,1993,1089],{"className":1994,"style":1120},[1055,1056],[1000,1996,1026],{"className":1997},[1061],[1000,1999,1029],{"className":2000},[1055,1056],[1000,2002,1032],{"className":2003},[1068],[1000,2005],{"className":2006,"style":1372},[1371],[1000,2008,1966],{"className":2009},[1376],[1000,2011],{"className":2012,"style":1372},[1371],[1000,2014,2016,2020,2023,2026,2029],{"className":2015},[1046],[1000,2017],{"className":2018,"style":2019},[1050],"height:0.4445em;",[1000,2021,1750],{"className":2022},[1055,1056],[1000,2024],{"className":2025,"style":1434},[1371],[1000,2027,1971],{"className":2028},[1438],[1000,2030],{"className":2031,"style":1434},[1371],[1000,2033,2035,2038,2041,2044,2047],{"className":2034},[1046],[1000,2036],{"className":2037,"style":1051},[1050],[1000,2039,1021],{"className":2040,"style":1057},[1055,1056],[1000,2042,1026],{"className":2043},[1061],[1000,2045,1029],{"className":2046},[1055,1056],[1000,2048,1032],{"className":2049},[1068],[973,2051,2052,2053,2148,2149,2215,2216,2268,2269,2361,2362,2414],{},"Ví dụ cụ thể: ",[1000,2054,2056,2088],{"className":2055},[1003],[1000,2057,2059],{"className":2058},[1007],[1009,2060,2061],{"xmlns":1011},[1013,2062,2063,2085],{},[1016,2064,2065,2067,2069,2071,2073,2075,2078,2080,2083],{},[1019,2066,1089],{},[1023,2068,1026],{"stretchy":1025},[1019,2070,1029],{},[1023,2072,1032],{"stretchy":1025},[1023,2074,1318],{},[1320,2076,2077],{},"40",[1023,2079,1333],{},[1320,2081,2082],{},"3",[1019,2084,1029],{},[1034,2086,2087],{"encoding":1036},"g(n) = 40 + 3n",[1000,2089,2091,2118,2136],{"className":2090,"ariaHidden":1042},[1041],[1000,2092,2094,2097,2100,2103,2106,2109,2112,2115],{"className":2093},[1046],[1000,2095],{"className":2096,"style":1051},[1050],[1000,2098,1089],{"className":2099,"style":1120},[1055,1056],[1000,2101,1026],{"className":2102},[1061],[1000,2104,1029],{"className":2105},[1055,1056],[1000,2107,1032],{"className":2108},[1068],[1000,2110],{"className":2111,"style":1372},[1371],[1000,2113,1318],{"className":2114},[1376],[1000,2116],{"className":2117,"style":1372},[1371],[1000,2119,2121,2124,2127,2130,2133],{"className":2120},[1046],[1000,2122],{"className":2123,"style":1448},[1050],[1000,2125,2077],{"className":2126},[1055],[1000,2128],{"className":2129,"style":1434},[1371],[1000,2131,1333],{"className":2132},[1438],[1000,2134],{"className":2135,"style":1434},[1371],[1000,2137,2139,2142,2145],{"className":2138},[1046],[1000,2140],{"className":2141,"style":1470},[1050],[1000,2143,2082],{"className":2144},[1055],[1000,2146,1029],{"className":2147},[1055,1056],", ",[1000,2150,2152,2176],{"className":2151},[1003],[1000,2153,2155],{"className":2154},[1007],[1009,2156,2157],{"xmlns":1011},[1013,2158,2159,2173],{},[1016,2160,2161,2163,2165,2167,2169,2171],{},[1019,2162,1021],{},[1023,2164,1026],{"stretchy":1025},[1019,2166,1029],{},[1023,2168,1032],{"stretchy":1025},[1023,2170,1318],{},[1019,2172,1029],{},[1034,2174,2175],{"encoding":1036},"f(n) = n",[1000,2177,2179,2206],{"className":2178,"ariaHidden":1042},[1041],[1000,2180,2182,2185,2188,2191,2194,2197,2200,2203],{"className":2181},[1046],[1000,2183],{"className":2184,"style":1051},[1050],[1000,2186,1021],{"className":2187,"style":1057},[1055,1056],[1000,2189,1026],{"className":2190},[1061],[1000,2192,1029],{"className":2193},[1055,1056],[1000,2195,1032],{"className":2196},[1068],[1000,2198],{"className":2199,"style":1372},[1371],[1000,2201,1318],{"className":2202},[1376],[1000,2204],{"className":2205,"style":1372},[1371],[1000,2207,2209,2212],{"className":2208},[1046],[1000,2210],{"className":2211,"style":1762},[1050],[1000,2213,1029],{"className":2214},[1055,1056],", chọn ",[1000,2217,2219,2238],{"className":2218},[1003],[1000,2220,2222],{"className":2221},[1007],[1009,2223,2224],{"xmlns":1011},[1013,2225,2226,2235],{},[1016,2227,2228,2230,2232],{},[1019,2229,1750],{},[1023,2231,1318],{},[1320,2233,2234],{},"4",[1034,2236,2237],{"encoding":1036},"c = 4",[1000,2239,2241,2259],{"className":2240,"ariaHidden":1042},[1041],[1000,2242,2244,2247,2250,2253,2256],{"className":2243},[1046],[1000,2245],{"className":2246,"style":1762},[1050],[1000,2248,1750],{"className":2249},[1055,1056],[1000,2251],{"className":2252,"style":1372},[1371],[1000,2254,1318],{"className":2255},[1376],[1000,2257],{"className":2258,"style":1372},[1371],[1000,2260,2262,2265],{"className":2261},[1046],[1000,2263],{"className":2264,"style":1470},[1050],[1000,2266,2234],{"className":2267},[1055]," và ",[1000,2270,2272,2294],{"className":2271},[1003],[1000,2273,2275],{"className":2274},[1007],[1009,2276,2277],{"xmlns":1011},[1013,2278,2279,2291],{},[1016,2280,2281,2287,2289],{},[1780,2282,2283,2285],{},[1019,2284,1029],{},[1320,2286,1786],{},[1023,2288,1318],{},[1320,2290,2077],{},[1034,2292,2293],{"encoding":1036},"n_0 = 40",[1000,2295,2297,2352],{"className":2296,"ariaHidden":1042},[1041],[1000,2298,2300,2303,2343,2346,2349],{"className":2299},[1046],[1000,2301],{"className":2302,"style":1799},[1050],[1000,2304,2306,2309],{"className":2305},[1055],[1000,2307,1029],{"className":2308},[1055,1056],[1000,2310,2312],{"className":2311},[1399],[1000,2313,2315,2335],{"className":2314},[1403,1812],[1000,2316,2318,2332],{"className":2317},[1407],[1000,2319,2321],{"className":2320,"style":1819},[1411],[1000,2322,2323,2326],{"style":1822},[1000,2324],{"className":2325,"style":1420},[1419],[1000,2327,2329],{"className":2328},[1424,1425,1426,1427],[1000,2330,1786],{"className":2331},[1055,1427],[1000,2333,1836],{"className":2334},[1835],[1000,2336,2338],{"className":2337},[1407],[1000,2339,2341],{"className":2340,"style":1843},[1411],[1000,2342],{},[1000,2344],{"className":2345,"style":1372},[1371],[1000,2347,1318],{"className":2348},[1376],[1000,2350],{"className":2351,"style":1372},[1371],[1000,2353,2355,2358],{"className":2354},[1046],[1000,2356],{"className":2357,"style":1470},[1050],[1000,2359,2077],{"className":2360},[1055],". Tại ",[1000,2363,2365,2384],{"className":2364},[1003],[1000,2366,2368],{"className":2367},[1007],[1009,2369,2370],{"xmlns":1011},[1013,2371,2372,2381],{},[1016,2373,2374,2376,2378],{},[1019,2375,1029],{},[1023,2377,1318],{},[1320,2379,2380],{},"30",[1034,2382,2383],{"encoding":1036},"n = 30",[1000,2385,2387,2405],{"className":2386,"ariaHidden":1042},[1041],[1000,2388,2390,2393,2396,2399,2402],{"className":2389},[1046],[1000,2391],{"className":2392,"style":1762},[1050],[1000,2394,1029],{"className":2395},[1055,1056],[1000,2397],{"className":2398,"style":1372},[1371],[1000,2400,1318],{"className":2401},[1376],[1000,2403],{"className":2404,"style":1372},[1371],[1000,2406,2408,2411],{"className":2407},[1046],[1000,2409],{"className":2410,"style":1470},[1050],[1000,2412,2380],{"className":2413},[1055],", vế trái 130 lớn hơn vế phải 120 nên chưa đạt.",[973,2416,2417,2418,2469,2470,2522],{},"Tại ",[1000,2419,2421,2439],{"className":2420},[1003],[1000,2422,2424],{"className":2423},[1007],[1009,2425,2426],{"xmlns":1011},[1013,2427,2428,2436],{},[1016,2429,2430,2432,2434],{},[1019,2431,1029],{},[1023,2433,1318],{},[1320,2435,2077],{},[1034,2437,2438],{"encoding":1036},"n = 40",[1000,2440,2442,2460],{"className":2441,"ariaHidden":1042},[1041],[1000,2443,2445,2448,2451,2454,2457],{"className":2444},[1046],[1000,2446],{"className":2447,"style":1762},[1050],[1000,2449,1029],{"className":2450},[1055,1056],[1000,2452],{"className":2453,"style":1372},[1371],[1000,2455,1318],{"className":2456},[1376],[1000,2458],{"className":2459,"style":1372},[1371],[1000,2461,2463,2466],{"className":2462},[1046],[1000,2464],{"className":2465,"style":1470},[1050],[1000,2467,2077],{"className":2468},[1055],", hai vế cùng bằng 160. Từ ",[1000,2471,2473,2492],{"className":2472},[1003],[1000,2474,2476],{"className":2475},[1007],[1009,2477,2478],{"xmlns":1011},[1013,2479,2480,2489],{},[1016,2481,2482,2484,2486],{},[1019,2483,1029],{},[1023,2485,1318],{},[1320,2487,2488],{},"41",[1034,2490,2491],{"encoding":1036},"n = 41",[1000,2493,2495,2513],{"className":2494,"ariaHidden":1042},[1041],[1000,2496,2498,2501,2504,2507,2510],{"className":2497},[1046],[1000,2499],{"className":2500,"style":1762},[1050],[1000,2502,1029],{"className":2503},[1055,1056],[1000,2505],{"className":2506,"style":1372},[1371],[1000,2508,1318],{"className":2509},[1376],[1000,2511],{"className":2512,"style":1372},[1371],[1000,2514,2516,2519],{"className":2515},[1046],[1000,2517],{"className":2518,"style":1470},[1050],[1000,2520,2488],{"className":2521},[1055]," trở đi, bất đẳng thức luôn đúng.",[973,2524,2525,2526,2554],{},"Hai điểm cần nhớ: chỉ xét n đủ lớn, và ",[1000,2527,2529,2542],{"className":2528},[1003],[1000,2530,2532],{"className":2531},[1007],[1009,2533,2534],{"xmlns":1011},[1013,2535,2536,2540],{},[1016,2537,2538],{},[1019,2539,1750],{},[1034,2541,1750],{"encoding":1036},[1000,2543,2545],{"className":2544,"ariaHidden":1042},[1041],[1000,2546,2548,2551],{"className":2547},[1046],[1000,2549],{"className":2550,"style":1762},[1050],[1000,2552,1750],{"className":2553},[1055,1056]," không phụ thuộc n. Giống như chỉ so tốc độ xe trên đường dài, không so lúc mới đề pa.",[968,2556,2558],{"id":2557},"_4-chặn-khít-và-chặn-lỏng","4. Chặn khít và chặn lỏng",[973,2560,2561],{},"Một hàm thuộc vô số lớp Big-O. Nhưng không phải lớp nào cũng hữu ích.",[973,2563,2564,2565,2617,2618,2148,2669,2761,2762,2806,2807,2880,2881,2958],{},"Ví dụ hàm ",[1000,2566,2568,2586],{"className":2567},[1003],[1000,2569,2571],{"className":2570},[1007],[1009,2572,2573],{"xmlns":1011},[1013,2574,2575,2583],{},[1016,2576,2577,2579,2581],{},[1019,2578,1029],{},[1023,2580,1333],{},[1320,2582,2234],{},[1034,2584,2585],{"encoding":1036},"n + 4",[1000,2587,2589,2608],{"className":2588,"ariaHidden":1042},[1041],[1000,2590,2592,2596,2599,2602,2605],{"className":2591},[1046],[1000,2593],{"className":2594,"style":2595},[1050],"height:0.6667em;vertical-align:-0.0833em;",[1000,2597,1029],{"className":2598},[1055,1056],[1000,2600],{"className":2601,"style":1434},[1371],[1000,2603,1333],{"className":2604},[1438],[1000,2606],{"className":2607,"style":1434},[1371],[1000,2609,2611,2614],{"className":2610},[1046],[1000,2612],{"className":2613,"style":1470},[1050],[1000,2615,2234],{"className":2616},[1055],": chọn ",[1000,2619,2621,2639],{"className":2620},[1003],[1000,2622,2624],{"className":2623},[1007],[1009,2625,2626],{"xmlns":1011},[1013,2627,2628,2636],{},[1016,2629,2630,2632,2634],{},[1019,2631,1750],{},[1023,2633,1318],{},[1320,2635,1330],{},[1034,2637,2638],{"encoding":1036},"c = 2",[1000,2640,2642,2660],{"className":2641,"ariaHidden":1042},[1041],[1000,2643,2645,2648,2651,2654,2657],{"className":2644},[1046],[1000,2646],{"className":2647,"style":1762},[1050],[1000,2649,1750],{"className":2650},[1055,1056],[1000,2652],{"className":2653,"style":1372},[1371],[1000,2655,1318],{"className":2656},[1376],[1000,2658],{"className":2659,"style":1372},[1371],[1000,2661,2663,2666],{"className":2662},[1046],[1000,2664],{"className":2665,"style":1470},[1050],[1000,2667,1330],{"className":2668},[1055],[1000,2670,2672,2694],{"className":2671},[1003],[1000,2673,2675],{"className":2674},[1007],[1009,2676,2677],{"xmlns":1011},[1013,2678,2679,2691],{},[1016,2680,2681,2687,2689],{},[1780,2682,2683,2685],{},[1019,2684,1029],{},[1320,2686,1786],{},[1023,2688,1318],{},[1320,2690,2234],{},[1034,2692,2693],{"encoding":1036},"n_0 = 4",[1000,2695,2697,2752],{"className":2696,"ariaHidden":1042},[1041],[1000,2698,2700,2703,2743,2746,2749],{"className":2699},[1046],[1000,2701],{"className":2702,"style":1799},[1050],[1000,2704,2706,2709],{"className":2705},[1055],[1000,2707,1029],{"className":2708},[1055,1056],[1000,2710,2712],{"className":2711},[1399],[1000,2713,2715,2735],{"className":2714},[1403,1812],[1000,2716,2718,2732],{"className":2717},[1407],[1000,2719,2721],{"className":2720,"style":1819},[1411],[1000,2722,2723,2726],{"style":1822},[1000,2724],{"className":2725,"style":1420},[1419],[1000,2727,2729],{"className":2728},[1424,1425,1426,1427],[1000,2730,1786],{"className":2731},[1055,1427],[1000,2733,1836],{"className":2734},[1835],[1000,2736,2738],{"className":2737},[1407],[1000,2739,2741],{"className":2740,"style":1843},[1411],[1000,2742],{},[1000,2744],{"className":2745,"style":1372},[1371],[1000,2747,1318],{"className":2748},[1376],[1000,2750],{"className":2751,"style":1372},[1371],[1000,2753,2755,2758],{"className":2754},[1046],[1000,2756],{"className":2757,"style":1470},[1050],[1000,2759,2234],{"className":2760},[1055]," thì nó thuộc ",[1000,2763,2765,2785],{"className":2764},[1003],[1000,2766,2768],{"className":2767},[1007],[1009,2769,2770],{"xmlns":1011},[1013,2771,2772,2782],{},[1016,2773,2774,2776,2778,2780],{},[1019,2775,1084],{},[1023,2777,1026],{"stretchy":1025},[1019,2779,1029],{},[1023,2781,1032],{"stretchy":1025},[1034,2783,2784],{"encoding":1036},"O(n)",[1000,2786,2788],{"className":2787,"ariaHidden":1042},[1041],[1000,2789,2791,2794,2797,2800,2803],{"className":2790},[1046],[1000,2792],{"className":2793,"style":1051},[1050],[1000,2795,1084],{"className":2796,"style":1113},[1055,1056],[1000,2798,1026],{"className":2799},[1061],[1000,2801,1029],{"className":2802},[1055,1056],[1000,2804,1032],{"className":2805},[1068],". Về mặt toán học, nó cũng thuộc ",[1000,2808,2810,2833],{"className":2809},[1003],[1000,2811,2813],{"className":2812},[1007],[1009,2814,2815],{"xmlns":1011},[1013,2816,2817,2831],{},[1016,2818,2819,2821,2823,2829],{},[1019,2820,1084],{},[1023,2822,1026],{"stretchy":1025},[1324,2824,2825,2827],{},[1019,2826,1029],{},[1320,2828,1330],{},[1023,2830,1032],{"stretchy":1025},[1034,2832,1500],{"encoding":1036},[1000,2834,2836],{"className":2835,"ariaHidden":1042},[1041],[1000,2837,2839,2842,2845,2848,2877],{"className":2838},[1046],[1000,2840],{"className":2841,"style":1510},[1050],[1000,2843,1084],{"className":2844,"style":1113},[1055,1056],[1000,2846,1026],{"className":2847},[1061],[1000,2849,2851,2854],{"className":2850},[1055],[1000,2852,1029],{"className":2853},[1055,1056],[1000,2855,2857],{"className":2856},[1399],[1000,2858,2860],{"className":2859},[1403],[1000,2861,2863],{"className":2862},[1407],[1000,2864,2866],{"className":2865,"style":1412},[1411],[1000,2867,2868,2871],{"style":1415},[1000,2869],{"className":2870,"style":1420},[1419],[1000,2872,2874],{"className":2873},[1424,1425,1426,1427],[1000,2875,1330],{"className":2876},[1055,1427],[1000,2878,1032],{"className":2879},[1068],", thậm chí ",[1000,2882,2884,2908],{"className":2883},[1003],[1000,2885,2887],{"className":2886},[1007],[1009,2888,2889],{"xmlns":1011},[1013,2890,2891,2905],{},[1016,2892,2893,2895,2897,2903],{},[1019,2894,1084],{},[1023,2896,1026],{"stretchy":1025},[1324,2898,2899,2901],{},[1019,2900,1029],{},[1320,2902,1322],{},[1023,2904,1032],{"stretchy":1025},[1034,2906,2907],{"encoding":1036},"O(n^{1000})",[1000,2909,2911],{"className":2910,"ariaHidden":1042},[1041],[1000,2912,2914,2917,2920,2923,2955],{"className":2913},[1046],[1000,2915],{"className":2916,"style":1510},[1050],[1000,2918,1084],{"className":2919,"style":1113},[1055,1056],[1000,2921,1026],{"className":2922},[1061],[1000,2924,2926,2929],{"className":2925},[1055],[1000,2927,1029],{"className":2928},[1055,1056],[1000,2930,2932],{"className":2931},[1399],[1000,2933,2935],{"className":2934},[1403],[1000,2936,2938],{"className":2937},[1407],[1000,2939,2941],{"className":2940,"style":1412},[1411],[1000,2942,2943,2946],{"style":1415},[1000,2944],{"className":2945,"style":1420},[1419],[1000,2947,2949],{"className":2948},[1424,1425,1426,1427],[1000,2950,2952],{"className":2951},[1055,1427],[1000,2953,1322],{"className":2954},[1055,1427],[1000,2956,1032],{"className":2957},[1068],".",[973,2960,2961],{},"Các phát biểu sau vẫn đúng nhưng vô dụng. Giống như nói đi chợ tốn ít hơn ngân sách cả nước.",[973,2963,2964],{},"Thực hành tốt là tìm chặn khít. Đó là lớp nhỏ nhất vẫn chặn được chi phí thật.",[973,2966,2967],{},"Ba ký hiệu đi cùng nhau:",[2969,2970,2971,2987],"table",{},[2972,2973,2974],"thead",{},[2975,2976,2977,2981,2984],"tr",{},[2978,2979,2980],"th",{},"Ký hiệu",[2978,2982,2983],{},"Nghĩa",[2978,2985,2986],{},"Định nghĩa",[2988,2989,2990,3239,3488],"tbody",{},[2975,2991,2992,3039,3042],{},[2993,2994,2995],"td",{},[1000,2996,2998,3018],{"className":2997},[1003],[1000,2999,3001],{"className":3000},[1007],[1009,3002,3003],{"xmlns":1011},[1013,3004,3005,3015],{},[1016,3006,3007,3009,3011,3013],{},[1019,3008,1084],{},[1023,3010,1026],{"stretchy":1025},[1019,3012,1089],{},[1023,3014,1032],{"stretchy":1025},[1034,3016,3017],{"encoding":1036},"O(g)",[1000,3019,3021],{"className":3020,"ariaHidden":1042},[1041],[1000,3022,3024,3027,3030,3033,3036],{"className":3023},[1046],[1000,3025],{"className":3026,"style":1051},[1050],[1000,3028,1084],{"className":3029,"style":1113},[1055,1056],[1000,3031,1026],{"className":3032},[1061],[1000,3034,1089],{"className":3035,"style":1120},[1055,1056],[1000,3037,1032],{"className":3038},[1068],[2993,3040,3041],{},"Chặn trên",[2993,3043,3044,3147,3148],{},[1000,3045,3047,3081],{"className":3046},[1003],[1000,3048,3050],{"className":3049},[1007],[1009,3051,3052],{"xmlns":1011},[1013,3053,3054,3078],{},[1016,3055,3056,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076],{},[1019,3057,1021],{},[1023,3059,1026],{"stretchy":1025},[1019,3061,1029],{},[1023,3063,1032],{"stretchy":1025},[1023,3065,1966],{},[1019,3067,1750],{},[1023,3069,1971],{},[1019,3071,1089],{},[1023,3073,1026],{"stretchy":1025},[1019,3075,1029],{},[1023,3077,1032],{"stretchy":1025},[1034,3079,3080],{"encoding":1036},"f(n) \\le c \\cdot g(n)",[1000,3082,3084,3111,3129],{"className":3083,"ariaHidden":1042},[1041],[1000,3085,3087,3090,3093,3096,3099,3102,3105,3108],{"className":3086},[1046],[1000,3088],{"className":3089,"style":1051},[1050],[1000,3091,1021],{"className":3092,"style":1057},[1055,1056],[1000,3094,1026],{"className":3095},[1061],[1000,3097,1029],{"className":3098},[1055,1056],[1000,3100,1032],{"className":3101},[1068],[1000,3103],{"className":3104,"style":1372},[1371],[1000,3106,1966],{"className":3107},[1376],[1000,3109],{"className":3110,"style":1372},[1371],[1000,3112,3114,3117,3120,3123,3126],{"className":3113},[1046],[1000,3115],{"className":3116,"style":2019},[1050],[1000,3118,1750],{"className":3119},[1055,1056],[1000,3121],{"className":3122,"style":1434},[1371],[1000,3124,1971],{"className":3125},[1438],[1000,3127],{"className":3128,"style":1434},[1371],[1000,3130,3132,3135,3138,3141,3144],{"className":3131},[1046],[1000,3133],{"className":3134,"style":1051},[1050],[1000,3136,1089],{"className":3137,"style":1120},[1055,1056],[1000,3139,1026],{"className":3140},[1061],[1000,3142,1029],{"className":3143},[1055,1056],[1000,3145,1032],{"className":3146},[1068]," với mọi ",[1000,3149,3151,3172],{"className":3150},[1003],[1000,3152,3154],{"className":3153},[1007],[1009,3155,3156],{"xmlns":1011},[1013,3157,3158,3170],{},[1016,3159,3160,3162,3164],{},[1019,3161,1029],{},[1023,3163,1863],{},[1780,3165,3166,3168],{},[1019,3167,1029],{},[1320,3169,1786],{},[1034,3171,1872],{"encoding":1036},[1000,3173,3175,3193],{"className":3174,"ariaHidden":1042},[1041],[1000,3176,3178,3181,3184,3187,3190],{"className":3177},[1046],[1000,3179],{"className":3180,"style":1882},[1050],[1000,3182,1029],{"className":3183},[1055,1056],[1000,3185],{"className":3186,"style":1372},[1371],[1000,3188,1863],{"className":3189},[1376],[1000,3191],{"className":3192,"style":1372},[1371],[1000,3194,3196,3199],{"className":3195},[1046],[1000,3197],{"className":3198,"style":1799},[1050],[1000,3200,3202,3205],{"className":3201},[1055],[1000,3203,1029],{"className":3204},[1055,1056],[1000,3206,3208],{"className":3207},[1399],[1000,3209,3211,3231],{"className":3210},[1403,1812],[1000,3212,3214,3228],{"className":3213},[1407],[1000,3215,3217],{"className":3216,"style":1819},[1411],[1000,3218,3219,3222],{"style":1822},[1000,3220],{"className":3221,"style":1420},[1419],[1000,3223,3225],{"className":3224},[1424,1425,1426,1427],[1000,3226,1786],{"className":3227},[1055,1427],[1000,3229,1836],{"className":3230},[1835],[1000,3232,3234],{"className":3233},[1407],[1000,3235,3237],{"className":3236,"style":1843},[1411],[1000,3238],{},[2975,3240,3241,3288,3291],{},[2993,3242,3243],{},[1000,3244,3246,3267],{"className":3245},[1003],[1000,3247,3249],{"className":3248},[1007],[1009,3250,3251],{"xmlns":1011},[1013,3252,3253,3264],{},[1016,3254,3255,3258,3260,3262],{},[1019,3256,3257],{"mathvariant":1154},"Ω",[1023,3259,1026],{"stretchy":1025},[1019,3261,1089],{},[1023,3263,1032],{"stretchy":1025},[1034,3265,3266],{"encoding":1036},"\\Omega(g)",[1000,3268,3270],{"className":3269,"ariaHidden":1042},[1041],[1000,3271,3273,3276,3279,3282,3285],{"className":3272},[1046],[1000,3274],{"className":3275,"style":1051},[1050],[1000,3277,3257],{"className":3278},[1055],[1000,3280,1026],{"className":3281},[1061],[1000,3283,1089],{"className":3284,"style":1120},[1055,1056],[1000,3286,1032],{"className":3287},[1068],[2993,3289,3290],{},"Chặn dưới",[2993,3292,3293,3147,3397],{},[1000,3294,3296,3331],{"className":3295},[1003],[1000,3297,3299],{"className":3298},[1007],[1009,3300,3301],{"xmlns":1011},[1013,3302,3303,3328],{},[1016,3304,3305,3307,3309,3311,3313,3316,3318,3320,3322,3324,3326],{},[1019,3306,1021],{},[1023,3308,1026],{"stretchy":1025},[1019,3310,1029],{},[1023,3312,1032],{"stretchy":1025},[1023,3314,3315],{},"≥",[1019,3317,1750],{},[1023,3319,1971],{},[1019,3321,1089],{},[1023,3323,1026],{"stretchy":1025},[1019,3325,1029],{},[1023,3327,1032],{"stretchy":1025},[1034,3329,3330],{"encoding":1036},"f(n) \\ge c \\cdot g(n)",[1000,3332,3334,3361,3379],{"className":3333,"ariaHidden":1042},[1041],[1000,3335,3337,3340,3343,3346,3349,3352,3355,3358],{"className":3336},[1046],[1000,3338],{"className":3339,"style":1051},[1050],[1000,3341,1021],{"className":3342,"style":1057},[1055,1056],[1000,3344,1026],{"className":3345},[1061],[1000,3347,1029],{"className":3348},[1055,1056],[1000,3350,1032],{"className":3351},[1068],[1000,3353],{"className":3354,"style":1372},[1371],[1000,3356,3315],{"className":3357},[1376],[1000,3359],{"className":3360,"style":1372},[1371],[1000,3362,3364,3367,3370,3373,3376],{"className":3363},[1046],[1000,3365],{"className":3366,"style":2019},[1050],[1000,3368,1750],{"className":3369},[1055,1056],[1000,3371],{"className":3372,"style":1434},[1371],[1000,3374,1971],{"className":3375},[1438],[1000,3377],{"className":3378,"style":1434},[1371],[1000,3380,3382,3385,3388,3391,3394],{"className":3381},[1046],[1000,3383],{"className":3384,"style":1051},[1050],[1000,3386,1089],{"className":3387,"style":1120},[1055,1056],[1000,3389,1026],{"className":3390},[1061],[1000,3392,1029],{"className":3393},[1055,1056],[1000,3395,1032],{"className":3396},[1068],[1000,3398,3400,3421],{"className":3399},[1003],[1000,3401,3403],{"className":3402},[1007],[1009,3404,3405],{"xmlns":1011},[1013,3406,3407,3419],{},[1016,3408,3409,3411,3413],{},[1019,3410,1029],{},[1023,3412,1863],{},[1780,3414,3415,3417],{},[1019,3416,1029],{},[1320,3418,1786],{},[1034,3420,1872],{"encoding":1036},[1000,3422,3424,3442],{"className":3423,"ariaHidden":1042},[1041],[1000,3425,3427,3430,3433,3436,3439],{"className":3426},[1046],[1000,3428],{"className":3429,"style":1882},[1050],[1000,3431,1029],{"className":3432},[1055,1056],[1000,3434],{"className":3435,"style":1372},[1371],[1000,3437,1863],{"className":3438},[1376],[1000,3440],{"className":3441,"style":1372},[1371],[1000,3443,3445,3448],{"className":3444},[1046],[1000,3446],{"className":3447,"style":1799},[1050],[1000,3449,3451,3454],{"className":3450},[1055],[1000,3452,1029],{"className":3453},[1055,1056],[1000,3455,3457],{"className":3456},[1399],[1000,3458,3460,3480],{"className":3459},[1403,1812],[1000,3461,3463,3477],{"className":3462},[1407],[1000,3464,3466],{"className":3465,"style":1819},[1411],[1000,3467,3468,3471],{"style":1822},[1000,3469],{"className":3470,"style":1420},[1419],[1000,3472,3474],{"className":3473},[1424,1425,1426,1427],[1000,3475,1786],{"className":3476},[1055,1427],[1000,3478,1836],{"className":3479},[1835],[1000,3481,3483],{"className":3482},[1407],[1000,3484,3486],{"className":3485,"style":1843},[1411],[1000,3487],{},[2975,3489,3490,3537,3540],{},[2993,3491,3492],{},[1000,3493,3495,3516],{"className":3494},[1003],[1000,3496,3498],{"className":3497},[1007],[1009,3499,3500],{"xmlns":1011},[1013,3501,3502,3513],{},[1016,3503,3504,3507,3509,3511],{},[1019,3505,3506],{"mathvariant":1154},"Θ",[1023,3508,1026],{"stretchy":1025},[1019,3510,1089],{},[1023,3512,1032],{"stretchy":1025},[1034,3514,3515],{"encoding":1036},"\\Theta(g)",[1000,3517,3519],{"className":3518,"ariaHidden":1042},[1041],[1000,3520,3522,3525,3528,3531,3534],{"className":3521},[1046],[1000,3523],{"className":3524,"style":1051},[1050],[1000,3526,3506],{"className":3527},[1055],[1000,3529,1026],{"className":3530},[1061],[1000,3532,1089],{"className":3533,"style":1120},[1055,1056],[1000,3535,1032],{"className":3536},[1068],[2993,3538,3539],{},"Chặn khít hai phía",[2993,3541,3542,3543,3586,3587],{},"Vừa ",[1000,3544,3546,3565],{"className":3545},[1003],[1000,3547,3549],{"className":3548},[1007],[1009,3550,3551],{"xmlns":1011},[1013,3552,3553,3563],{},[1016,3554,3555,3557,3559,3561],{},[1019,3556,1084],{},[1023,3558,1026],{"stretchy":1025},[1019,3560,1089],{},[1023,3562,1032],{"stretchy":1025},[1034,3564,3017],{"encoding":1036},[1000,3566,3568],{"className":3567,"ariaHidden":1042},[1041],[1000,3569,3571,3574,3577,3580,3583],{"className":3570},[1046],[1000,3572],{"className":3573,"style":1051},[1050],[1000,3575,1084],{"className":3576,"style":1113},[1055,1056],[1000,3578,1026],{"className":3579},[1061],[1000,3581,1089],{"className":3582,"style":1120},[1055,1056],[1000,3584,1032],{"className":3585},[1068]," vừa ",[1000,3588,3590,3609],{"className":3589},[1003],[1000,3591,3593],{"className":3592},[1007],[1009,3594,3595],{"xmlns":1011},[1013,3596,3597,3607],{},[1016,3598,3599,3601,3603,3605],{},[1019,3600,3257],{"mathvariant":1154},[1023,3602,1026],{"stretchy":1025},[1019,3604,1089],{},[1023,3606,1032],{"stretchy":1025},[1034,3608,3266],{"encoding":1036},[1000,3610,3612],{"className":3611,"ariaHidden":1042},[1041],[1000,3613,3615,3618,3621,3624,3627],{"className":3614},[1046],[1000,3616],{"className":3617,"style":1051},[1050],[1000,3619,3257],{"className":3620},[1055],[1000,3622,1026],{"className":3623},[1061],[1000,3625,1089],{"className":3626,"style":1120},[1055,1056],[1000,3628,1032],{"className":3629},[1068],[973,3631,1295,3632,1069,3688,3732,3733,3806,3807,2958],{},[1000,3633,3635,3655],{"className":3634},[1003],[1000,3636,3638],{"className":3637},[1007],[1009,3639,3640],{"xmlns":1011},[1013,3641,3642,3652],{},[1016,3643,3644,3646,3648,3650],{},[1320,3645,2082],{},[1019,3647,1029],{},[1023,3649,1333],{},[1320,3651,2077],{},[1034,3653,3654],{"encoding":1036},"3n + 40",[1000,3656,3658,3679],{"className":3657,"ariaHidden":1042},[1041],[1000,3659,3661,3664,3667,3670,3673,3676],{"className":3660},[1046],[1000,3662],{"className":3663,"style":1448},[1050],[1000,3665,2082],{"className":3666},[1055],[1000,3668,1029],{"className":3669},[1055,1056],[1000,3671],{"className":3672,"style":1434},[1371],[1000,3674,1333],{"className":3675},[1438],[1000,3677],{"className":3678,"style":1434},[1371],[1000,3680,3682,3685],{"className":3681},[1046],[1000,3683],{"className":3684,"style":1470},[1050],[1000,3686,2077],{"className":3687},[1055],[1000,3689,3691,3711],{"className":3690},[1003],[1000,3692,3694],{"className":3693},[1007],[1009,3695,3696],{"xmlns":1011},[1013,3697,3698,3708],{},[1016,3699,3700,3702,3704,3706],{},[1019,3701,3506],{"mathvariant":1154},[1023,3703,1026],{"stretchy":1025},[1019,3705,1029],{},[1023,3707,1032],{"stretchy":1025},[1034,3709,3710],{"encoding":1036},"\\Theta(n)",[1000,3712,3714],{"className":3713,"ariaHidden":1042},[1041],[1000,3715,3717,3720,3723,3726,3729],{"className":3716},[1046],[1000,3718],{"className":3719,"style":1051},[1050],[1000,3721,3506],{"className":3722},[1055],[1000,3724,1026],{"className":3725},[1061],[1000,3727,1029],{"className":3728},[1055,1056],[1000,3730,1032],{"className":3731},[1068],". Nó thuộc ",[1000,3734,3736,3759],{"className":3735},[1003],[1000,3737,3739],{"className":3738},[1007],[1009,3740,3741],{"xmlns":1011},[1013,3742,3743,3757],{},[1016,3744,3745,3747,3749,3755],{},[1019,3746,1084],{},[1023,3748,1026],{"stretchy":1025},[1324,3750,3751,3753],{},[1019,3752,1029],{},[1320,3754,1330],{},[1023,3756,1032],{"stretchy":1025},[1034,3758,1500],{"encoding":1036},[1000,3760,3762],{"className":3761,"ariaHidden":1042},[1041],[1000,3763,3765,3768,3771,3774,3803],{"className":3764},[1046],[1000,3766],{"className":3767,"style":1510},[1050],[1000,3769,1084],{"className":3770,"style":1113},[1055,1056],[1000,3772,1026],{"className":3773},[1061],[1000,3775,3777,3780],{"className":3776},[1055],[1000,3778,1029],{"className":3779},[1055,1056],[1000,3781,3783],{"className":3782},[1399],[1000,3784,3786],{"className":3785},[1403],[1000,3787,3789],{"className":3788},[1407],[1000,3790,3792],{"className":3791,"style":1412},[1411],[1000,3793,3794,3797],{"style":1415},[1000,3795],{"className":3796,"style":1420},[1419],[1000,3798,3800],{"className":3799},[1424,1425,1426,1427],[1000,3801,1330],{"className":3802},[1055,1427],[1000,3804,1032],{"className":3805},[1068]," nhưng không thuộc ",[1000,3808,3810,3834],{"className":3809},[1003],[1000,3811,3813],{"className":3812},[1007],[1009,3814,3815],{"xmlns":1011},[1013,3816,3817,3831],{},[1016,3818,3819,3821,3823,3829],{},[1019,3820,3506],{"mathvariant":1154},[1023,3822,1026],{"stretchy":1025},[1324,3824,3825,3827],{},[1019,3826,1029],{},[1320,3828,1330],{},[1023,3830,1032],{"stretchy":1025},[1034,3832,3833],{"encoding":1036},"\\Theta(n^2)",[1000,3835,3837],{"className":3836,"ariaHidden":1042},[1041],[1000,3838,3840,3843,3846,3849,3878],{"className":3839},[1046],[1000,3841],{"className":3842,"style":1510},[1050],[1000,3844,3506],{"className":3845},[1055],[1000,3847,1026],{"className":3848},[1061],[1000,3850,3852,3855],{"className":3851},[1055],[1000,3853,1029],{"className":3854},[1055,1056],[1000,3856,3858],{"className":3857},[1399],[1000,3859,3861],{"className":3860},[1403],[1000,3862,3864],{"className":3863},[1407],[1000,3865,3867],{"className":3866,"style":1412},[1411],[1000,3868,3869,3872],{"style":1415},[1000,3870],{"className":3871,"style":1420},[1419],[1000,3873,3875],{"className":3874},[1424,1425,1426,1427],[1000,3876,1330],{"className":3877},[1055,1427],[1000,3879,1032],{"className":3880},[1068],[973,3882,3883,3884,2958],{},"Trong tài liệu và phỏng vấn, người ta hay viết Big-O nhưng ý muốn nói chặn khít. Khi cần chính xác, hãy dùng ",[1000,3885,3887,3901],{"className":3886},[1003],[1000,3888,3890],{"className":3889},[1007],[1009,3891,3892],{"xmlns":1011},[1013,3893,3894,3898],{},[1016,3895,3896],{},[1019,3897,3506],{"mathvariant":1154},[1034,3899,3900],{"encoding":1036},"\\Theta",[1000,3902,3904],{"className":3903,"ariaHidden":1042},[1041],[1000,3905,3907,3911],{"className":3906},[1046],[1000,3908],{"className":3909,"style":3910},[1050],"height:0.6833em;",[1000,3912,3506],{"className":3913},[1055],[968,3915,3917],{"id":3916},"_5-các-quy-tắc-rút-gọn-khi-làm-việc-với-big-o","5. Các quy tắc rút gọn khi làm việc với Big-O",[973,3919,3920],{},"Có năm quy tắc, cùng một tinh thần.",[2969,3922,3923,3936],{},[2972,3924,3925],{},[2975,3926,3927,3930,3933],{},[2978,3928,3929],{},"Quy tắc",[2978,3931,3932],{},"Nội dung",[2978,3934,3935],{},"Kết quả",[2988,3937,3938,3991,4292,4482,4493],{},[2975,3939,3940,3943,3946],{},[2993,3941,3942],{},"Vòng lặp đơn",[2993,3944,3945],{},"Lặp n lần",[2993,3947,3948],{},[1000,3949,3951,3970],{"className":3950},[1003],[1000,3952,3954],{"className":3953},[1007],[1009,3955,3956],{"xmlns":1011},[1013,3957,3958,3968],{},[1016,3959,3960,3962,3964,3966],{},[1019,3961,1084],{},[1023,3963,1026],{"stretchy":1025},[1019,3965,1029],{},[1023,3967,1032],{"stretchy":1025},[1034,3969,2784],{"encoding":1036},[1000,3971,3973],{"className":3972,"ariaHidden":1042},[1041],[1000,3974,3976,3979,3982,3985,3988],{"className":3975},[1046],[1000,3977],{"className":3978,"style":1051},[1050],[1000,3980,1084],{"className":3981,"style":1113},[1055,1056],[1000,3983,1026],{"className":3984},[1061],[1000,3986,1029],{"className":3987},[1055,1056],[1000,3989,1032],{"className":3990},[1068],[2975,3992,3993,3996,4141],{},[2993,3994,3995],{},"Vòng lặp lồng",[2993,3997,3998,3999,4070,4071],{},"Ngoài ",[1000,4000,4002,4021],{"className":4001},[1003],[1000,4003,4005],{"className":4004},[1007],[1009,4006,4007],{"xmlns":1011},[1013,4008,4009,4018],{},[1016,4010,4011],{},[1780,4012,4013,4015],{},[1019,4014,1029],{},[1320,4016,4017],{},"1",[1034,4019,4020],{"encoding":1036},"n_1",[1000,4022,4024],{"className":4023,"ariaHidden":1042},[1041],[1000,4025,4027,4030],{"className":4026},[1046],[1000,4028],{"className":4029,"style":1799},[1050],[1000,4031,4033,4036],{"className":4032},[1055],[1000,4034,1029],{"className":4035},[1055,1056],[1000,4037,4039],{"className":4038},[1399],[1000,4040,4042,4062],{"className":4041},[1403,1812],[1000,4043,4045,4059],{"className":4044},[1407],[1000,4046,4048],{"className":4047,"style":1819},[1411],[1000,4049,4050,4053],{"style":1822},[1000,4051],{"className":4052,"style":1420},[1419],[1000,4054,4056],{"className":4055},[1424,1425,1426,1427],[1000,4057,4017],{"className":4058},[1055,1427],[1000,4060,1836],{"className":4061},[1835],[1000,4063,4065],{"className":4064},[1407],[1000,4066,4068],{"className":4067,"style":1843},[1411],[1000,4069],{},", trong ",[1000,4072,4074,4092],{"className":4073},[1003],[1000,4075,4077],{"className":4076},[1007],[1009,4078,4079],{"xmlns":1011},[1013,4080,4081,4089],{},[1016,4082,4083],{},[1780,4084,4085,4087],{},[1019,4086,1029],{},[1320,4088,1330],{},[1034,4090,4091],{"encoding":1036},"n_2",[1000,4093,4095],{"className":4094,"ariaHidden":1042},[1041],[1000,4096,4098,4101],{"className":4097},[1046],[1000,4099],{"className":4100,"style":1799},[1050],[1000,4102,4104,4107],{"className":4103},[1055],[1000,4105,1029],{"className":4106},[1055,1056],[1000,4108,4110],{"className":4109},[1399],[1000,4111,4113,4133],{"className":4112},[1403,1812],[1000,4114,4116,4130],{"className":4115},[1407],[1000,4117,4119],{"className":4118,"style":1819},[1411],[1000,4120,4121,4124],{"style":1822},[1000,4122],{"className":4123,"style":1420},[1419],[1000,4125,4127],{"className":4126},[1424,1425,1426,1427],[1000,4128,1330],{"className":4129},[1055,1427],[1000,4131,1836],{"className":4132},[1835],[1000,4134,4136],{"className":4135},[1407],[1000,4137,4139],{"className":4138,"style":1843},[1411],[1000,4140],{},[2993,4142,4143],{},[1000,4144,4146,4179],{"className":4145},[1003],[1000,4147,4149],{"className":4148},[1007],[1009,4150,4151],{"xmlns":1011},[1013,4152,4153,4176],{},[1016,4154,4155,4157,4159,4165,4168,4174],{},[1019,4156,1084],{},[1023,4158,1026],{"stretchy":1025},[1780,4160,4161,4163],{},[1019,4162,1029],{},[1320,4164,4017],{},[1023,4166,4167],{},"×",[1780,4169,4170,4172],{},[1019,4171,1029],{},[1320,4173,1330],{},[1023,4175,1032],{"stretchy":1025},[1034,4177,4178],{"encoding":1036},"O(n_1 \\times n_2)",[1000,4180,4182,4243],{"className":4181,"ariaHidden":1042},[1041],[1000,4183,4185,4188,4191,4194,4234,4237,4240],{"className":4184},[1046],[1000,4186],{"className":4187,"style":1051},[1050],[1000,4189,1084],{"className":4190,"style":1113},[1055,1056],[1000,4192,1026],{"className":4193},[1061],[1000,4195,4197,4200],{"className":4196},[1055],[1000,4198,1029],{"className":4199},[1055,1056],[1000,4201,4203],{"className":4202},[1399],[1000,4204,4206,4226],{"className":4205},[1403,1812],[1000,4207,4209,4223],{"className":4208},[1407],[1000,4210,4212],{"className":4211,"style":1819},[1411],[1000,4213,4214,4217],{"style":1822},[1000,4215],{"className":4216,"style":1420},[1419],[1000,4218,4220],{"className":4219},[1424,1425,1426,1427],[1000,4221,4017],{"className":4222},[1055,1427],[1000,4224,1836],{"className":4225},[1835],[1000,4227,4229],{"className":4228},[1407],[1000,4230,4232],{"className":4231,"style":1843},[1411],[1000,4233],{},[1000,4235],{"className":4236,"style":1434},[1371],[1000,4238,4167],{"className":4239},[1438],[1000,4241],{"className":4242,"style":1434},[1371],[1000,4244,4246,4249,4289],{"className":4245},[1046],[1000,4247],{"className":4248,"style":1051},[1050],[1000,4250,4252,4255],{"className":4251},[1055],[1000,4253,1029],{"className":4254},[1055,1056],[1000,4256,4258],{"className":4257},[1399],[1000,4259,4261,4281],{"className":4260},[1403,1812],[1000,4262,4264,4278],{"className":4263},[1407],[1000,4265,4267],{"className":4266,"style":1819},[1411],[1000,4268,4269,4272],{"style":1822},[1000,4270],{"className":4271,"style":1420},[1419],[1000,4273,4275],{"className":4274},[1424,1425,1426,1427],[1000,4276,1330],{"className":4277},[1055,1427],[1000,4279,1836],{"className":4280},[1835],[1000,4282,4284],{"className":4283},[1407],[1000,4285,4287],{"className":4286,"style":1843},[1411],[1000,4288],{},[1000,4290,1032],{"className":4291},[1068],[2975,4293,4294,4297,4387],{},[2993,4295,4296],{},"Nối tiếp",[2993,4298,4299,4300,4343,4344],{},"Chạy pha ",[1000,4301,4303,4322],{"className":4302},[1003],[1000,4304,4306],{"className":4305},[1007],[1009,4307,4308],{"xmlns":1011},[1013,4309,4310,4320],{},[1016,4311,4312,4314,4316,4318],{},[1019,4313,1021],{},[1023,4315,1026],{"stretchy":1025},[1019,4317,1029],{},[1023,4319,1032],{"stretchy":1025},[1034,4321,1037],{"encoding":1036},[1000,4323,4325],{"className":4324,"ariaHidden":1042},[1041],[1000,4326,4328,4331,4334,4337,4340],{"className":4327},[1046],[1000,4329],{"className":4330,"style":1051},[1050],[1000,4332,1021],{"className":4333,"style":1057},[1055,1056],[1000,4335,1026],{"className":4336},[1061],[1000,4338,1029],{"className":4339},[1055,1056],[1000,4341,1032],{"className":4342},[1068]," rồi ",[1000,4345,4347,4366],{"className":4346},[1003],[1000,4348,4350],{"className":4349},[1007],[1009,4351,4352],{"xmlns":1011},[1013,4353,4354,4364],{},[1016,4355,4356,4358,4360,4362],{},[1019,4357,1089],{},[1023,4359,1026],{"stretchy":1025},[1019,4361,1029],{},[1023,4363,1032],{"stretchy":1025},[1034,4365,1270],{"encoding":1036},[1000,4367,4369],{"className":4368,"ariaHidden":1042},[1041],[1000,4370,4372,4375,4378,4381,4384],{"className":4371},[1046],[1000,4373],{"className":4374,"style":1051},[1050],[1000,4376,1089],{"className":4377,"style":1120},[1055,1056],[1000,4379,1026],{"className":4380},[1061],[1000,4382,1029],{"className":4383},[1055,1056],[1000,4385,1032],{"className":4386},[1068],[2993,4388,4389],{},[1000,4390,4392,4428],{"className":4391},[1003],[1000,4393,4395],{"className":4394},[1007],[1009,4396,4397],{"xmlns":1011},[1013,4398,4399,4425],{},[1016,4400,4401,4403,4405,4407,4409,4411,4413,4415,4417,4419,4421,4423],{},[1019,4402,1084],{},[1023,4404,1026],{"stretchy":1025},[1019,4406,1021],{},[1023,4408,1026],{"stretchy":1025},[1019,4410,1029],{},[1023,4412,1032],{"stretchy":1025},[1023,4414,1333],{},[1019,4416,1089],{},[1023,4418,1026],{"stretchy":1025},[1019,4420,1029],{},[1023,4422,1032],{"stretchy":1025},[1023,4424,1032],{"stretchy":1025},[1034,4426,4427],{"encoding":1036},"O(f(n) + g(n))",[1000,4429,4431,4464],{"className":4430,"ariaHidden":1042},[1041],[1000,4432,4434,4437,4440,4443,4446,4449,4452,4455,4458,4461],{"className":4433},[1046],[1000,4435],{"className":4436,"style":1051},[1050],[1000,4438,1084],{"className":4439,"style":1113},[1055,1056],[1000,4441,1026],{"className":4442},[1061],[1000,4444,1021],{"className":4445,"style":1057},[1055,1056],[1000,4447,1026],{"className":4448},[1061],[1000,4450,1029],{"className":4451},[1055,1056],[1000,4453,1032],{"className":4454},[1068],[1000,4456],{"className":4457,"style":1434},[1371],[1000,4459,1333],{"className":4460},[1438],[1000,4462],{"className":4463,"style":1434},[1371],[1000,4465,4467,4470,4473,4476,4479],{"className":4466},[1046],[1000,4468],{"className":4469,"style":1051},[1050],[1000,4471,1089],{"className":4472,"style":1120},[1055,1056],[1000,4474,1026],{"className":4475},[1061],[1000,4477,1029],{"className":4478},[1055,1056],[1000,4480,1130],{"className":4481},[1068],[2975,4483,4484,4487,4490],{},[2993,4485,4486],{},"Số hạng trội",[2993,4488,4489],{},"Cộng hai biểu thức",[2993,4491,4492],{},"Giữ số hạng lớn hơn",[2975,4494,4495,4498,4532],{},[2993,4496,4497],{},"Bỏ hằng số",[2993,4499,4500,4501],{},"Nhân với hằng số ",[1000,4502,4504,4518],{"className":4503},[1003],[1000,4505,4507],{"className":4506},[1007],[1009,4508,4509],{"xmlns":1011},[1013,4510,4511,4516],{},[1016,4512,4513],{},[1019,4514,4515],{},"k",[1034,4517,4515],{"encoding":1036},[1000,4519,4521],{"className":4520,"ariaHidden":1042},[1041],[1000,4522,4524,4528],{"className":4523},[1046],[1000,4525],{"className":4526,"style":4527},[1050],"height:0.6944em;",[1000,4529,4515],{"className":4530,"style":4531},[1055,1056],"margin-right:0.0315em;",[2993,4533,4534,4535,4563],{},"Bỏ ",[1000,4536,4538,4551],{"className":4537},[1003],[1000,4539,4541],{"className":4540},[1007],[1009,4542,4543],{"xmlns":1011},[1013,4544,4545,4549],{},[1016,4546,4547],{},[1019,4548,4515],{},[1034,4550,4515],{"encoding":1036},[1000,4552,4554],{"className":4553,"ariaHidden":1042},[1041],[1000,4555,4557,4560],{"className":4556},[1046],[1000,4558],{"className":4559,"style":4527},[1050],[1000,4561,4515],{"className":4562,"style":4531},[1055,1056]," đi",[973,4565,1295,4566,4632,4633,4676,4677,4755,4756,2958],{},[1000,4567,4569,4593],{"className":4568},[1003],[1000,4570,4572],{"className":4571},[1007],[1009,4573,4574],{"xmlns":1011},[1013,4575,4576,4590],{},[1016,4577,4578,4580,4582,4584,4586,4588],{},[1019,4579,1084],{},[1023,4581,1026],{"stretchy":1025},[1320,4583,4017],{},[1023,4585,1333],{},[1019,4587,1029],{},[1023,4589,1032],{"stretchy":1025},[1034,4591,4592],{"encoding":1036},"O(1 + n)",[1000,4594,4596,4620],{"className":4595,"ariaHidden":1042},[1041],[1000,4597,4599,4602,4605,4608,4611,4614,4617],{"className":4598},[1046],[1000,4600],{"className":4601,"style":1051},[1050],[1000,4603,1084],{"className":4604,"style":1113},[1055,1056],[1000,4606,1026],{"className":4607},[1061],[1000,4609,4017],{"className":4610},[1055],[1000,4612],{"className":4613,"style":1434},[1371],[1000,4615,1333],{"className":4616},[1438],[1000,4618],{"className":4619,"style":1434},[1371],[1000,4621,4623,4626,4629],{"className":4622},[1046],[1000,4624],{"className":4625,"style":1051},[1050],[1000,4627,1029],{"className":4628},[1055,1056],[1000,4630,1032],{"className":4631},[1068]," thành ",[1000,4634,4636,4655],{"className":4635},[1003],[1000,4637,4639],{"className":4638},[1007],[1009,4640,4641],{"xmlns":1011},[1013,4642,4643,4653],{},[1016,4644,4645,4647,4649,4651],{},[1019,4646,1084],{},[1023,4648,1026],{"stretchy":1025},[1019,4650,1029],{},[1023,4652,1032],{"stretchy":1025},[1034,4654,2784],{"encoding":1036},[1000,4656,4658],{"className":4657,"ariaHidden":1042},[1041],[1000,4659,4661,4664,4667,4670,4673],{"className":4660},[1046],[1000,4662],{"className":4663,"style":1051},[1050],[1000,4665,1084],{"className":4666,"style":1113},[1055,1056],[1000,4668,1026],{"className":4669},[1061],[1000,4671,1029],{"className":4672},[1055,1056],[1000,4674,1032],{"className":4675},[1068],". Ví dụ: ",[1000,4678,4680,4710],{"className":4679},[1003],[1000,4681,4683],{"className":4682},[1007],[1009,4684,4685],{"xmlns":1011},[1013,4686,4687,4707],{},[1016,4688,4689,4691,4693,4695,4697,4699,4701,4703,4705],{},[1019,4690,1084],{},[1023,4692,1026],{"stretchy":1025},[1019,4694,4515],{},[1023,4696,4167],{},[1019,4698,1021],{},[1023,4700,1026],{"stretchy":1025},[1019,4702,1029],{},[1023,4704,1032],{"stretchy":1025},[1023,4706,1032],{"stretchy":1025},[1034,4708,4709],{"encoding":1036},"O(k \\times f(n))",[1000,4711,4713,4737],{"className":4712,"ariaHidden":1042},[1041],[1000,4714,4716,4719,4722,4725,4728,4731,4734],{"className":4715},[1046],[1000,4717],{"className":4718,"style":1051},[1050],[1000,4720,1084],{"className":4721,"style":1113},[1055,1056],[1000,4723,1026],{"className":4724},[1061],[1000,4726,4515],{"className":4727,"style":4531},[1055,1056],[1000,4729],{"className":4730,"style":1434},[1371],[1000,4732,4167],{"className":4733},[1438],[1000,4735],{"className":4736,"style":1434},[1371],[1000,4738,4740,4743,4746,4749,4752],{"className":4739},[1046],[1000,4741],{"className":4742,"style":1051},[1050],[1000,4744,1021],{"className":4745,"style":1057},[1055,1056],[1000,4747,1026],{"className":4748},[1061],[1000,4750,1029],{"className":4751},[1055,1056],[1000,4753,1130],{"className":4754},[1068]," chính là ",[1000,4757,4759,4785],{"className":4758},[1003],[1000,4760,4762],{"className":4761},[1007],[1009,4763,4764],{"xmlns":1011},[1013,4765,4766,4782],{},[1016,4767,4768,4770,4772,4774,4776,4778,4780],{},[1019,4769,1084],{},[1023,4771,1026],{"stretchy":1025},[1019,4773,1021],{},[1023,4775,1026],{"stretchy":1025},[1019,4777,1029],{},[1023,4779,1032],{"stretchy":1025},[1023,4781,1032],{"stretchy":1025},[1034,4783,4784],{"encoding":1036},"O(f(n))",[1000,4786,4788],{"className":4787,"ariaHidden":1042},[1041],[1000,4789,4791,4794,4797,4800,4803,4806,4809],{"className":4790},[1046],[1000,4792],{"className":4793,"style":1051},[1050],[1000,4795,1084],{"className":4796,"style":1113},[1055,1056],[1000,4798,1026],{"className":4799},[1061],[1000,4801,1021],{"className":4802,"style":1057},[1055,1056],[1000,4804,1026],{"className":4805},[1061],[1000,4807,1029],{"className":4808},[1055,1056],[1000,4810,1130],{"className":4811},[1068],[973,4813,4814],{},"Một lỗi phổ biến: vẽ đồ thị vài điểm rồi kết luận Big-O. Hai đường cong có thể giao nhau nhiều lần. Vẽ chỉ giúp hình dung, chứng minh vẫn cần đại số.",[968,4816,4818],{"id":4817},"_6-bốn-lớp-tăng-trưởng-nền-tảng","6. Bốn lớp tăng trưởng nền tảng",[973,4820,4821,4822,4866],{},"Lớp hằng số ",[1000,4823,4825,4845],{"className":4824},[1003],[1000,4826,4828],{"className":4827},[1007],[1009,4829,4830],{"xmlns":1011},[1013,4831,4832,4842],{},[1016,4833,4834,4836,4838,4840],{},[1019,4835,1084],{},[1023,4837,1026],{"stretchy":1025},[1320,4839,4017],{},[1023,4841,1032],{"stretchy":1025},[1034,4843,4844],{"encoding":1036},"O(1)",[1000,4846,4848],{"className":4847,"ariaHidden":1042},[1041],[1000,4849,4851,4854,4857,4860,4863],{"className":4850},[1046],[1000,4852],{"className":4853,"style":1051},[1050],[1000,4855,1084],{"className":4856,"style":1113},[1055,1056],[1000,4858,1026],{"className":4859},[1061],[1000,4861,4017],{"className":4862},[1055],[1000,4864,1032],{"className":4865},[1068]," tốn chi phí như nhau với mọi n. Ví dụ: đọc phần tử mảng theo vị trí, đẩy và bật ngăn xếp.",[973,4868,4869],{},"Đường chi phí của nó nằm ngang. Giống như lấy một món trong tủ, tủ to hay nhỏ cũng một tay.",[973,4871,4872,4873,4935],{},"Lớp logarit ",[1000,4874,4876,4902],{"className":4875},[1003],[1000,4877,4879],{"className":4878},[1007],[1009,4880,4881],{"xmlns":1011},[1013,4882,4883,4899],{},[1016,4884,4885,4887,4889,4892,4895,4897],{},[1019,4886,1084],{},[1023,4888,1026],{"stretchy":1025},[1019,4890,4891],{},"log",[1023,4893,4894],{},"⁡",[1019,4896,1029],{},[1023,4898,1032],{"stretchy":1025},[1034,4900,4901],{"encoding":1036},"O(\\log n)",[1000,4903,4905],{"className":4904,"ariaHidden":1042},[1041],[1000,4906,4908,4911,4914,4917,4925,4929,4932],{"className":4907},[1046],[1000,4909],{"className":4910,"style":1051},[1050],[1000,4912,1084],{"className":4913,"style":1113},[1055,1056],[1000,4915,1026],{"className":4916},[1061],[1000,4918,4921,4922],{"className":4919},[4920],"mop","lo",[1000,4923,1089],{"style":4924},"margin-right:0.0139em;",[1000,4926],{"className":4927,"style":4928},[1371],"margin-right:0.1667em;",[1000,4930,1029],{"className":4931},[1055,1056],[1000,4933,1032],{"className":4934},[1068]," thu hẹp phạm vi mỗi bước. Ví dụ: tìm kiếm nhị phân loại bỏ một nửa mảng sau mỗi lần so sánh.",[973,4937,4938,4939,4982,4983,5068],{},"Giống như tra từ điển: mở giữa, bỏ nửa đầu, rồi lặp lại. Sau ",[1000,4940,4942,4961],{"className":4941},[1003],[1000,4943,4945],{"className":4944},[1007],[1009,4946,4947],{"xmlns":1011},[1013,4948,4949,4959],{},[1016,4950,4951,4953,4955,4957],{},[1019,4952,1084],{},[1023,4954,1026],{"stretchy":1025},[1320,4956,4017],{},[1023,4958,1032],{"stretchy":1025},[1034,4960,4844],{"encoding":1036},[1000,4962,4964],{"className":4963,"ariaHidden":1042},[1041],[1000,4965,4967,4970,4973,4976,4979],{"className":4966},[1046],[1000,4968],{"className":4969,"style":1051},[1050],[1000,4971,1084],{"className":4972,"style":1113},[1055,1056],[1000,4974,1026],{"className":4975},[1061],[1000,4977,4017],{"className":4978},[1055],[1000,4980,1032],{"className":4981},[1068],", đây là lớp tốt nhất: ",[1000,4984,4986,5009],{"className":4985},[1003],[1000,4987,4989],{"className":4988},[1007],[1009,4990,4991],{"xmlns":1011},[1013,4992,4993,5006],{},[1016,4994,4995,4997,4999],{},[1019,4996,1029],{},[1023,4998,1318],{},[1324,5000,5001,5003],{},[1320,5002,1343],{},[1320,5004,5005],{},"6",[1034,5007,5008],{"encoding":1036},"n = 10^6",[1000,5010,5012,5030],{"className":5011,"ariaHidden":1042},[1041],[1000,5013,5015,5018,5021,5024,5027],{"className":5014},[1046],[1000,5016],{"className":5017,"style":1762},[1050],[1000,5019,1029],{"className":5020},[1055,1056],[1000,5022],{"className":5023,"style":1372},[1371],[1000,5025,1318],{"className":5026},[1376],[1000,5028],{"className":5029,"style":1372},[1371],[1000,5031,5033,5036,5039],{"className":5032},[1046],[1000,5034],{"className":5035,"style":1412},[1050],[1000,5037,4017],{"className":5038},[1055],[1000,5040,5042,5045],{"className":5041},[1055],[1000,5043,1786],{"className":5044},[1055],[1000,5046,5048],{"className":5047},[1399],[1000,5049,5051],{"className":5050},[1403],[1000,5052,5054],{"className":5053},[1407],[1000,5055,5057],{"className":5056,"style":1412},[1411],[1000,5058,5059,5062],{"style":1415},[1000,5060],{"className":5061,"style":1420},[1419],[1000,5063,5065],{"className":5064},[1424,1425,1426,1427],[1000,5066,5005],{"className":5067},[1055,1427]," chỉ cần khoảng 20 bước.",[973,5070,5071,5072,5115],{},"Lớp tuyến tính ",[1000,5073,5075,5094],{"className":5074},[1003],[1000,5076,5078],{"className":5077},[1007],[1009,5079,5080],{"xmlns":1011},[1013,5081,5082,5092],{},[1016,5083,5084,5086,5088,5090],{},[1019,5085,1084],{},[1023,5087,1026],{"stretchy":1025},[1019,5089,1029],{},[1023,5091,1032],{"stretchy":1025},[1034,5093,2784],{"encoding":1036},[1000,5095,5097],{"className":5096,"ariaHidden":1042},[1041],[1000,5098,5100,5103,5106,5109,5112],{"className":5099},[1046],[1000,5101],{"className":5102,"style":1051},[1050],[1000,5104,1084],{"className":5105,"style":1113},[1055,1056],[1000,5107,1026],{"className":5108},[1061],[1000,5110,1029],{"className":5111},[1055,1056],[1000,5113,1032],{"className":5114},[1068]," tăng đều theo đầu vào. Ví dụ: duyệt danh sách để tính tổng hay tìm số nhỏ nhất.",[973,5117,5118,5119,5192],{},"Giống như điểm danh cả lớp: lớp đông gấp đôi thì mất giờ gấp đôi. Lớp bậc hai ",[1000,5120,5122,5145],{"className":5121},[1003],[1000,5123,5125],{"className":5124},[1007],[1009,5126,5127],{"xmlns":1011},[1013,5128,5129,5143],{},[1016,5130,5131,5133,5135,5141],{},[1019,5132,1084],{},[1023,5134,1026],{"stretchy":1025},[1324,5136,5137,5139],{},[1019,5138,1029],{},[1320,5140,1330],{},[1023,5142,1032],{"stretchy":1025},[1034,5144,1500],{"encoding":1036},[1000,5146,5148],{"className":5147,"ariaHidden":1042},[1041],[1000,5149,5151,5154,5157,5160,5189],{"className":5150},[1046],[1000,5152],{"className":5153,"style":1510},[1050],[1000,5155,1084],{"className":5156,"style":1113},[1055,1056],[1000,5158,1026],{"className":5159},[1061],[1000,5161,5163,5166],{"className":5162},[1055],[1000,5164,1029],{"className":5165},[1055,1056],[1000,5167,5169],{"className":5168},[1399],[1000,5170,5172],{"className":5171},[1403],[1000,5173,5175],{"className":5174},[1407],[1000,5176,5178],{"className":5177,"style":1412},[1411],[1000,5179,5180,5183],{"style":1415},[1000,5181],{"className":5182,"style":1420},[1419],[1000,5184,5186],{"className":5185},[1424,1425,1426,1427],[1000,5187,1330],{"className":5188},[1055,1427],[1000,5190,1032],{"className":5191},[1068]," tăng theo bình phương đầu vào.",[973,5194,5195,5196,5271],{},"Ví dụ: hai vòng lặp lồng nhau, liệt kê mọi cặp trong danh sách. Số cặp bằng ",[1000,5197,5199,5228],{"className":5198},[1003],[1000,5200,5202],{"className":5201},[1007],[1009,5203,5204],{"xmlns":1011},[1013,5205,5206,5225],{},[1016,5207,5208,5210,5212,5214,5217,5219,5221,5223],{},[1019,5209,1029],{},[1023,5211,1026],{"stretchy":1025},[1019,5213,1029],{},[1023,5215,5216],{},"−",[1320,5218,4017],{},[1023,5220,1032],{"stretchy":1025},[1019,5222,1155],{"mathvariant":1154},[1320,5224,1330],{},[1034,5226,5227],{"encoding":1036},"n(n-1)\u002F2",[1000,5229,5231,5255],{"className":5230,"ariaHidden":1042},[1041],[1000,5232,5234,5237,5240,5243,5246,5249,5252],{"className":5233},[1046],[1000,5235],{"className":5236,"style":1051},[1050],[1000,5238,1029],{"className":5239},[1055,1056],[1000,5241,1026],{"className":5242},[1061],[1000,5244,1029],{"className":5245},[1055,1056],[1000,5247],{"className":5248,"style":1434},[1371],[1000,5250,5216],{"className":5251},[1438],[1000,5253],{"className":5254,"style":1434},[1371],[1000,5256,5258,5261,5264,5267],{"className":5257},[1046],[1000,5259],{"className":5260,"style":1051},[1050],[1000,5262,4017],{"className":5263},[1055],[1000,5265,1032],{"className":5266},[1068],[1000,5268,5270],{"className":5269},[1055],"\u002F2",". Giống như mọi người trong lớp bắt tay nhau từng cặp.",[973,5273,5274,5275,5348,5349,5432,5433,5499],{},"Trong bốn lớp, ",[1000,5276,5278,5301],{"className":5277},[1003],[1000,5279,5281],{"className":5280},[1007],[1009,5282,5283],{"xmlns":1011},[1013,5284,5285,5299],{},[1016,5286,5287,5289,5291,5297],{},[1019,5288,1084],{},[1023,5290,1026],{"stretchy":1025},[1324,5292,5293,5295],{},[1019,5294,1029],{},[1320,5296,1330],{},[1023,5298,1032],{"stretchy":1025},[1034,5300,1500],{"encoding":1036},[1000,5302,5304],{"className":5303,"ariaHidden":1042},[1041],[1000,5305,5307,5310,5313,5316,5345],{"className":5306},[1046],[1000,5308],{"className":5309,"style":1510},[1050],[1000,5311,1084],{"className":5312,"style":1113},[1055,1056],[1000,5314,1026],{"className":5315},[1061],[1000,5317,5319,5322],{"className":5318},[1055],[1000,5320,1029],{"className":5321},[1055,1056],[1000,5323,5325],{"className":5324},[1399],[1000,5326,5328],{"className":5327},[1403],[1000,5329,5331],{"className":5330},[1407],[1000,5332,5334],{"className":5333,"style":1412},[1411],[1000,5335,5336,5339],{"style":1415},[1000,5337],{"className":5338,"style":1420},[1419],[1000,5340,5342],{"className":5341},[1424,1425,1426,1427],[1000,5343,1330],{"className":5344},[1055,1427],[1000,5346,1032],{"className":5347},[1068]," kém nhất. Với ",[1000,5350,5352,5373],{"className":5351},[1003],[1000,5353,5355],{"className":5354},[1007],[1009,5356,5357],{"xmlns":1011},[1013,5358,5359,5371],{},[1016,5360,5361,5363,5365],{},[1019,5362,1029],{},[1023,5364,1318],{},[1324,5366,5367,5369],{},[1320,5368,1343],{},[1320,5370,5005],{},[1034,5372,5008],{"encoding":1036},[1000,5374,5376,5394],{"className":5375,"ariaHidden":1042},[1041],[1000,5377,5379,5382,5385,5388,5391],{"className":5378},[1046],[1000,5380],{"className":5381,"style":1762},[1050],[1000,5383,1029],{"className":5384},[1055,1056],[1000,5386],{"className":5387,"style":1372},[1371],[1000,5389,1318],{"className":5390},[1376],[1000,5392],{"className":5393,"style":1372},[1371],[1000,5395,5397,5400,5403],{"className":5396},[1046],[1000,5398],{"className":5399,"style":1412},[1050],[1000,5401,4017],{"className":5402},[1055],[1000,5404,5406,5409],{"className":5405},[1055],[1000,5407,1786],{"className":5408},[1055],[1000,5410,5412],{"className":5411},[1399],[1000,5413,5415],{"className":5414},[1403],[1000,5416,5418],{"className":5417},[1407],[1000,5419,5421],{"className":5420,"style":1412},[1411],[1000,5422,5423,5426],{"style":1415},[1000,5424],{"className":5425,"style":1420},[1419],[1000,5427,5429],{"className":5428},[1424,1425,1426,1427],[1000,5430,5005],{"className":5431},[1055,1427],", nó cần cỡ ",[1000,5434,5436,5455],{"className":5435},[1003],[1000,5437,5439],{"className":5438},[1007],[1009,5440,5441],{"xmlns":1011},[1013,5442,5443,5452],{},[1016,5444,5445],{},[1324,5446,5447,5449],{},[1320,5448,1343],{},[1320,5450,5451],{},"12",[1034,5453,5454],{"encoding":1036},"10^{12}",[1000,5456,5458],{"className":5457,"ariaHidden":1042},[1041],[1000,5459,5461,5464,5467],{"className":5460},[1046],[1000,5462],{"className":5463,"style":1412},[1050],[1000,5465,4017],{"className":5466},[1055],[1000,5468,5470,5473],{"className":5469},[1055],[1000,5471,1786],{"className":5472},[1055],[1000,5474,5476],{"className":5475},[1399],[1000,5477,5479],{"className":5478},[1403],[1000,5480,5482],{"className":5481},[1407],[1000,5483,5485],{"className":5484,"style":1412},[1411],[1000,5486,5487,5490],{"style":1415},[1000,5488],{"className":5489,"style":1420},[1419],[1000,5491,5493],{"className":5492},[1424,1425,1426,1427],[1000,5494,5496],{"className":5495},[1055,1427],[1000,5497,5451],{"className":5498},[1055,1427]," bước, quá chậm cho một lần chạy thông thường.",[973,5501,5502],{},"Hai lớp nữa gặp suốt khóa học:",[5504,5505,5506,5691],"ul",{},[5507,5508,5509,5573,5574,2268,5617,5690],"li",{},[1000,5510,5512,5538],{"className":5511},[1003],[1000,5513,5515],{"className":5514},[1007],[1009,5516,5517],{"xmlns":1011},[1013,5518,5519,5535],{},[1016,5520,5521,5523,5525,5527,5529,5531,5533],{},[1019,5522,1084],{},[1023,5524,1026],{"stretchy":1025},[1019,5526,1029],{},[1019,5528,4891],{},[1023,5530,4894],{},[1019,5532,1029],{},[1023,5534,1032],{"stretchy":1025},[1034,5536,5537],{"encoding":1036},"O(n \\log n)",[1000,5539,5541],{"className":5540,"ariaHidden":1042},[1041],[1000,5542,5544,5547,5550,5553,5556,5559,5564,5567,5570],{"className":5543},[1046],[1000,5545],{"className":5546,"style":1051},[1050],[1000,5548,1084],{"className":5549,"style":1113},[1055,1056],[1000,5551,1026],{"className":5552},[1061],[1000,5554,1029],{"className":5555},[1055,1056],[1000,5557],{"className":5558,"style":4928},[1371],[1000,5560,4921,5562],{"className":5561},[4920],[1000,5563,1089],{"style":4924},[1000,5565],{"className":5566,"style":4928},[1371],[1000,5568,1029],{"className":5569},[1055,1056],[1000,5571,1032],{"className":5572},[1068]," nằm giữa ",[1000,5575,5577,5596],{"className":5576},[1003],[1000,5578,5580],{"className":5579},[1007],[1009,5581,5582],{"xmlns":1011},[1013,5583,5584,5594],{},[1016,5585,5586,5588,5590,5592],{},[1019,5587,1084],{},[1023,5589,1026],{"stretchy":1025},[1019,5591,1029],{},[1023,5593,1032],{"stretchy":1025},[1034,5595,2784],{"encoding":1036},[1000,5597,5599],{"className":5598,"ariaHidden":1042},[1041],[1000,5600,5602,5605,5608,5611,5614],{"className":5601},[1046],[1000,5603],{"className":5604,"style":1051},[1050],[1000,5606,1084],{"className":5607,"style":1113},[1055,1056],[1000,5609,1026],{"className":5610},[1061],[1000,5612,1029],{"className":5613},[1055,1056],[1000,5615,1032],{"className":5616},[1068],[1000,5618,5620,5643],{"className":5619},[1003],[1000,5621,5623],{"className":5622},[1007],[1009,5624,5625],{"xmlns":1011},[1013,5626,5627,5641],{},[1016,5628,5629,5631,5633,5639],{},[1019,5630,1084],{},[1023,5632,1026],{"stretchy":1025},[1324,5634,5635,5637],{},[1019,5636,1029],{},[1320,5638,1330],{},[1023,5640,1032],{"stretchy":1025},[1034,5642,1500],{"encoding":1036},[1000,5644,5646],{"className":5645,"ariaHidden":1042},[1041],[1000,5647,5649,5652,5655,5658,5687],{"className":5648},[1046],[1000,5650],{"className":5651,"style":1510},[1050],[1000,5653,1084],{"className":5654,"style":1113},[1055,1056],[1000,5656,1026],{"className":5657},[1061],[1000,5659,5661,5664],{"className":5660},[1055],[1000,5662,1029],{"className":5663},[1055,1056],[1000,5665,5667],{"className":5666},[1399],[1000,5668,5670],{"className":5669},[1403],[1000,5671,5673],{"className":5672},[1407],[1000,5674,5676],{"className":5675,"style":1412},[1411],[1000,5677,5678,5681],{"style":1415},[1000,5679],{"className":5680,"style":1420},[1419],[1000,5682,5684],{"className":5683},[1424,1425,1426,1427],[1000,5685,1330],{"className":5686},[1055,1427],[1000,5688,1032],{"className":5689},[1068],". Đây là chi phí của các thuật toán sắp xếp hiệu quả như merge sort, heap sort.",[5507,5692,5693,2268,5768,5816,5817,5845],{},[1000,5694,5696,5720],{"className":5695},[1003],[1000,5697,5699],{"className":5698},[1007],[1009,5700,5701],{"xmlns":1011},[1013,5702,5703,5717],{},[1016,5704,5705,5707,5709,5715],{},[1019,5706,1084],{},[1023,5708,1026],{"stretchy":1025},[1324,5710,5711,5713],{},[1320,5712,1330],{},[1019,5714,1029],{},[1023,5716,1032],{"stretchy":1025},[1034,5718,5719],{"encoding":1036},"O(2^n)",[1000,5721,5723],{"className":5722,"ariaHidden":1042},[1041],[1000,5724,5726,5729,5732,5735,5765],{"className":5725},[1046],[1000,5727],{"className":5728,"style":1051},[1050],[1000,5730,1084],{"className":5731,"style":1113},[1055,1056],[1000,5733,1026],{"className":5734},[1061],[1000,5736,5738,5741],{"className":5737},[1055],[1000,5739,1330],{"className":5740},[1055],[1000,5742,5744],{"className":5743},[1399],[1000,5745,5747],{"className":5746},[1403],[1000,5748,5750],{"className":5749},[1407],[1000,5751,5754],{"className":5752,"style":5753},[1411],"height:0.6644em;",[1000,5755,5756,5759],{"style":1415},[1000,5757],{"className":5758,"style":1420},[1419],[1000,5760,5762],{"className":5761},[1424,1425,1426,1427],[1000,5763,1029],{"className":5764},[1055,1056,1427],[1000,5766,1032],{"className":5767},[1068],[1000,5769,5771,5794],{"className":5770},[1003],[1000,5772,5774],{"className":5773},[1007],[1009,5775,5776],{"xmlns":1011},[1013,5777,5778,5791],{},[1016,5779,5780,5782,5784,5786,5789],{},[1019,5781,1084],{},[1023,5783,1026],{"stretchy":1025},[1019,5785,1029],{},[1023,5787,5788],{"stretchy":1025},"!",[1023,5790,1032],{"stretchy":1025},[1034,5792,5793],{"encoding":1036},"O(n!)",[1000,5795,5797],{"className":5796,"ariaHidden":1042},[1041],[1000,5798,5800,5803,5806,5809,5812],{"className":5799},[1046],[1000,5801],{"className":5802,"style":1051},[1050],[1000,5804,1084],{"className":5805,"style":1113},[1055,1056],[1000,5807,1026],{"className":5808},[1061],[1000,5810,1029],{"className":5811},[1055,1056],[1000,5813,5815],{"className":5814},[1068],"!)"," là lớp mũ và giai thừa, ví dụ vét cạn mọi tập con hay mọi hoán vị. Chỉ dùng được khi ",[1000,5818,5820,5833],{"className":5819},[1003],[1000,5821,5823],{"className":5822},[1007],[1009,5824,5825],{"xmlns":1011},[1013,5826,5827,5831],{},[1016,5828,5829],{},[1019,5830,1029],{},[1034,5832,1029],{"encoding":1036},[1000,5834,5836],{"className":5835,"ariaHidden":1042},[1041],[1000,5837,5839,5842],{"className":5838},[1046],[1000,5840],{"className":5841,"style":1762},[1050],[1000,5843,1029],{"className":5844},[1055,1056]," rất nhỏ.",[2969,5847,5848,6188],{},[2972,5849,5850],{},[2975,5851,5852,5882,5972,6066,6127],{},[2978,5853,5854],{},[1000,5855,5857,5870],{"className":5856},[1003],[1000,5858,5860],{"className":5859},[1007],[1009,5861,5862],{"xmlns":1011},[1013,5863,5864,5868],{},[1016,5865,5866],{},[1019,5867,1029],{},[1034,5869,1029],{"encoding":1036},[1000,5871,5873],{"className":5872,"ariaHidden":1042},[1041],[1000,5874,5876,5879],{"className":5875},[1046],[1000,5877],{"className":5878,"style":1762},[1050],[1000,5880,1029],{"className":5881},[1055,1056],[2978,5883,5884],{},[1000,5885,5887,5911],{"className":5886},[1003],[1000,5888,5890],{"className":5889},[1007],[1009,5891,5892],{"xmlns":1011},[1013,5893,5894,5908],{},[1016,5895,5896,5906],{},[1780,5897,5898,5904],{},[1016,5899,5900,5902],{},[1019,5901,4891],{},[1023,5903,4894],{},[1320,5905,1330],{},[1019,5907,1029],{},[1034,5909,5910],{"encoding":1036},"\\log_2 n",[1000,5912,5914],{"className":5913,"ariaHidden":1042},[1041],[1000,5915,5917,5921,5966,5969],{"className":5916},[1046],[1000,5918],{"className":5919,"style":5920},[1050],"height:0.9386em;vertical-align:-0.2441em;",[1000,5922,5924,5929],{"className":5923},[4920],[1000,5925,4921,5927],{"className":5926},[4920],[1000,5928,1089],{"style":4924},[1000,5930,5932],{"className":5931},[1399],[1000,5933,5935,5957],{"className":5934},[1403,1812],[1000,5936,5938,5954],{"className":5937},[1407],[1000,5939,5942],{"className":5940,"style":5941},[1411],"height:0.207em;",[1000,5943,5945,5948],{"style":5944},"top:-2.4559em;margin-right:0.05em;",[1000,5946],{"className":5947,"style":1420},[1419],[1000,5949,5951],{"className":5950},[1424,1425,1426,1427],[1000,5952,1330],{"className":5953},[1055,1427],[1000,5955,1836],{"className":5956},[1835],[1000,5958,5960],{"className":5959},[1407],[1000,5961,5964],{"className":5962,"style":5963},[1411],"height:0.2441em;",[1000,5965],{},[1000,5967],{"className":5968,"style":4928},[1371],[1000,5970,1029],{"className":5971},[1055,1056],[2978,5973,5974],{},[1000,5975,5977,6003],{"className":5976},[1003],[1000,5978,5980],{"className":5979},[1007],[1009,5981,5982],{"xmlns":1011},[1013,5983,5984,6000],{},[1016,5985,5986,5988,5998],{},[1019,5987,1029],{},[1780,5989,5990,5996],{},[1016,5991,5992,5994],{},[1019,5993,4891],{},[1023,5995,4894],{},[1320,5997,1330],{},[1019,5999,1029],{},[1034,6001,6002],{"encoding":1036},"n \\log_2 n",[1000,6004,6006],{"className":6005,"ariaHidden":1042},[1041],[1000,6007,6009,6012,6015,6018,6060,6063],{"className":6008},[1046],[1000,6010],{"className":6011,"style":5920},[1050],[1000,6013,1029],{"className":6014},[1055,1056],[1000,6016],{"className":6017,"style":4928},[1371],[1000,6019,6021,6026],{"className":6020},[4920],[1000,6022,4921,6024],{"className":6023},[4920],[1000,6025,1089],{"style":4924},[1000,6027,6029],{"className":6028},[1399],[1000,6030,6032,6052],{"className":6031},[1403,1812],[1000,6033,6035,6049],{"className":6034},[1407],[1000,6036,6038],{"className":6037,"style":5941},[1411],[1000,6039,6040,6043],{"style":5944},[1000,6041],{"className":6042,"style":1420},[1419],[1000,6044,6046],{"className":6045},[1424,1425,1426,1427],[1000,6047,1330],{"className":6048},[1055,1427],[1000,6050,1836],{"className":6051},[1835],[1000,6053,6055],{"className":6054},[1407],[1000,6056,6058],{"className":6057,"style":5963},[1411],[1000,6059],{},[1000,6061],{"className":6062,"style":4928},[1371],[1000,6064,1029],{"className":6065},[1055,1056],[2978,6067,6068],{},[1000,6069,6071,6089],{"className":6070},[1003],[1000,6072,6074],{"className":6073},[1007],[1009,6075,6076],{"xmlns":1011},[1013,6077,6078,6086],{},[1016,6079,6080],{},[1324,6081,6082,6084],{},[1019,6083,1029],{},[1320,6085,1330],{},[1034,6087,6088],{"encoding":1036},"n^2",[1000,6090,6092],{"className":6091,"ariaHidden":1042},[1041],[1000,6093,6095,6098],{"className":6094},[1046],[1000,6096],{"className":6097,"style":1412},[1050],[1000,6099,6101,6104],{"className":6100},[1055],[1000,6102,1029],{"className":6103},[1055,1056],[1000,6105,6107],{"className":6106},[1399],[1000,6108,6110],{"className":6109},[1403],[1000,6111,6113],{"className":6112},[1407],[1000,6114,6116],{"className":6115,"style":1412},[1411],[1000,6117,6118,6121],{"style":1415},[1000,6119],{"className":6120,"style":1420},[1419],[1000,6122,6124],{"className":6123},[1424,1425,1426,1427],[1000,6125,1330],{"className":6126},[1055,1427],[2978,6128,6129],{},[1000,6130,6132,6150],{"className":6131},[1003],[1000,6133,6135],{"className":6134},[1007],[1009,6136,6137],{"xmlns":1011},[1013,6138,6139,6147],{},[1016,6140,6141],{},[1324,6142,6143,6145],{},[1320,6144,1330],{},[1019,6146,1029],{},[1034,6148,6149],{"encoding":1036},"2^n",[1000,6151,6153],{"className":6152,"ariaHidden":1042},[1041],[1000,6154,6156,6159],{"className":6155},[1046],[1000,6157],{"className":6158,"style":5753},[1050],[1000,6160,6162,6165],{"className":6161},[1055],[1000,6163,1330],{"className":6164},[1055],[1000,6166,6168],{"className":6167},[1399],[1000,6169,6171],{"className":6170},[1403],[1000,6172,6174],{"className":6173},[1407],[1000,6175,6177],{"className":6176,"style":5753},[1411],[1000,6178,6179,6182],{"style":1415},[1000,6180],{"className":6181,"style":1420},[1419],[1000,6183,6185],{"className":6184},[1424,1425,1426,1427],[1000,6186,1029],{"className":6187},[1055,1056,1427],[2988,6189,6190,6205,6342],{},[2975,6191,6192,6194,6197,6200,6202],{},[2993,6193,1343],{},[2993,6195,6196],{},"3.3",[2993,6198,6199],{},"33",[2993,6201,1336],{},[2993,6203,6204],{},"1024",[2975,6206,6207,6209,6211,6275,6339],{},[2993,6208,1322],{},[2993,6210,1343],{},[2993,6212,6213],{},[1000,6214,6216,6234],{"className":6215},[1003],[1000,6217,6219],{"className":6218},[1007],[1009,6220,6221],{"xmlns":1011},[1013,6222,6223,6231],{},[1016,6224,6225],{},[1324,6226,6227,6229],{},[1320,6228,1343],{},[1320,6230,2234],{},[1034,6232,6233],{"encoding":1036},"10^4",[1000,6235,6237],{"className":6236,"ariaHidden":1042},[1041],[1000,6238,6240,6243,6246],{"className":6239},[1046],[1000,6241],{"className":6242,"style":1412},[1050],[1000,6244,4017],{"className":6245},[1055],[1000,6247,6249,6252],{"className":6248},[1055],[1000,6250,1786],{"className":6251},[1055],[1000,6253,6255],{"className":6254},[1399],[1000,6256,6258],{"className":6257},[1403],[1000,6259,6261],{"className":6260},[1407],[1000,6262,6264],{"className":6263,"style":1412},[1411],[1000,6265,6266,6269],{"style":1415},[1000,6267],{"className":6268,"style":1420},[1419],[1000,6270,6272],{"className":6271},[1424,1425,1426,1427],[1000,6273,2234],{"className":6274},[1055,1427],[2993,6276,6277],{},[1000,6278,6280,6298],{"className":6279},[1003],[1000,6281,6283],{"className":6282},[1007],[1009,6284,6285],{"xmlns":1011},[1013,6286,6287,6295],{},[1016,6288,6289],{},[1324,6290,6291,6293],{},[1320,6292,1343],{},[1320,6294,5005],{},[1034,6296,6297],{"encoding":1036},"10^6",[1000,6299,6301],{"className":6300,"ariaHidden":1042},[1041],[1000,6302,6304,6307,6310],{"className":6303},[1046],[1000,6305],{"className":6306,"style":1412},[1050],[1000,6308,4017],{"className":6309},[1055],[1000,6311,6313,6316],{"className":6312},[1055],[1000,6314,1786],{"className":6315},[1055],[1000,6317,6319],{"className":6318},[1399],[1000,6320,6322],{"className":6321},[1403],[1000,6323,6325],{"className":6324},[1407],[1000,6326,6328],{"className":6327,"style":1412},[1411],[1000,6329,6330,6333],{"style":1415},[1000,6331],{"className":6332,"style":1420},[1419],[1000,6334,6336],{"className":6335},[1424,1425,1426,1427],[1000,6337,5005],{"className":6338},[1055,1427],[2993,6340,6341],{},"quá lớn",[2975,6343,6344,6407,6410,6497,6563],{},[2993,6345,6346],{},[1000,6347,6349,6366],{"className":6348},[1003],[1000,6350,6352],{"className":6351},[1007],[1009,6353,6354],{"xmlns":1011},[1013,6355,6356,6364],{},[1016,6357,6358],{},[1324,6359,6360,6362],{},[1320,6361,1343],{},[1320,6363,5005],{},[1034,6365,6297],{"encoding":1036},[1000,6367,6369],{"className":6368,"ariaHidden":1042},[1041],[1000,6370,6372,6375,6378],{"className":6371},[1046],[1000,6373],{"className":6374,"style":1412},[1050],[1000,6376,4017],{"className":6377},[1055],[1000,6379,6381,6384],{"className":6380},[1055],[1000,6382,1786],{"className":6383},[1055],[1000,6385,6387],{"className":6386},[1399],[1000,6388,6390],{"className":6389},[1403],[1000,6391,6393],{"className":6392},[1407],[1000,6394,6396],{"className":6395,"style":1412},[1411],[1000,6397,6398,6401],{"style":1415},[1000,6399],{"className":6400,"style":1420},[1419],[1000,6402,6404],{"className":6403},[1424,1425,1426,1427],[1000,6405,5005],{"className":6406},[1055,1427],[2993,6408,6409],{},"20",[2993,6411,6412],{},[1000,6413,6415,6438],{"className":6414},[1003],[1000,6416,6418],{"className":6417},[1007],[1009,6419,6420],{"xmlns":1011},[1013,6421,6422,6435],{},[1016,6423,6424,6426,6428],{},[1320,6425,1330],{},[1023,6427,1971],{},[1324,6429,6430,6432],{},[1320,6431,1343],{},[1320,6433,6434],{},"7",[1034,6436,6437],{"encoding":1036},"2 \\cdot 10^7",[1000,6439,6441,6459],{"className":6440,"ariaHidden":1042},[1041],[1000,6442,6444,6447,6450,6453,6456],{"className":6443},[1046],[1000,6445],{"className":6446,"style":1470},[1050],[1000,6448,1330],{"className":6449},[1055],[1000,6451],{"className":6452,"style":1434},[1371],[1000,6454,1971],{"className":6455},[1438],[1000,6457],{"className":6458,"style":1434},[1371],[1000,6460,6462,6465,6468],{"className":6461},[1046],[1000,6463],{"className":6464,"style":1412},[1050],[1000,6466,4017],{"className":6467},[1055],[1000,6469,6471,6474],{"className":6470},[1055],[1000,6472,1786],{"className":6473},[1055],[1000,6475,6477],{"className":6476},[1399],[1000,6478,6480],{"className":6479},[1403],[1000,6481,6483],{"className":6482},[1407],[1000,6484,6486],{"className":6485,"style":1412},[1411],[1000,6487,6488,6491],{"style":1415},[1000,6489],{"className":6490,"style":1420},[1419],[1000,6492,6494],{"className":6493},[1424,1425,1426,1427],[1000,6495,6434],{"className":6496},[1055,1427],[2993,6498,6499],{},[1000,6500,6502,6519],{"className":6501},[1003],[1000,6503,6505],{"className":6504},[1007],[1009,6506,6507],{"xmlns":1011},[1013,6508,6509,6517],{},[1016,6510,6511],{},[1324,6512,6513,6515],{},[1320,6514,1343],{},[1320,6516,5451],{},[1034,6518,5454],{"encoding":1036},[1000,6520,6522],{"className":6521,"ariaHidden":1042},[1041],[1000,6523,6525,6528,6531],{"className":6524},[1046],[1000,6526],{"className":6527,"style":1412},[1050],[1000,6529,4017],{"className":6530},[1055],[1000,6532,6534,6537],{"className":6533},[1055],[1000,6535,1786],{"className":6536},[1055],[1000,6538,6540],{"className":6539},[1399],[1000,6541,6543],{"className":6542},[1403],[1000,6544,6546],{"className":6545},[1407],[1000,6547,6549],{"className":6548,"style":1412},[1411],[1000,6550,6551,6554],{"style":1415},[1000,6552],{"className":6553,"style":1420},[1419],[1000,6555,6557],{"className":6556},[1424,1425,1426,1427],[1000,6558,6560],{"className":6559},[1055,1427],[1000,6561,5451],{"className":6562},[1055,1427],[2993,6564,6341],{},[968,6566,6568],{"id":6567},"_7-so-sánh-và-đánh-đổi","7. So sánh và đánh đổi",[973,6570,6571],{},"Big-O giúp dự báo trước khi cài đặt. Đo thực nghiệm giúp chọn sau khi cài đặt.",[973,6573,6574],{},"Cách khôn ngoan: dùng Big-O loại sớm thiết kế xấu. Rồi đo thực nghiệm trong nhóm ứng viên còn lại.",[968,6576,6578],{"id":6577},"_8-cạm-bẫy-tư-duy","8. Cạm bẫy tư duy",[973,6580,6581,6582,6625,6626,6699],{},"Thứ nhất: lẫn hằng số với hình dạng tăng trưởng. Thuật toán ",[1000,6583,6585,6604],{"className":6584},[1003],[1000,6586,6588],{"className":6587},[1007],[1009,6589,6590],{"xmlns":1011},[1013,6591,6592,6602],{},[1016,6593,6594,6596,6598,6600],{},[1019,6595,1084],{},[1023,6597,1026],{"stretchy":1025},[1019,6599,1029],{},[1023,6601,1032],{"stretchy":1025},[1034,6603,2784],{"encoding":1036},[1000,6605,6607],{"className":6606,"ariaHidden":1042},[1041],[1000,6608,6610,6613,6616,6619,6622],{"className":6609},[1046],[1000,6611],{"className":6612,"style":1051},[1050],[1000,6614,1084],{"className":6615,"style":1113},[1055,1056],[1000,6617,1026],{"className":6618},[1061],[1000,6620,1029],{"className":6621},[1055,1056],[1000,6623,1032],{"className":6624},[1068]," với hằng số khổng lồ có thể thua ",[1000,6627,6629,6652],{"className":6628},[1003],[1000,6630,6632],{"className":6631},[1007],[1009,6633,6634],{"xmlns":1011},[1013,6635,6636,6650],{},[1016,6637,6638,6640,6642,6648],{},[1019,6639,1084],{},[1023,6641,1026],{"stretchy":1025},[1324,6643,6644,6646],{},[1019,6645,1029],{},[1320,6647,1330],{},[1023,6649,1032],{"stretchy":1025},[1034,6651,1500],{"encoding":1036},[1000,6653,6655],{"className":6654,"ariaHidden":1042},[1041],[1000,6656,6658,6661,6664,6667,6696],{"className":6657},[1046],[1000,6659],{"className":6660,"style":1510},[1050],[1000,6662,1084],{"className":6663,"style":1113},[1055,1056],[1000,6665,1026],{"className":6666},[1061],[1000,6668,6670,6673],{"className":6669},[1055],[1000,6671,1029],{"className":6672},[1055,1056],[1000,6674,6676],{"className":6675},[1399],[1000,6677,6679],{"className":6678},[1403],[1000,6680,6682],{"className":6681},[1407],[1000,6683,6685],{"className":6684,"style":1412},[1411],[1000,6686,6687,6690],{"style":1415},[1000,6688],{"className":6689,"style":1420},[1419],[1000,6691,6693],{"className":6692},[1424,1425,1426,1427],[1000,6694,1330],{"className":6695},[1055,1427],[1000,6697,1032],{"className":6698},[1068]," trên dữ liệu thực tế.",[973,6701,6702],{},"Thứ hai: hài lòng với chặn lỏng đúng nhưng vô dụng. Thứ ba: đo vài điểm rồi gán nhãn Big-O vội vàng.",[973,6704,6705,6706,6775],{},"Thứ tư: quên ngưỡng ",[1000,6707,6709,6726],{"className":6708},[1003],[1000,6710,6712],{"className":6711},[1007],[1009,6713,6714],{"xmlns":1011},[1013,6715,6716,6724],{},[1016,6717,6718],{},[1780,6719,6720,6722],{},[1019,6721,1029],{},[1320,6723,1786],{},[1034,6725,1789],{"encoding":1036},[1000,6727,6729],{"className":6728,"ariaHidden":1042},[1041],[1000,6730,6732,6735],{"className":6731},[1046],[1000,6733],{"className":6734,"style":1799},[1050],[1000,6736,6738,6741],{"className":6737},[1055],[1000,6739,1029],{"className":6740},[1055,1056],[1000,6742,6744],{"className":6743},[1399],[1000,6745,6747,6767],{"className":6746},[1403,1812],[1000,6748,6750,6764],{"className":6749},[1407],[1000,6751,6753],{"className":6752,"style":1819},[1411],[1000,6754,6755,6758],{"style":1822},[1000,6756],{"className":6757,"style":1420},[1419],[1000,6759,6761],{"className":6760},[1424,1425,1426,1427],[1000,6762,1786],{"className":6763},[1055,1427],[1000,6765,1836],{"className":6766},[1835],[1000,6768,6770],{"className":6769},[1407],[1000,6771,6773],{"className":6772,"style":1843},[1411],[1000,6774],{},". Với dữ liệu nhỏ, chọn thuật toán nào cũng gần như nhau.",[968,6777,6779],{"id":6778},"_9-ứng-dụng-của-tư-duy-này","9. Ứng dụng của tư duy này",[973,6781,6782],{},"Mỗi khi dữ liệu có thể phình to, hãy nghĩ Big-O trước. Nó cũng là ngôn ngữ chung để đọc tài liệu.",[973,6784,6785],{},"Hai người không cần cùng máy vẫn bàn được hiệu năng. Chỉ cần cùng nói Big-O.",[968,6787,6789],{"id":6788},"️-tự-kiểm-tra","✍️ Tự kiểm tra",[973,6791,6792],{},"Tự trả lời trước, rồi mở đáp án để đối chiếu.",[973,6794,6795,6799,6800,6972],{},[6796,6797,6798],"strong",{},"Câu 1."," ",[1000,6801,6803,6850],{"className":6802},[1003],[1000,6804,6806],{"className":6805},[1007],[1009,6807,6808],{"xmlns":1011},[1013,6809,6810,6847],{},[1016,6811,6812,6814,6816,6818,6820,6822,6825,6831,6833,6835,6837,6839,6841,6843,6845],{},[1019,6813,1021],{},[1023,6815,1026],{"stretchy":1025},[1019,6817,1029],{},[1023,6819,1032],{"stretchy":1025},[1023,6821,1318],{},[1320,6823,6824],{},"5",[1324,6826,6827,6829],{},[1019,6828,1029],{},[1320,6830,1330],{},[1023,6832,1333],{},[1320,6834,2082],{},[1019,6836,1029],{},[1019,6838,4891],{},[1023,6840,4894],{},[1019,6842,1029],{},[1023,6844,1333],{},[1320,6846,1336],{},[1034,6848,6849],{"encoding":1036},"f(n) = 5n^2 + 3n \\log n + 100",[1000,6851,6853,6880,6927,6963],{"className":6852,"ariaHidden":1042},[1041],[1000,6854,6856,6859,6862,6865,6868,6871,6874,6877],{"className":6855},[1046],[1000,6857],{"className":6858,"style":1051},[1050],[1000,6860,1021],{"className":6861,"style":1057},[1055,1056],[1000,6863,1026],{"className":6864},[1061],[1000,6866,1029],{"className":6867},[1055,1056],[1000,6869,1032],{"className":6870},[1068],[1000,6872],{"className":6873,"style":1372},[1371],[1000,6875,1318],{"className":6876},[1376],[1000,6878],{"className":6879,"style":1372},[1371],[1000,6881,6883,6886,6889,6918,6921,6924],{"className":6882},[1046],[1000,6884],{"className":6885,"style":1386},[1050],[1000,6887,6824],{"className":6888},[1055],[1000,6890,6892,6895],{"className":6891},[1055],[1000,6893,1029],{"className":6894},[1055,1056],[1000,6896,6898],{"className":6897},[1399],[1000,6899,6901],{"className":6900},[1403],[1000,6902,6904],{"className":6903},[1407],[1000,6905,6907],{"className":6906,"style":1412},[1411],[1000,6908,6909,6912],{"style":1415},[1000,6910],{"className":6911,"style":1420},[1419],[1000,6913,6915],{"className":6914},[1424,1425,1426,1427],[1000,6916,1330],{"className":6917},[1055,1427],[1000,6919],{"className":6920,"style":1434},[1371],[1000,6922,1333],{"className":6923},[1438],[1000,6925],{"className":6926,"style":1434},[1371],[1000,6928,6930,6934,6937,6940,6943,6948,6951,6954,6957,6960],{"className":6929},[1046],[1000,6931],{"className":6932,"style":6933},[1050],"height:0.8889em;vertical-align:-0.1944em;",[1000,6935,2082],{"className":6936},[1055],[1000,6938,1029],{"className":6939},[1055,1056],[1000,6941],{"className":6942,"style":4928},[1371],[1000,6944,4921,6946],{"className":6945},[4920],[1000,6947,1089],{"style":4924},[1000,6949],{"className":6950,"style":4928},[1371],[1000,6952,1029],{"className":6953},[1055,1056],[1000,6955],{"className":6956,"style":1434},[1371],[1000,6958,1333],{"className":6959},[1438],[1000,6961],{"className":6962,"style":1434},[1371],[1000,6964,6966,6969],{"className":6965},[1046],[1000,6967],{"className":6968,"style":1470},[1050],[1000,6970,1336],{"className":6971},[1055]," thuộc lớp Big-O chặt nhất nào?",[6974,6975,6979],"collapsible",{"close-text":6976,"name":6977,"open-text":6978},"Ẩn","đáp án","Xem",[973,6980,6981,7054,7055,7119],{},[1000,6982,6984,7007],{"className":6983},[1003],[1000,6985,6987],{"className":6986},[1007],[1009,6988,6989],{"xmlns":1011},[1013,6990,6991,7005],{},[1016,6992,6993,6995,6997,7003],{},[1019,6994,1084],{},[1023,6996,1026],{"stretchy":1025},[1324,6998,6999,7001],{},[1019,7000,1029],{},[1320,7002,1330],{},[1023,7004,1032],{"stretchy":1025},[1034,7006,1500],{"encoding":1036},[1000,7008,7010],{"className":7009,"ariaHidden":1042},[1041],[1000,7011,7013,7016,7019,7022,7051],{"className":7012},[1046],[1000,7014],{"className":7015,"style":1510},[1050],[1000,7017,1084],{"className":7018,"style":1113},[1055,1056],[1000,7020,1026],{"className":7021},[1061],[1000,7023,7025,7028],{"className":7024},[1055],[1000,7026,1029],{"className":7027},[1055,1056],[1000,7029,7031],{"className":7030},[1399],[1000,7032,7034],{"className":7033},[1403],[1000,7035,7037],{"className":7036},[1407],[1000,7038,7040],{"className":7039,"style":1412},[1411],[1000,7041,7042,7045],{"style":1415},[1000,7043],{"className":7044,"style":1420},[1419],[1000,7046,7048],{"className":7047},[1424,1425,1426,1427],[1000,7049,1330],{"className":7050},[1055,1427],[1000,7052,1032],{"className":7053},[1068],". Số hạng trội là ",[1000,7056,7058,7078],{"className":7057},[1003],[1000,7059,7061],{"className":7060},[1007],[1009,7062,7063],{"xmlns":1011},[1013,7064,7065,7075],{},[1016,7066,7067,7069],{},[1320,7068,6824],{},[1324,7070,7071,7073],{},[1019,7072,1029],{},[1320,7074,1330],{},[1034,7076,7077],{"encoding":1036},"5n^2",[1000,7079,7081],{"className":7080,"ariaHidden":1042},[1041],[1000,7082,7084,7087,7090],{"className":7083},[1046],[1000,7085],{"className":7086,"style":1412},[1050],[1000,7088,6824],{"className":7089},[1055],[1000,7091,7093,7096],{"className":7092},[1055],[1000,7094,1029],{"className":7095},[1055,1056],[1000,7097,7099],{"className":7098},[1399],[1000,7100,7102],{"className":7101},[1403],[1000,7103,7105],{"className":7104},[1407],[1000,7106,7108],{"className":7107,"style":1412},[1411],[1000,7109,7110,7113],{"style":1415},[1000,7111],{"className":7112,"style":1420},[1419],[1000,7114,7116],{"className":7115},[1424,1425,1426,1427],[1000,7117,1330],{"className":7118},[1055,1427],", bỏ hằng số 5.",[973,7121,7122,7125,7126,2617,7220,2268,7248,7317],{},[6796,7123,7124],{},"Câu 2."," Chứng minh ",[1000,7127,7129,7159],{"className":7128},[1003],[1000,7130,7132],{"className":7131},[1007],[1009,7133,7134],{"xmlns":1011},[1013,7135,7136,7156],{},[1016,7137,7138,7140,7142,7144,7146,7148,7150,7152,7154],{},[1320,7139,2082],{},[1019,7141,1029],{},[1023,7143,1333],{},[1320,7145,2077],{},[1023,7147,1663],{},[1019,7149,1084],{},[1023,7151,1026],{"stretchy":1025},[1019,7153,1029],{},[1023,7155,1032],{"stretchy":1025},[1034,7157,7158],{"encoding":1036},"3n + 40 \\in O(n)",[1000,7160,7162,7183,7202],{"className":7161,"ariaHidden":1042},[1041],[1000,7163,7165,7168,7171,7174,7177,7180],{"className":7164},[1046],[1000,7166],{"className":7167,"style":1448},[1050],[1000,7169,2082],{"className":7170},[1055],[1000,7172,1029],{"className":7173},[1055,1056],[1000,7175],{"className":7176,"style":1434},[1371],[1000,7178,1333],{"className":7179},[1438],[1000,7181],{"className":7182,"style":1434},[1371],[1000,7184,7186,7190,7193,7196,7199],{"className":7185},[1046],[1000,7187],{"className":7188,"style":7189},[1050],"height:0.6835em;vertical-align:-0.0391em;",[1000,7191,2077],{"className":7192},[1055],[1000,7194],{"className":7195,"style":1372},[1371],[1000,7197,1663],{"className":7198},[1376],[1000,7200],{"className":7201,"style":1372},[1371],[1000,7203,7205,7208,7211,7214,7217],{"className":7204},[1046],[1000,7206],{"className":7207,"style":1051},[1050],[1000,7209,1084],{"className":7210,"style":1113},[1055,1056],[1000,7212,1026],{"className":7213},[1061],[1000,7215,1029],{"className":7216},[1055,1056],[1000,7218,1032],{"className":7219},[1068],[1000,7221,7223,7236],{"className":7222},[1003],[1000,7224,7226],{"className":7225},[1007],[1009,7227,7228],{"xmlns":1011},[1013,7229,7230,7234],{},[1016,7231,7232],{},[1019,7233,1750],{},[1034,7235,1750],{"encoding":1036},[1000,7237,7239],{"className":7238,"ariaHidden":1042},[1041],[1000,7240,7242,7245],{"className":7241},[1046],[1000,7243],{"className":7244,"style":1762},[1050],[1000,7246,1750],{"className":7247},[1055,1056],[1000,7249,7251,7268],{"className":7250},[1003],[1000,7252,7254],{"className":7253},[1007],[1009,7255,7256],{"xmlns":1011},[1013,7257,7258,7266],{},[1016,7259,7260],{},[1780,7261,7262,7264],{},[1019,7263,1029],{},[1320,7265,1786],{},[1034,7267,1789],{"encoding":1036},[1000,7269,7271],{"className":7270,"ariaHidden":1042},[1041],[1000,7272,7274,7277],{"className":7273},[1046],[1000,7275],{"className":7276,"style":1799},[1050],[1000,7278,7280,7283],{"className":7279},[1055],[1000,7281,1029],{"className":7282},[1055,1056],[1000,7284,7286],{"className":7285},[1399],[1000,7287,7289,7309],{"className":7288},[1403,1812],[1000,7290,7292,7306],{"className":7291},[1407],[1000,7293,7295],{"className":7294,"style":1819},[1411],[1000,7296,7297,7300],{"style":1822},[1000,7298],{"className":7299,"style":1420},[1419],[1000,7301,7303],{"className":7302},[1424,1425,1426,1427],[1000,7304,1786],{"className":7305},[1055,1427],[1000,7307,1836],{"className":7308},[1835],[1000,7310,7312],{"className":7311},[1407],[1000,7313,7315],{"className":7314,"style":1843},[1411],[1000,7316],{}," nào?",[6974,7319,7320],{"close-text":6976,"name":6977,"open-text":6978},[973,7321,7322,7323,2148,7373,7464,7465,7517,7518,2958],{},"Chọn ",[1000,7324,7326,7343],{"className":7325},[1003],[1000,7327,7329],{"className":7328},[1007],[1009,7330,7331],{"xmlns":1011},[1013,7332,7333,7341],{},[1016,7334,7335,7337,7339],{},[1019,7336,1750],{},[1023,7338,1318],{},[1320,7340,2234],{},[1034,7342,2237],{"encoding":1036},[1000,7344,7346,7364],{"className":7345,"ariaHidden":1042},[1041],[1000,7347,7349,7352,7355,7358,7361],{"className":7348},[1046],[1000,7350],{"className":7351,"style":1762},[1050],[1000,7353,1750],{"className":7354},[1055,1056],[1000,7356],{"className":7357,"style":1372},[1371],[1000,7359,1318],{"className":7360},[1376],[1000,7362],{"className":7363,"style":1372},[1371],[1000,7365,7367,7370],{"className":7366},[1046],[1000,7368],{"className":7369,"style":1470},[1050],[1000,7371,2234],{"className":7372},[1055],[1000,7374,7376,7397],{"className":7375},[1003],[1000,7377,7379],{"className":7378},[1007],[1009,7380,7381],{"xmlns":1011},[1013,7382,7383,7395],{},[1016,7384,7385,7391,7393],{},[1780,7386,7387,7389],{},[1019,7388,1029],{},[1320,7390,1786],{},[1023,7392,1318],{},[1320,7394,2077],{},[1034,7396,2293],{"encoding":1036},[1000,7398,7400,7455],{"className":7399,"ariaHidden":1042},[1041],[1000,7401,7403,7406,7446,7449,7452],{"className":7402},[1046],[1000,7404],{"className":7405,"style":1799},[1050],[1000,7407,7409,7412],{"className":7408},[1055],[1000,7410,1029],{"className":7411},[1055,1056],[1000,7413,7415],{"className":7414},[1399],[1000,7416,7418,7438],{"className":7417},[1403,1812],[1000,7419,7421,7435],{"className":7420},[1407],[1000,7422,7424],{"className":7423,"style":1819},[1411],[1000,7425,7426,7429],{"style":1822},[1000,7427],{"className":7428,"style":1420},[1419],[1000,7430,7432],{"className":7431},[1424,1425,1426,1427],[1000,7433,1786],{"className":7434},[1055,1427],[1000,7436,1836],{"className":7437},[1835],[1000,7439,7441],{"className":7440},[1407],[1000,7442,7444],{"className":7443,"style":1843},[1411],[1000,7445],{},[1000,7447],{"className":7448,"style":1372},[1371],[1000,7450,1318],{"className":7451},[1376],[1000,7453],{"className":7454,"style":1372},[1371],[1000,7456,7458,7461],{"className":7457},[1046],[1000,7459],{"className":7460,"style":1470},[1050],[1000,7462,2077],{"className":7463},[1055],": với ",[1000,7466,7468,7486],{"className":7467},[1003],[1000,7469,7471],{"className":7470},[1007],[1009,7472,7473],{"xmlns":1011},[1013,7474,7475,7483],{},[1016,7476,7477,7479,7481],{},[1019,7478,1029],{},[1023,7480,3315],{},[1320,7482,2077],{},[1034,7484,7485],{"encoding":1036},"n \\ge 40",[1000,7487,7489,7508],{"className":7488,"ariaHidden":1042},[1041],[1000,7490,7492,7496,7499,7502,7505],{"className":7491},[1046],[1000,7493],{"className":7494,"style":7495},[1050],"height:0.7719em;vertical-align:-0.136em;",[1000,7497,1029],{"className":7498},[1055,1056],[1000,7500],{"className":7501,"style":1372},[1371],[1000,7503,3315],{"className":7504},[1376],[1000,7506],{"className":7507,"style":1372},[1371],[1000,7509,7511,7514],{"className":7510},[1046],[1000,7512],{"className":7513,"style":1470},[1050],[1000,7515,2077],{"className":7516},[1055]," thì ",[1000,7519,7521,7557],{"className":7520},[1003],[1000,7522,7524],{"className":7523},[1007],[1009,7525,7526],{"xmlns":1011},[1013,7527,7528,7554],{},[1016,7529,7530,7532,7534,7536,7538,7540,7542,7544,7546,7548,7550,7552],{},[1320,7531,2082],{},[1019,7533,1029],{},[1023,7535,1333],{},[1320,7537,2077],{},[1023,7539,1966],{},[1320,7541,2082],{},[1019,7543,1029],{},[1023,7545,1333],{},[1019,7547,1029],{},[1023,7549,1318],{},[1320,7551,2234],{},[1019,7553,1029],{},[1034,7555,7556],{"encoding":1036},"3n + 40 \\le 3n + n = 4n",[1000,7558,7560,7581,7600,7621,7639],{"className":7559,"ariaHidden":1042},[1041],[1000,7561,7563,7566,7569,7572,7575,7578],{"className":7562},[1046],[1000,7564],{"className":7565,"style":1448},[1050],[1000,7567,2082],{"className":7568},[1055],[1000,7570,1029],{"className":7571},[1055,1056],[1000,7573],{"className":7574,"style":1434},[1371],[1000,7576,1333],{"className":7577},[1438],[1000,7579],{"className":7580,"style":1434},[1371],[1000,7582,7584,7588,7591,7594,7597],{"className":7583},[1046],[1000,7585],{"className":7586,"style":7587},[1050],"height:0.7804em;vertical-align:-0.136em;",[1000,7589,2077],{"className":7590},[1055],[1000,7592],{"className":7593,"style":1372},[1371],[1000,7595,1966],{"className":7596},[1376],[1000,7598],{"className":7599,"style":1372},[1371],[1000,7601,7603,7606,7609,7612,7615,7618],{"className":7602},[1046],[1000,7604],{"className":7605,"style":1448},[1050],[1000,7607,2082],{"className":7608},[1055],[1000,7610,1029],{"className":7611},[1055,1056],[1000,7613],{"className":7614,"style":1434},[1371],[1000,7616,1333],{"className":7617},[1438],[1000,7619],{"className":7620,"style":1434},[1371],[1000,7622,7624,7627,7630,7633,7636],{"className":7623},[1046],[1000,7625],{"className":7626,"style":1762},[1050],[1000,7628,1029],{"className":7629},[1055,1056],[1000,7631],{"className":7632,"style":1372},[1371],[1000,7634,1318],{"className":7635},[1376],[1000,7637],{"className":7638,"style":1372},[1371],[1000,7640,7642,7645,7648],{"className":7641},[1046],[1000,7643],{"className":7644,"style":1470},[1050],[1000,7646,2234],{"className":7647},[1055],[1000,7649,1029],{"className":7650},[1055,1056],[973,7652,7653,7656,7657,7685,7686,7716,7717,7745],{},[6796,7654,7655],{},"Câu 3."," Hai vòng lặp lồng: ngoài chạy ",[1000,7658,7660,7673],{"className":7659},[1003],[1000,7661,7663],{"className":7662},[1007],[1009,7664,7665],{"xmlns":1011},[1013,7666,7667,7671],{},[1016,7668,7669],{},[1019,7670,1029],{},[1034,7672,1029],{"encoding":1036},[1000,7674,7676],{"className":7675,"ariaHidden":1042},[1041],[1000,7677,7679,7682],{"className":7678},[1046],[1000,7680],{"className":7681,"style":1762},[1050],[1000,7683,1029],{"className":7684},[1055,1056]," lần, trong chạy từ ",[1000,7687,7689,7703],{"className":7688},[1003],[1000,7690,7692],{"className":7691},[1007],[1009,7693,7694],{"xmlns":1011},[1013,7695,7696,7701],{},[1016,7697,7698],{},[1019,7699,7700],{},"i",[1034,7702,7700],{"encoding":1036},[1000,7704,7706],{"className":7705,"ariaHidden":1042},[1041],[1000,7707,7709,7713],{"className":7708},[1046],[1000,7710],{"className":7711,"style":7712},[1050],"height:0.6595em;",[1000,7714,7700],{"className":7715},[1055,1056]," tới ",[1000,7718,7720,7733],{"className":7719},[1003],[1000,7721,7723],{"className":7722},[1007],[1009,7724,7725],{"xmlns":1011},[1013,7726,7727,7731],{},[1016,7728,7729],{},[1019,7730,1029],{},[1034,7732,1029],{"encoding":1036},[1000,7734,7736],{"className":7735,"ariaHidden":1042},[1041],[1000,7737,7739,7742],{"className":7738},[1046],[1000,7740],{"className":7741,"style":1762},[1050],[1000,7743,1029],{"className":7744},[1055,1056],". Độ phức tạp?",[6974,7747,7748],{"close-text":6976,"name":6977,"open-text":6978},[973,7749,7750,7751,7949,7950,2958],{},"Tổng số lần là ",[1000,7752,7754,7810],{"className":7753},[1003],[1000,7755,7757],{"className":7756},[1007],[1009,7758,7759],{"xmlns":1011},[1013,7760,7761,7807],{},[1016,7762,7763,7765,7767,7769,7771,7773,7775,7777,7779,7781,7783,7785,7787,7789,7791,7793,7795,7797,7799,7801,7803,7805],{},[1019,7764,1029],{},[1023,7766,1333],{},[1023,7768,1026],{"stretchy":1025},[1019,7770,1029],{},[1023,7772,5216],{},[1320,7774,4017],{},[1023,7776,1032],{"stretchy":1025},[1023,7778,1333],{},[1019,7780,2958],{"mathvariant":1154},[1019,7782,2958],{"mathvariant":1154},[1019,7784,2958],{"mathvariant":1154},[1023,7786,1333],{},[1320,7788,4017],{},[1023,7790,1318],{},[1019,7792,1029],{},[1023,7794,1026],{"stretchy":1025},[1019,7796,1029],{},[1023,7798,1333],{},[1320,7800,4017],{},[1023,7802,1032],{"stretchy":1025},[1019,7804,1155],{"mathvariant":1154},[1320,7806,1330],{},[1034,7808,7809],{"encoding":1036},"n + (n-1) + ... + 1 = n(n+1)\u002F2",[1000,7811,7813,7831,7852,7873,7892,7910,7934],{"className":7812,"ariaHidden":1042},[1041],[1000,7814,7816,7819,7822,7825,7828],{"className":7815},[1046],[1000,7817],{"className":7818,"style":2595},[1050],[1000,7820,1029],{"className":7821},[1055,1056],[1000,7823],{"className":7824,"style":1434},[1371],[1000,7826,1333],{"className":7827},[1438],[1000,7829],{"className":7830,"style":1434},[1371],[1000,7832,7834,7837,7840,7843,7846,7849],{"className":7833},[1046],[1000,7835],{"className":7836,"style":1051},[1050],[1000,7838,1026],{"className":7839},[1061],[1000,7841,1029],{"className":7842},[1055,1056],[1000,7844],{"className":7845,"style":1434},[1371],[1000,7847,5216],{"className":7848},[1438],[1000,7850],{"className":7851,"style":1434},[1371],[1000,7853,7855,7858,7861,7864,7867,7870],{"className":7854},[1046],[1000,7856],{"className":7857,"style":1051},[1050],[1000,7859,4017],{"className":7860},[1055],[1000,7862,1032],{"className":7863},[1068],[1000,7865],{"className":7866,"style":1434},[1371],[1000,7868,1333],{"className":7869},[1438],[1000,7871],{"className":7872,"style":1434},[1371],[1000,7874,7876,7879,7883,7886,7889],{"className":7875},[1046],[1000,7877],{"className":7878,"style":2595},[1050],[1000,7880,7882],{"className":7881},[1055],"...",[1000,7884],{"className":7885,"style":1434},[1371],[1000,7887,1333],{"className":7888},[1438],[1000,7890],{"className":7891,"style":1434},[1371],[1000,7893,7895,7898,7901,7904,7907],{"className":7894},[1046],[1000,7896],{"className":7897,"style":1470},[1050],[1000,7899,4017],{"className":7900},[1055],[1000,7902],{"className":7903,"style":1372},[1371],[1000,7905,1318],{"className":7906},[1376],[1000,7908],{"className":7909,"style":1372},[1371],[1000,7911,7913,7916,7919,7922,7925,7928,7931],{"className":7912},[1046],[1000,7914],{"className":7915,"style":1051},[1050],[1000,7917,1029],{"className":7918},[1055,1056],[1000,7920,1026],{"className":7921},[1061],[1000,7923,1029],{"className":7924},[1055,1056],[1000,7926],{"className":7927,"style":1434},[1371],[1000,7929,1333],{"className":7930},[1438],[1000,7932],{"className":7933,"style":1434},[1371],[1000,7935,7937,7940,7943,7946],{"className":7936},[1046],[1000,7938],{"className":7939,"style":1051},[1050],[1000,7941,4017],{"className":7942},[1055],[1000,7944,1032],{"className":7945},[1068],[1000,7947,5270],{"className":7948},[1055],", tức ",[1000,7951,7953,7976],{"className":7952},[1003],[1000,7954,7956],{"className":7955},[1007],[1009,7957,7958],{"xmlns":1011},[1013,7959,7960,7974],{},[1016,7961,7962,7964,7966,7972],{},[1019,7963,1084],{},[1023,7965,1026],{"stretchy":1025},[1324,7967,7968,7970],{},[1019,7969,1029],{},[1320,7971,1330],{},[1023,7973,1032],{"stretchy":1025},[1034,7975,1500],{"encoding":1036},[1000,7977,7979],{"className":7978,"ariaHidden":1042},[1041],[1000,7980,7982,7985,7988,7991,8020],{"className":7981},[1046],[1000,7983],{"className":7984,"style":1510},[1050],[1000,7986,1084],{"className":7987,"style":1113},[1055,1056],[1000,7989,1026],{"className":7990},[1061],[1000,7992,7994,7997],{"className":7993},[1055],[1000,7995,1029],{"className":7996},[1055,1056],[1000,7998,8000],{"className":7999},[1399],[1000,8001,8003],{"className":8002},[1403],[1000,8004,8006],{"className":8005},[1407],[1000,8007,8009],{"className":8008,"style":1412},[1411],[1000,8010,8011,8014],{"style":1415},[1000,8012],{"className":8013,"style":1420},[1419],[1000,8015,8017],{"className":8016},[1424,1425,1426,1427],[1000,8018,1330],{"className":8019},[1055,1427],[1000,8021,1032],{"className":8022},[1068],[973,8024,8025,8028,8029,8033],{},[6796,8026,8027],{},"Câu 4."," Vòng lặp ",[8030,8031,8032],"code",{},"for (i = 1; i \u003C n; i *= 2)"," chạy bao nhiêu lần?",[6974,8035,8036],{"close-text":6976,"name":6977,"open-text":6978},[973,8037,8038,8039,8122,8123,8178,8179,8207],{},"Khoảng ",[1000,8040,8042,8065],{"className":8041},[1003],[1000,8043,8045],{"className":8044},[1007],[1009,8046,8047],{"xmlns":1011},[1013,8048,8049,8063],{},[1016,8050,8051,8061],{},[1780,8052,8053,8059],{},[1016,8054,8055,8057],{},[1019,8056,4891],{},[1023,8058,4894],{},[1320,8060,1330],{},[1019,8062,1029],{},[1034,8064,5910],{"encoding":1036},[1000,8066,8068],{"className":8067,"ariaHidden":1042},[1041],[1000,8069,8071,8074,8116,8119],{"className":8070},[1046],[1000,8072],{"className":8073,"style":5920},[1050],[1000,8075,8077,8082],{"className":8076},[4920],[1000,8078,4921,8080],{"className":8079},[4920],[1000,8081,1089],{"style":4924},[1000,8083,8085],{"className":8084},[1399],[1000,8086,8088,8108],{"className":8087},[1403,1812],[1000,8089,8091,8105],{"className":8090},[1407],[1000,8092,8094],{"className":8093,"style":5941},[1411],[1000,8095,8096,8099],{"style":5944},[1000,8097],{"className":8098,"style":1420},[1419],[1000,8100,8102],{"className":8101},[1424,1425,1426,1427],[1000,8103,1330],{"className":8104},[1055,1427],[1000,8106,1836],{"className":8107},[1835],[1000,8109,8111],{"className":8110},[1407],[1000,8112,8114],{"className":8113,"style":5963},[1411],[1000,8115],{},[1000,8117],{"className":8118,"style":4928},[1371],[1000,8120,1029],{"className":8121},[1055,1056]," lần, tức ",[1000,8124,8126,8149],{"className":8125},[1003],[1000,8127,8129],{"className":8128},[1007],[1009,8130,8131],{"xmlns":1011},[1013,8132,8133,8147],{},[1016,8134,8135,8137,8139,8141,8143,8145],{},[1019,8136,1084],{},[1023,8138,1026],{"stretchy":1025},[1019,8140,4891],{},[1023,8142,4894],{},[1019,8144,1029],{},[1023,8146,1032],{"stretchy":1025},[1034,8148,4901],{"encoding":1036},[1000,8150,8152],{"className":8151,"ariaHidden":1042},[1041],[1000,8153,8155,8158,8161,8164,8169,8172,8175],{"className":8154},[1046],[1000,8156],{"className":8157,"style":1051},[1050],[1000,8159,1084],{"className":8160,"style":1113},[1055,1056],[1000,8162,1026],{"className":8163},[1061],[1000,8165,4921,8167],{"className":8166},[4920],[1000,8168,1089],{"style":4924},[1000,8170],{"className":8171,"style":4928},[1371],[1000,8173,1029],{"className":8174},[1055,1056],[1000,8176,1032],{"className":8177},[1068],", vì ",[1000,8180,8182,8195],{"className":8181},[1003],[1000,8183,8185],{"className":8184},[1007],[1009,8186,8187],{"xmlns":1011},[1013,8188,8189,8193],{},[1016,8190,8191],{},[1019,8192,7700],{},[1034,8194,7700],{"encoding":1036},[1000,8196,8198],{"className":8197,"ariaHidden":1042},[1041],[1000,8199,8201,8204],{"className":8200},[1046],[1000,8202],{"className":8203,"style":7712},[1050],[1000,8205,7700],{"className":8206},[1055,1056]," nhân đôi mỗi vòng.",[973,8209,8210,8213,8214,8248,8249,8307,8308,8336],{},[6796,8211,8212],{},"Câu 5."," Thuật toán A tốn ",[1000,8215,8217,8233],{"className":8216},[1003],[1000,8218,8220],{"className":8219},[1007],[1009,8221,8222],{"xmlns":1011},[1013,8223,8224,8230],{},[1016,8225,8226,8228],{},[1320,8227,1336],{},[1019,8229,1029],{},[1034,8231,8232],{"encoding":1036},"100n",[1000,8234,8236],{"className":8235,"ariaHidden":1042},[1041],[1000,8237,8239,8242,8245],{"className":8238},[1046],[1000,8240],{"className":8241,"style":1470},[1050],[1000,8243,1336],{"className":8244},[1055],[1000,8246,1029],{"className":8247},[1055,1056]," bước, B tốn ",[1000,8250,8252,8269],{"className":8251},[1003],[1000,8253,8255],{"className":8254},[1007],[1009,8256,8257],{"xmlns":1011},[1013,8258,8259,8267],{},[1016,8260,8261],{},[1324,8262,8263,8265],{},[1019,8264,1029],{},[1320,8266,1330],{},[1034,8268,6088],{"encoding":1036},[1000,8270,8272],{"className":8271,"ariaHidden":1042},[1041],[1000,8273,8275,8278],{"className":8274},[1046],[1000,8276],{"className":8277,"style":1412},[1050],[1000,8279,8281,8284],{"className":8280},[1055],[1000,8282,1029],{"className":8283},[1055,1056],[1000,8285,8287],{"className":8286},[1399],[1000,8288,8290],{"className":8289},[1403],[1000,8291,8293],{"className":8292},[1407],[1000,8294,8296],{"className":8295,"style":1412},[1411],[1000,8297,8298,8301],{"style":1415},[1000,8299],{"className":8300,"style":1420},[1419],[1000,8302,8304],{"className":8303},[1424,1425,1426,1427],[1000,8305,1330],{"className":8306},[1055,1427]," bước. Với ",[1000,8309,8311,8324],{"className":8310},[1003],[1000,8312,8314],{"className":8313},[1007],[1009,8315,8316],{"xmlns":1011},[1013,8317,8318,8322],{},[1016,8319,8320],{},[1019,8321,1029],{},[1034,8323,1029],{"encoding":1036},[1000,8325,8327],{"className":8326,"ariaHidden":1042},[1041],[1000,8328,8330,8333],{"className":8329},[1046],[1000,8331],{"className":8332,"style":1762},[1050],[1000,8334,1029],{"className":8335},[1055,1056]," nào thì A nhanh hơn?",[6974,8338,8339],{"close-text":6976,"name":6977,"open-text":6978},[973,8340,8341,8342,8393,8394,8446],{},"Khi ",[1000,8343,8345,8363],{"className":8344},[1003],[1000,8346,8348],{"className":8347},[1007],[1009,8349,8350],{"xmlns":1011},[1013,8351,8352,8360],{},[1016,8353,8354,8356,8358],{},[1019,8355,1029],{},[1023,8357,1863],{},[1320,8359,1336],{},[1034,8361,8362],{"encoding":1036},"n > 100",[1000,8364,8366,8384],{"className":8365,"ariaHidden":1042},[1041],[1000,8367,8369,8372,8375,8378,8381],{"className":8368},[1046],[1000,8370],{"className":8371,"style":1882},[1050],[1000,8373,1029],{"className":8374},[1055,1056],[1000,8376],{"className":8377,"style":1372},[1371],[1000,8379,1863],{"className":8380},[1376],[1000,8382],{"className":8383,"style":1372},[1371],[1000,8385,8387,8390],{"className":8386},[1046],[1000,8388],{"className":8389,"style":1470},[1050],[1000,8391,1336],{"className":8392},[1055],". Với ",[1000,8395,8397,8416],{"className":8396},[1003],[1000,8398,8400],{"className":8399},[1007],[1009,8401,8402],{"xmlns":1011},[1013,8403,8404,8413],{},[1016,8405,8406,8408,8411],{},[1019,8407,1029],{},[1023,8409,8410],{},"\u003C",[1320,8412,1336],{},[1034,8414,8415],{"encoding":1036},"n \u003C 100",[1000,8417,8419,8437],{"className":8418,"ariaHidden":1042},[1041],[1000,8420,8422,8425,8428,8431,8434],{"className":8421},[1046],[1000,8423],{"className":8424,"style":1882},[1050],[1000,8426,1029],{"className":8427},[1055,1056],[1000,8429],{"className":8430,"style":1372},[1371],[1000,8432,8410],{"className":8433},[1376],[1000,8435],{"className":8436,"style":1372},[1371],[1000,8438,8440,8443],{"className":8439},[1046],[1000,8441],{"className":8442,"style":1470},[1050],[1000,8444,1336],{"className":8445},[1055],", B ít bước hơn dù có Big-O tệ hơn.",[968,8448,8450],{"id":8449},"tóm-tắt","Tóm tắt",[5504,8452,8453,8456,8557,8560,8913,9003],{},[5507,8454,8455],{},"Big-O mô tả hình dạng tăng trưởng của chi phí, bắt nguồn từ Bachmann năm 1894.",[5507,8457,8458,8459,2268,8487,8556],{},"Chặn trên dùng cặp ",[1000,8460,8462,8475],{"className":8461},[1003],[1000,8463,8465],{"className":8464},[1007],[1009,8466,8467],{"xmlns":1011},[1013,8468,8469,8473],{},[1016,8470,8471],{},[1019,8472,1750],{},[1034,8474,1750],{"encoding":1036},[1000,8476,8478],{"className":8477,"ariaHidden":1042},[1041],[1000,8479,8481,8484],{"className":8480},[1046],[1000,8482],{"className":8483,"style":1762},[1050],[1000,8485,1750],{"className":8486},[1055,1056],[1000,8488,8490,8507],{"className":8489},[1003],[1000,8491,8493],{"className":8492},[1007],[1009,8494,8495],{"xmlns":1011},[1013,8496,8497,8505],{},[1016,8498,8499],{},[1780,8500,8501,8503],{},[1019,8502,1029],{},[1320,8504,1786],{},[1034,8506,1789],{"encoding":1036},[1000,8508,8510],{"className":8509,"ariaHidden":1042},[1041],[1000,8511,8513,8516],{"className":8512},[1046],[1000,8514],{"className":8515,"style":1799},[1050],[1000,8517,8519,8522],{"className":8518},[1055],[1000,8520,1029],{"className":8521},[1055,1056],[1000,8523,8525],{"className":8524},[1399],[1000,8526,8528,8548],{"className":8527},[1403,1812],[1000,8529,8531,8545],{"className":8530},[1407],[1000,8532,8534],{"className":8533,"style":1819},[1411],[1000,8535,8536,8539],{"style":1822},[1000,8537],{"className":8538,"style":1420},[1419],[1000,8540,8542],{"className":8541},[1424,1425,1426,1427],[1000,8543,1786],{"className":8544},[1055,1427],[1000,8546,1836],{"className":8547},[1835],[1000,8549,8551],{"className":8550},[1407],[1000,8552,8554],{"className":8553,"style":1843},[1411],[1000,8555],{},", cho phép bỏ hằng số và đầu vào nhỏ.",[5507,8558,8559],{},"Luôn tìm chặn khít thay vì chặn lỏng đúng nhưng vô dụng.",[5507,8561,8562,8563,2148,8606,2148,8661,2148,8704,2148,8767,2148,8840,2958],{},"Nắm năm quy tắc rút gọn và các lớp ",[1000,8564,8566,8585],{"className":8565},[1003],[1000,8567,8569],{"className":8568},[1007],[1009,8570,8571],{"xmlns":1011},[1013,8572,8573,8583],{},[1016,8574,8575,8577,8579,8581],{},[1019,8576,1084],{},[1023,8578,1026],{"stretchy":1025},[1320,8580,4017],{},[1023,8582,1032],{"stretchy":1025},[1034,8584,4844],{"encoding":1036},[1000,8586,8588],{"className":8587,"ariaHidden":1042},[1041],[1000,8589,8591,8594,8597,8600,8603],{"className":8590},[1046],[1000,8592],{"className":8593,"style":1051},[1050],[1000,8595,1084],{"className":8596,"style":1113},[1055,1056],[1000,8598,1026],{"className":8599},[1061],[1000,8601,4017],{"className":8602},[1055],[1000,8604,1032],{"className":8605},[1068],[1000,8607,8609,8632],{"className":8608},[1003],[1000,8610,8612],{"className":8611},[1007],[1009,8613,8614],{"xmlns":1011},[1013,8615,8616,8630],{},[1016,8617,8618,8620,8622,8624,8626,8628],{},[1019,8619,1084],{},[1023,8621,1026],{"stretchy":1025},[1019,8623,4891],{},[1023,8625,4894],{},[1019,8627,1029],{},[1023,8629,1032],{"stretchy":1025},[1034,8631,4901],{"encoding":1036},[1000,8633,8635],{"className":8634,"ariaHidden":1042},[1041],[1000,8636,8638,8641,8644,8647,8652,8655,8658],{"className":8637},[1046],[1000,8639],{"className":8640,"style":1051},[1050],[1000,8642,1084],{"className":8643,"style":1113},[1055,1056],[1000,8645,1026],{"className":8646},[1061],[1000,8648,4921,8650],{"className":8649},[4920],[1000,8651,1089],{"style":4924},[1000,8653],{"className":8654,"style":4928},[1371],[1000,8656,1029],{"className":8657},[1055,1056],[1000,8659,1032],{"className":8660},[1068],[1000,8662,8664,8683],{"className":8663},[1003],[1000,8665,8667],{"className":8666},[1007],[1009,8668,8669],{"xmlns":1011},[1013,8670,8671,8681],{},[1016,8672,8673,8675,8677,8679],{},[1019,8674,1084],{},[1023,8676,1026],{"stretchy":1025},[1019,8678,1029],{},[1023,8680,1032],{"stretchy":1025},[1034,8682,2784],{"encoding":1036},[1000,8684,8686],{"className":8685,"ariaHidden":1042},[1041],[1000,8687,8689,8692,8695,8698,8701],{"className":8688},[1046],[1000,8690],{"className":8691,"style":1051},[1050],[1000,8693,1084],{"className":8694,"style":1113},[1055,1056],[1000,8696,1026],{"className":8697},[1061],[1000,8699,1029],{"className":8700},[1055,1056],[1000,8702,1032],{"className":8703},[1068],[1000,8705,8707,8732],{"className":8706},[1003],[1000,8708,8710],{"className":8709},[1007],[1009,8711,8712],{"xmlns":1011},[1013,8713,8714,8730],{},[1016,8715,8716,8718,8720,8722,8724,8726,8728],{},[1019,8717,1084],{},[1023,8719,1026],{"stretchy":1025},[1019,8721,1029],{},[1019,8723,4891],{},[1023,8725,4894],{},[1019,8727,1029],{},[1023,8729,1032],{"stretchy":1025},[1034,8731,5537],{"encoding":1036},[1000,8733,8735],{"className":8734,"ariaHidden":1042},[1041],[1000,8736,8738,8741,8744,8747,8750,8753,8758,8761,8764],{"className":8737},[1046],[1000,8739],{"className":8740,"style":1051},[1050],[1000,8742,1084],{"className":8743,"style":1113},[1055,1056],[1000,8745,1026],{"className":8746},[1061],[1000,8748,1029],{"className":8749},[1055,1056],[1000,8751],{"className":8752,"style":4928},[1371],[1000,8754,4921,8756],{"className":8755},[4920],[1000,8757,1089],{"style":4924},[1000,8759],{"className":8760,"style":4928},[1371],[1000,8762,1029],{"className":8763},[1055,1056],[1000,8765,1032],{"className":8766},[1068],[1000,8768,8770,8793],{"className":8769},[1003],[1000,8771,8773],{"className":8772},[1007],[1009,8774,8775],{"xmlns":1011},[1013,8776,8777,8791],{},[1016,8778,8779,8781,8783,8789],{},[1019,8780,1084],{},[1023,8782,1026],{"stretchy":1025},[1324,8784,8785,8787],{},[1019,8786,1029],{},[1320,8788,1330],{},[1023,8790,1032],{"stretchy":1025},[1034,8792,1500],{"encoding":1036},[1000,8794,8796],{"className":8795,"ariaHidden":1042},[1041],[1000,8797,8799,8802,8805,8808,8837],{"className":8798},[1046],[1000,8800],{"className":8801,"style":1510},[1050],[1000,8803,1084],{"className":8804,"style":1113},[1055,1056],[1000,8806,1026],{"className":8807},[1061],[1000,8809,8811,8814],{"className":8810},[1055],[1000,8812,1029],{"className":8813},[1055,1056],[1000,8815,8817],{"className":8816},[1399],[1000,8818,8820],{"className":8819},[1403],[1000,8821,8823],{"className":8822},[1407],[1000,8824,8826],{"className":8825,"style":1412},[1411],[1000,8827,8828,8831],{"style":1415},[1000,8829],{"className":8830,"style":1420},[1419],[1000,8832,8834],{"className":8833},[1424,1425,1426,1427],[1000,8835,1330],{"className":8836},[1055,1427],[1000,8838,1032],{"className":8839},[1068],[1000,8841,8843,8866],{"className":8842},[1003],[1000,8844,8846],{"className":8845},[1007],[1009,8847,8848],{"xmlns":1011},[1013,8849,8850,8864],{},[1016,8851,8852,8854,8856,8862],{},[1019,8853,1084],{},[1023,8855,1026],{"stretchy":1025},[1324,8857,8858,8860],{},[1320,8859,1330],{},[1019,8861,1029],{},[1023,8863,1032],{"stretchy":1025},[1034,8865,5719],{"encoding":1036},[1000,8867,8869],{"className":8868,"ariaHidden":1042},[1041],[1000,8870,8872,8875,8878,8881,8910],{"className":8871},[1046],[1000,8873],{"className":8874,"style":1051},[1050],[1000,8876,1084],{"className":8877,"style":1113},[1055,1056],[1000,8879,1026],{"className":8880},[1061],[1000,8882,8884,8887],{"className":8883},[1055],[1000,8885,1330],{"className":8886},[1055],[1000,8888,8890],{"className":8889},[1399],[1000,8891,8893],{"className":8892},[1403],[1000,8894,8896],{"className":8895},[1407],[1000,8897,8899],{"className":8898,"style":5753},[1411],[1000,8900,8901,8904],{"style":1415},[1000,8902],{"className":8903,"style":1420},[1419],[1000,8905,8907],{"className":8906},[1424,1425,1426,1427],[1000,8908,1029],{"className":8909},[1055,1056,1427],[1000,8911,1032],{"className":8912},[1068],[5507,8914,8915,8943,8944,8973,8974,9002],{},[1000,8916,8918,8931],{"className":8917},[1003],[1000,8919,8921],{"className":8920},[1007],[1009,8922,8923],{"xmlns":1011},[1013,8924,8925,8929],{},[1016,8926,8927],{},[1019,8928,1084],{},[1034,8930,1084],{"encoding":1036},[1000,8932,8934],{"className":8933,"ariaHidden":1042},[1041],[1000,8935,8937,8940],{"className":8936},[1046],[1000,8938],{"className":8939,"style":3910},[1050],[1000,8941,1084],{"className":8942,"style":1113},[1055,1056]," là chặn trên, ",[1000,8945,8947,8961],{"className":8946},[1003],[1000,8948,8950],{"className":8949},[1007],[1009,8951,8952],{"xmlns":1011},[1013,8953,8954,8958],{},[1016,8955,8956],{},[1019,8957,3257],{"mathvariant":1154},[1034,8959,8960],{"encoding":1036},"\\Omega",[1000,8962,8964],{"className":8963,"ariaHidden":1042},[1041],[1000,8965,8967,8970],{"className":8966},[1046],[1000,8968],{"className":8969,"style":3910},[1050],[1000,8971,3257],{"className":8972},[1055]," là chặn dưới, ",[1000,8975,8977,8990],{"className":8976},[1003],[1000,8978,8980],{"className":8979},[1007],[1009,8981,8982],{"xmlns":1011},[1013,8983,8984,8988],{},[1016,8985,8986],{},[1019,8987,3506],{"mathvariant":1154},[1034,8989,3900],{"encoding":1036},[1000,8991,8993],{"className":8992,"ariaHidden":1042},[1041],[1000,8994,8996,8999],{"className":8995},[1046],[1000,8997],{"className":8998,"style":3910},[1050],[1000,9000,3506],{"className":9001},[1055]," là chặn khít.",[5507,9004,9005],{},"Dùng Big-O để loại sớm, đo thực nghiệm để chốt cuối.",{"title":9007,"searchDepth":68,"depth":68,"links":9008},"",[9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019],{"id":970,"depth":68,"text":971},{"id":981,"depth":68,"text":982},{"id":994,"depth":68,"text":995},{"id":2557,"depth":68,"text":2558},{"id":3916,"depth":68,"text":3917},{"id":4817,"depth":68,"text":4818},{"id":6567,"depth":68,"text":6568},{"id":6577,"depth":68,"text":6578},{"id":6778,"depth":68,"text":6779},{"id":6788,"depth":68,"text":6789},{"id":8449,"depth":68,"text":8450},null,"Nguồn gốc ký hiệu Bachmann, định nghĩa chặn trên, chặn khít và chặn lỏng, các quy tắc rút gọn và bốn lớp tăng trưởng nền tảng.","de","md","2026-09-19",{},true,{"title":10,"description":9021},[9029,9030,9031,7],"big-o","do-phuc-tap","tang-truong","bqz5gKrebtQv6_IJ9VRdT6-hmbHmAgzZ333h46Up22Y",{"id":9034,"title":14,"body":9035,"category":7,"day":9020,"description":9278,"difficulty":9022,"estimatedMinutes":258,"extension":9023,"lastUpdate":9024,"meta":9279,"navigation":9026,"outcomes":9020,"path":15,"prerequisites":9020,"seo":9280,"stem":16,"tags":9281,"__hash__":9286},"fundamentals\u002Ffundamentals\u002Fchieu-du-lieu-va-tinh-toan.md",{"type":965,"value":9036,"toc":9266},[9037,9039,9042,9045,9049,9052,9055,9058,9061,9064,9067,9070,9073,9077,9080,9083,9086,9089,9092,9095,9098,9101,9104,9107,9111,9114,9117,9120,9123,9126,9130,9133,9136,9139,9142,9145,9149,9152,9155,9158,9161,9164,9168,9171,9174,9177,9180,9184,9187,9190,9193,9195,9197,9202,9207,9212,9217,9222,9227,9232,9237,9242,9247,9249],[968,9038,971],{"id":970},[973,9040,9041],{},"Trước khi thiết kế lời giải, hãy mô tả bài toán trước. Dữ liệu của nó có hình dạng gì?",[973,9043,9044],{},"Nhu cầu xử lý của nó nặng nhẹ ra sao? Đó là phân tích chiều dữ liệu và chiều tính toán.",[968,9046,9048],{"id":9047},"_2-ba-họ-thuật-toán-theo-đặc-trưng-bài-toán","2. Ba họ thuật toán theo đặc trưng bài toán",[973,9050,9051],{},"Họ thứ nhất nặng dữ liệu. Lượng dữ liệu khổng lồ, phép xử lý khá đơn giản.",[973,9053,9054],{},"Ví dụ: nén một tệp khổng lồ theo từng phần. Dữ liệu lớn hơn nhiều so với bộ nhớ máy.",[973,9056,9057],{},"Họ thứ hai nặng tính toán. Dữ liệu vào ra đều nhỏ, khối lượng tính toán khổng lồ.",[973,9059,9060],{},"Ví dụ: tìm một số nguyên tố rất lớn. Chìa khóa tối ưu là chia thuật toán thành nhiều pha.",[973,9062,9063],{},"Ít nhất một pha phải song song hóa được. Họ thứ ba nặng cả hai.",[973,9065,9066],{},"Ví dụ: phân tích cảm xúc trên luồng video trực tiếp. Đây là họ tốn tài nguyên nhất.",[973,9068,9069],{},"Nó đòi thiết kế cẩn thận và chia tài nguyên thông minh. Gọi đúng tên họ giúp tránh hai sai lầm đối xứng.",[973,9071,9072],{},"Đừng mang siêu máy tính xử lý bài đơn giản. Đừng mang thiết kế đơn giản đấu bài toán khổng lồ.",[968,9074,9076],{"id":9075},"_3-chiều-dữ-liệu-và-mô-hình-3v","3. Chiều dữ liệu và mô hình 3V",[973,9078,9079],{},"Chiều dữ liệu được đo bằng 3V. V thứ nhất là khối lượng: dữ liệu lớn cỡ nào.",[973,9081,9082],{},"V thứ hai là vận tốc: dữ liệu mới sinh nhanh cỡ nào. Nó có thể bằng không.",[973,9084,9085],{},"V thứ ba là đa dạng: có bao nhiêu kiểu dữ liệu khác nhau. Tâm sơ đồ là dữ liệu đơn giản nhất.",[973,9087,9088],{},"Càng rời tâm thì dữ liệu càng phức tạp. Chiều vận tốc xếp tầng từ đơn giản tới phức tạp.",[973,9090,9091],{},"Thứ tự là: xử lý theo mẻ, xử lý định kỳ, gần thời gian thực, rồi thời gian thực. Ví dụ cả ba V đều cao: chùm video trực tiếp từ camera giám sát.",[973,9093,9094],{},"Ba kịch bản đối chiếu giúp nhớ lâu. Kịch bản một: xử lý một tệp bảng tính, cả ba V đều thấp.",[973,9096,9097],{},"Kịch bản hai: luồng video camera an ninh, cả ba V khá cao. Phải tính tới ngay từ khi thiết kế.",[973,9099,9100],{},"Kịch bản ba: lưới cảm biến nhiệt trong tòa nhà lớn. Vận tốc rất cao vì tin mới sinh liên tục.",[973,9102,9103],{},"Nhưng khối lượng lại thấp. Mỗi mẩu tin chỉ dài 16 bit, gồm 8 bit đo lường và 8 bit siêu dữ liệu.",[973,9105,9106],{},"Ba kịch bản cần lưu trữ và hạ tầng hoàn toàn khác nhau. Tất cả khác biệt đều bắt nguồn từ 3V.",[968,9108,9110],{"id":9109},"_4-chiều-tính-toán","4. Chiều tính toán",[973,9112,9113],{},"Chiều tính toán là nhu cầu xử lý của bài toán. Nhu cầu này quyết định kiểu thiết kế hiệu quả nhất.",[973,9115,9116],{},"Thuật toán phức tạp cần nhiều sức tính toán. Kiến trúc song song đa nút có thể là bắt buộc.",[973,9118,9119],{},"Thuật toán học sâu cần khối tính toán số khổng lồ. Nó có thể cần GPU hay chip chuyên dụng.",[973,9121,9122],{},"Điểm mấu chốt: hai chiều độc lập nhau. Dữ liệu lớn chưa chắc cần tính toán nặng.",[973,9124,9125],{},"Tính toán nặng chưa chắc cần dữ liệu lớn. Bỏ qua một chiều sẽ cho thiết kế khập khiễng.",[968,9127,9129],{"id":9128},"_5-từ-hai-chiều-tới-lựa-chọn-thuật-toán","5. Từ hai chiều tới lựa chọn thuật toán",[973,9131,9132],{},"Mô tả hai chiều là bước đầu của thiết kế. Nó dẫn tới ba quyết định trực tiếp.",[973,9134,9135],{},"Một là chọn họ thuật toán phù hợp. Hai là chọn ngăn xếp phần mềm và hạ tầng.",[973,9137,9138],{},"Ba là dự báo tài nguyên cần chuẩn bị. Ba mối quan tâm thiết kế gắn chặt với khung này.",[973,9140,9141],{},"Thuật toán có cho kết quả mong đợi không? Đó có phải cách tối ưu nhất không? Nó thể hiện ra sao trên dữ liệu lớn hơn?",[973,9143,9144],{},"Hai chiều giúp trả lời có căn cứ. Thay vì trả lời bằng cảm tính.",[968,9146,9148],{"id":9147},"_6-so-sánh-và-đánh-đổi","6. So sánh và đánh đổi",[973,9150,9151],{},"Phân tích hai chiều là định tính trước khi định lượng. Nó đối lập với việc lao ngay vào Big-O chi tiết.",[973,9153,9154],{},"Ưu điểm là rẻ và sớm. Chỉ cần hiểu bài toán đã loại được cả nhóm thiết kế sai.",[973,9156,9157],{},"Hạn chế là không thay thế phân tích chặt chẽ về sau. Nó chỉ đảm bảo ta phân tích đúng thứ đáng phân tích.",[973,9159,9160],{},"Đánh đổi thường gặp: xử lý tại chỗ tốn tính toán, hay tiền xử lý tốn bộ nhớ. Vị trí trên ma trận hai chiều sẽ mách nước lựa chọn.",[973,9162,9163],{},"Đánh đổi khác: hạ tầng chung đắt nhưng linh hoạt, hay hạ tầng chuyên dụng rẻ nhưng kén việc. Giống như thuê xe tải đa năng hay xe đông lạnh chuyên dụng.",[968,9165,9167],{"id":9166},"_7-cạm-bẫy-tư-duy","7. Cạm bẫy tư duy",[973,9169,9170],{},"Thứ nhất: chỉ nhìn khối lượng mà quên vận tốc và đa dạng. Tệp lớn nhưng tĩnh khác hẳn luồng nhỏ chảy xiết.",[973,9172,9173],{},"Thứ hai: lẫn hai chiều với nhau. Dữ liệu lớn chưa chắc cần siêu máy tính tính toán.",[973,9175,9176],{},"Thứ ba: chọn thuật toán ưa thích trước rồi ép bài toán vào. Phải mô tả bài toán trước khi chọn lời giải.",[973,9178,9179],{},"Thứ tư: thiết kế cho xử lý theo mẻ rồi ngỡ ngàng khi yêu cầu thật là thời gian thực. Tầng vận tốc không thể bỏ qua.",[968,9181,9183],{"id":9182},"_8-ứng-dụng-của-tư-duy-này","8. Ứng dụng của tư duy này",[973,9185,9186],{},"Khung hai chiều dùng ngay buổi họp đặc tả đầu tiên. Hỏi dữ liệu lớn bao nhiêu, chảy nhanh ra sao, có mấy kiểu.",[973,9188,9189],{},"Rồi hỏi phép tính nặng cỡ nào, phần nào song song được. Câu trả lời định hướng mọi quyết định tiếp theo.",[973,9191,9192],{},"Về lâu dài, đây là ngôn ngữ đọc tài liệu quy mô lớn. Mỗi chương thực chất là lời giải cho một góc của ma trận.",[968,9194,6789],{"id":6788},[973,9196,6792],{},[973,9198,9199,9201],{},[6796,9200,6798],{}," Ba chữ V của chiều dữ liệu là gì?",[6974,9203,9204],{"close-text":6976,"name":6977,"open-text":6978},[973,9205,9206],{},"Khối lượng (volume), vận tốc (velocity), đa dạng (variety).",[973,9208,9209,9211],{},[6796,9210,7124],{}," Tìm số nguyên tố rất lớn thuộc họ nào?",[6974,9213,9214],{"close-text":6976,"name":6977,"open-text":6978},[973,9215,9216],{},"Nặng tính toán: dữ liệu vào ra nhỏ, khối lượng tính toán khổng lồ.",[973,9218,9219,9221],{},[6796,9220,7655],{}," Lưới cảm biến nhiệt gửi tin 16 bit mỗi giây: V nào cao, V nào thấp?",[6974,9223,9224],{"close-text":6976,"name":6977,"open-text":6978},[973,9225,9226],{},"Vận tốc cao vì tin đến liên tục. Khối lượng mỗi tin thấp. Đa dạng thấp vì cùng một kiểu tin.",[973,9228,9229,9231],{},[6796,9230,8027],{}," Dữ liệu lớn có luôn cần tính toán nặng không?",[6974,9233,9234],{"close-text":6976,"name":6977,"open-text":6978},[973,9235,9236],{},"Không. Hai chiều độc lập: nén một tệp khổng lồ có dữ liệu lớn nhưng phép xử lý đơn giản.",[973,9238,9239,9241],{},[6796,9240,8212],{}," Nêu 1 quyết định thiết kế phụ thuộc vào vận tốc dữ liệu.",[6974,9243,9244],{"close-text":6976,"name":6977,"open-text":6978},[973,9245,9246],{},"Chọn xử lý theo mẻ hay xử lý luồng (stream). Dữ liệu đến liên tục và cần kết quả ngay thì phải xử lý luồng.",[968,9248,8450],{"id":8449},[5504,9250,9251,9254,9257,9260,9263],{},[5507,9252,9253],{},"Mô tả bài toán trước khi thiết kế lời giải, qua hai chiều dữ liệu và tính toán.",[5507,9255,9256],{},"Ba họ thuật toán: nặng dữ liệu, nặng tính toán, nặng cả hai.",[5507,9258,9259],{},"Chiều dữ liệu đo bằng 3V: khối lượng, vận tốc, đa dạng.",[5507,9261,9262],{},"Chiều tính toán đo bằng nhu cầu xử lý và khả năng song song hóa.",[5507,9264,9265],{},"Kết quả phân tích dẫn tới chọn thuật toán, hạ tầng và kế hoạch tài nguyên.",{"title":9007,"searchDepth":68,"depth":68,"links":9267},[9268,9269,9270,9271,9272,9273,9274,9275,9276,9277],{"id":970,"depth":68,"text":971},{"id":9047,"depth":68,"text":9048},{"id":9075,"depth":68,"text":9076},{"id":9109,"depth":68,"text":9110},{"id":9128,"depth":68,"text":9129},{"id":9147,"depth":68,"text":9148},{"id":9166,"depth":68,"text":9167},{"id":9182,"depth":68,"text":9183},{"id":6788,"depth":68,"text":6789},{"id":8449,"depth":68,"text":8450},"Ba họ thuật toán theo đặc trưng bài toán, mô hình 3V của dữ liệu, chiều tính toán và logic chọn thuật toán phù hợp.",{},{"title":14,"description":9278},[9282,9283,9284,9285,7],"du-lieu","tinh-toan","3V","thiet-ke","gHZSu4IWwWOFul_9nqDWQniTjS1eT-RPKb-MtuzAcvk",{"id":9288,"title":18,"body":9289,"category":7,"day":9020,"description":10302,"difficulty":9022,"estimatedMinutes":258,"extension":9023,"lastUpdate":9024,"meta":10303,"navigation":9026,"outcomes":9020,"path":19,"prerequisites":9020,"seo":10304,"stem":20,"tags":10305,"__hash__":10309},"fundamentals\u002Ffundamentals\u002Fde-quy.md",{"type":965,"value":9290,"toc":10289},[9291,9293,9296,9299,9303,9306,9411,9414,9417,9420,9423,9426,9460,9464,9467,9470,9473,9476,9479,9482,9511,9638,9641,9645,9648,9651,9654,9657,9691,9694,9697,9701,9704,9707,9710,9713,9822,9825,9828,9831,9864,9867,9871,9874,9877,9880,9900,9910,9913,9915,9918,9921,9924,9926,9929,9932,9935,9937,9940,9943,9945,9947,9964,9972,9980,10171,10179,10184,10189,10194,10261,10266,10268,10285],[968,9292,971],{"id":970},[973,9294,9295],{},"Đệ quy là hàm gọi lại chính nó trên bài toán nhỏ hơn. Bài này trình bày toàn bộ bằng lý thuyết và lần vết bằng lời.",[973,9297,9298],{},"Các khái niệm gồm: đệ quy đơn giản, điều kiện dừng, cạm bẫy tính lại, ghi nhớ, đệ quy đuôi và đệ quy tương hỗ.",[968,9300,9302],{"id":9301},"_2-đệ-quy-đơn-giản-và-điều-kiện-dừng","2. Đệ quy đơn giản và điều kiện dừng",[973,9304,9305],{},"Dạng đơn giản nhất: một hàm gọi chính nó trong lúc chạy. Hai ví dụ kinh điển là giai thừa và Fibonacci.",[973,9307,9308,9309,2268,9360,2958],{},"Trong Fibonacci, số hạng thứ n bằng tổng hai số trước nó. Kèm hai trường hợp cơ sở cho ",[1000,9310,9312,9330],{"className":9311},[1003],[1000,9313,9315],{"className":9314},[1007],[1009,9316,9317],{"xmlns":1011},[1013,9318,9319,9327],{},[1016,9320,9321,9323,9325],{},[1019,9322,1029],{},[1023,9324,1318],{},[1320,9326,1786],{},[1034,9328,9329],{"encoding":1036},"n = 0",[1000,9331,9333,9351],{"className":9332,"ariaHidden":1042},[1041],[1000,9334,9336,9339,9342,9345,9348],{"className":9335},[1046],[1000,9337],{"className":9338,"style":1762},[1050],[1000,9340,1029],{"className":9341},[1055,1056],[1000,9343],{"className":9344,"style":1372},[1371],[1000,9346,1318],{"className":9347},[1376],[1000,9349],{"className":9350,"style":1372},[1371],[1000,9352,9354,9357],{"className":9353},[1046],[1000,9355],{"className":9356,"style":1470},[1050],[1000,9358,1786],{"className":9359},[1055],[1000,9361,9363,9381],{"className":9362},[1003],[1000,9364,9366],{"className":9365},[1007],[1009,9367,9368],{"xmlns":1011},[1013,9369,9370,9378],{},[1016,9371,9372,9374,9376],{},[1019,9373,1029],{},[1023,9375,1318],{},[1320,9377,4017],{},[1034,9379,9380],{"encoding":1036},"n = 1",[1000,9382,9384,9402],{"className":9383,"ariaHidden":1042},[1041],[1000,9385,9387,9390,9393,9396,9399],{"className":9386},[1046],[1000,9388],{"className":9389,"style":1762},[1050],[1000,9391,1029],{"className":9392},[1055,1056],[1000,9394],{"className":9395,"style":1372},[1371],[1000,9397,1318],{"className":9398},[1376],[1000,9400],{"className":9401,"style":1372},[1371],[1000,9403,9405,9408],{"className":9404},[1046],[1000,9406],{"className":9407,"style":1470},[1050],[1000,9409,4017],{"className":9410},[1055],[973,9412,9413],{},"Điều kiện dừng là thành phần bắt buộc đầu tiên. Phải đảm bảo nó luôn tới được.",[973,9415,9416],{},"Nếu quên kiểm tra số âm, lời gọi với n âm chạy mãi. Thực tế nó văng lỗi tràn ngăn xếp từ rất sớm.",[973,9418,9419],{},"Cạm bẫy tinh vi hơn nằm ở kiểu dữ liệu yếu. Truyền vào giá trị không phải số, phép trừ cho ra giá trị không phải số.",[973,9421,9422],{},"Giá trị này không khớp nhánh dừng nào. Hàm rơi vào đệ quy vô hạn rồi tràn ngăn xếp.",[973,9424,9425],{},"Bài học: điều kiện dừng phải bao phủ mọi đầu vào. Kể cả đầu vào không hợp lệ.",[9427,9428,9432],"pre",{"className":9429,"code":9430,"language":9431,"meta":9007,"style":9007},"language-cpp shiki shiki-themes github-light github-light github-dark","long long fib(int n) {\n  if (n \u003C 0) throw std::invalid_argument(\"n âm\");   \u002F\u002F chặn đầu vào không hợp lệ\n  if (n \u003C= 1) return n;                              \u002F\u002F điều kiện dừng: fib(0)=0, fib(1)=1\n  return fib(n - 1) + fib(n - 2);                    \u002F\u002F bước đệ quy: bài nhỏ hơn\n}\n","cpp",[8030,9433,9434,9440,9445,9450,9455],{"__ignoreMap":9007},[1000,9435,9437],{"class":9436,"line":63},"line",[1000,9438,9439],{},"long long fib(int n) {\n",[1000,9441,9442],{"class":9436,"line":68},[1000,9443,9444],{},"  if (n \u003C 0) throw std::invalid_argument(\"n âm\");   \u002F\u002F chặn đầu vào không hợp lệ\n",[1000,9446,9447],{"class":9436,"line":73},[1000,9448,9449],{},"  if (n \u003C= 1) return n;                              \u002F\u002F điều kiện dừng: fib(0)=0, fib(1)=1\n",[1000,9451,9452],{"class":9436,"line":78},[1000,9453,9454],{},"  return fib(n - 1) + fib(n - 2);                    \u002F\u002F bước đệ quy: bài nhỏ hơn\n",[1000,9456,9457],{"class":9436,"line":83},[1000,9458,9459],{},"}\n",[968,9461,9463],{"id":9462},"_3-cạm-bẫy-tính-lại-và-kỹ-thuật-ghi-nhớ","3. Cạm bẫy tính lại và kỹ thuật ghi nhớ",[973,9465,9466],{},"Hạn chế thứ hai là tính lại lãng phí. Lần vết tính Fibonacci thứ 4 bằng lời.",[973,9468,9469],{},"Lời gọi mức 4 sinh hai lời gọi mức 3 và 2. Rồi phân nhánh tiếp xuống mức 1 và 0.",[973,9471,9472],{},"Kết quả là cùng một giá trị tính đi tính lại nhiều lần. Cái giá là hàng loạt lời gọi hàm dư thừa.",[973,9474,9475],{},"Bài toán con gối nhau là dấu hiệu cần lời giải khác. Quy hoạch động thường là lựa chọn tốt hơn.",[973,9477,9478],{},"Kỹ thuật cải thiện là ghi nhớ kết quả trung gian. Trước khi gọi đệ quy, kiểm tra bộ nhớ đệm trước.",[973,9480,9481],{},"Nếu có rồi thì dùng lại. Nếu chưa thì tính rồi lưu vào cho lần sau.",[9427,9483,9485],{"className":9429,"code":9484,"language":9431,"meta":9007,"style":9007},"long long fibMemo(int n, std::vector\u003Clong long> &memo) {  \u002F\u002F memo khởi tạo -1, cỡ n+1\n  if (n \u003C= 1) return n;\n  if (memo[n] != -1) return memo[n];                       \u002F\u002F có rồi thì dùng lại\n  return memo[n] = fibMemo(n - 1, memo) + fibMemo(n - 2, memo);\n}\n",[8030,9486,9487,9492,9497,9502,9507],{"__ignoreMap":9007},[1000,9488,9489],{"class":9436,"line":63},[1000,9490,9491],{},"long long fibMemo(int n, std::vector\u003Clong long> &memo) {  \u002F\u002F memo khởi tạo -1, cỡ n+1\n",[1000,9493,9494],{"class":9436,"line":68},[1000,9495,9496],{},"  if (n \u003C= 1) return n;\n",[1000,9498,9499],{"class":9436,"line":73},[1000,9500,9501],{},"  if (memo[n] != -1) return memo[n];                       \u002F\u002F có rồi thì dùng lại\n",[1000,9503,9504],{"class":9436,"line":78},[1000,9505,9506],{},"  return memo[n] = fibMemo(n - 1, memo) + fibMemo(n - 2, memo);\n",[1000,9508,9509],{"class":9436,"line":83},[1000,9510,9459],{},[973,9512,9513,9514,9517,9518,9520,9521,9594,9595,2958],{},"Bản ngây thơ gọi ",[8030,9515,9516],{},"fib(30)"," hơn 2,6 triệu lần. Bản ghi nhớ chỉ tính mỗi ",[8030,9519,1029],{}," một lần: từ ",[1000,9522,9524,9547],{"className":9523},[1003],[1000,9525,9527],{"className":9526},[1007],[1009,9528,9529],{"xmlns":1011},[1013,9530,9531,9545],{},[1016,9532,9533,9535,9537,9543],{},[1019,9534,1084],{},[1023,9536,1026],{"stretchy":1025},[1324,9538,9539,9541],{},[1320,9540,1330],{},[1019,9542,1029],{},[1023,9544,1032],{"stretchy":1025},[1034,9546,5719],{"encoding":1036},[1000,9548,9550],{"className":9549,"ariaHidden":1042},[1041],[1000,9551,9553,9556,9559,9562,9591],{"className":9552},[1046],[1000,9554],{"className":9555,"style":1051},[1050],[1000,9557,1084],{"className":9558,"style":1113},[1055,1056],[1000,9560,1026],{"className":9561},[1061],[1000,9563,9565,9568],{"className":9564},[1055],[1000,9566,1330],{"className":9567},[1055],[1000,9569,9571],{"className":9570},[1399],[1000,9572,9574],{"className":9573},[1403],[1000,9575,9577],{"className":9576},[1407],[1000,9578,9580],{"className":9579,"style":5753},[1411],[1000,9581,9582,9585],{"style":1415},[1000,9583],{"className":9584,"style":1420},[1419],[1000,9586,9588],{"className":9587},[1424,1425,1426,1427],[1000,9589,1029],{"className":9590},[1055,1056,1427],[1000,9592,1032],{"className":9593},[1068]," xuống ",[1000,9596,9598,9617],{"className":9597},[1003],[1000,9599,9601],{"className":9600},[1007],[1009,9602,9603],{"xmlns":1011},[1013,9604,9605,9615],{},[1016,9606,9607,9609,9611,9613],{},[1019,9608,1084],{},[1023,9610,1026],{"stretchy":1025},[1019,9612,1029],{},[1023,9614,1032],{"stretchy":1025},[1034,9616,2784],{"encoding":1036},[1000,9618,9620],{"className":9619,"ariaHidden":1042},[1041],[1000,9621,9623,9626,9629,9632,9635],{"className":9622},[1046],[1000,9624],{"className":9625,"style":1051},[1050],[1000,9627,1084],{"className":9628,"style":1113},[1055,1056],[1000,9630,1026],{"className":9631},[1061],[1000,9633,1029],{"className":9634},[1055,1056],[1000,9636,1032],{"className":9637},[1068],[973,9639,9640],{},"Lưu ý: cả đệ quy ngây thơ lẫn ghi nhớ đều tốn bộ nhớ khi quy mô lớn. Ghi nhớ là đánh đổi có tính toán, không phải vé miễn phí.",[968,9642,9644],{"id":9643},"_4-đệ-quy-tốt-khi-bản-chất-bài-toán-vốn-đệ-quy","4. Đệ quy tốt: khi bản chất bài toán vốn đệ quy",[973,9646,9647],{},"Ví dụ Fibonacci cho thấy đệ quy không hơn gì vòng lặp. Nhưng có lúc đệ quy là lựa chọn đúng.",[973,9649,9650],{},"Đó là khi bản chất bài toán vốn đã đệ quy. Lý do chọn lúc này là sự rõ ràng, không phải hiệu năng.",[973,9652,9653],{},"Ví dụ thanh lịch là duyệt cây nhị phân theo thứ tự trước. Gặp nút rỗng thì ghi nhận đã tới lá.",[973,9655,9656],{},"Gặp nút có giá trị thì xử lý nó. Rồi đệ quy duyệt cây trái, sau đó duyệt cây phải.",[9427,9658,9660],{"className":9429,"code":9659,"language":9431,"meta":9007,"style":9007},"void preorder(const Node *root, std::vector\u003Cint> &out) {\n  if (root == nullptr) return;    \u002F\u002F tới chỗ trống dưới lá\n  out.push_back(root->val);       \u002F\u002F xử lý nút\n  preorder(root->left, out);      \u002F\u002F duyệt cây trái\n  preorder(root->right, out);     \u002F\u002F duyệt cây phải\n}\n",[8030,9661,9662,9667,9672,9677,9682,9687],{"__ignoreMap":9007},[1000,9663,9664],{"class":9436,"line":63},[1000,9665,9666],{},"void preorder(const Node *root, std::vector\u003Cint> &out) {\n",[1000,9668,9669],{"class":9436,"line":68},[1000,9670,9671],{},"  if (root == nullptr) return;    \u002F\u002F tới chỗ trống dưới lá\n",[1000,9673,9674],{"class":9436,"line":73},[1000,9675,9676],{},"  out.push_back(root->val);       \u002F\u002F xử lý nút\n",[1000,9678,9679],{"class":9436,"line":78},[1000,9680,9681],{},"  preorder(root->left, out);      \u002F\u002F duyệt cây trái\n",[1000,9683,9684],{"class":9436,"line":83},[1000,9685,9686],{},"  preorder(root->right, out);     \u002F\u002F duyệt cây phải\n",[1000,9688,9689],{"class":9436,"line":88},[1000,9690,9459],{},[973,9692,9693],{},"Bản lặp tương đương phải dùng ngăn xếp tường minh. Nó dài dòng và khó viết đúng hơn hẳn.",[973,9695,9696],{},"Hai thứ tự còn lại: duyệt giữa theo trái, nút, phải. Duyệt sau theo hai cây con rồi mới tới nút.",[968,9698,9700],{"id":9699},"_5-đệ-quy-đuôi-và-khung-ngăn-xếp","5. Đệ quy đuôi và khung ngăn xếp",[973,9702,9703],{},"Mỗi lần gọi hàm, chương trình tạo một khung ngăn xếp. Khung gồm địa chỉ quay về, đối số, biến cục bộ và chỗ giữ kết quả.",[973,9705,9706],{},"Lời gọi đệ quy không phải ngoại lệ. Điểm đặc biệt là lời gọi đầu chưa trả về cho tới khi chạm điều kiện dừng.",[973,9708,9709],{},"Tin vui: trình biên dịch hiện đại tối ưu được một dạng đặc biệt. Lời gọi đuôi là lời gọi nằm ở thao tác cuối cùng của hàm.",[973,9711,9712],{},"Hàm là đệ quy đuôi nếu các lời gọi đệ quy đều ở vị trí đuôi. Trình biên dịch bỏ qua việc tạo khung ngăn xếp, thậm chí viết lại thành vòng lặp.",[973,9714,9715,9716,9821],{},"Điểm tinh tế: viết lời gọi ở cuối dòng chưa đủ. Ví dụ trả về ",[1000,9717,9719,9755],{"className":9718},[1003],[1000,9720,9722],{"className":9721},[1007],[1009,9723,9724],{"xmlns":1011},[1013,9725,9726,9752],{},[1016,9727,9728,9730,9732,9734,9737,9739,9742,9744,9746,9748,9750],{},[1019,9729,1029],{},[1023,9731,4167],{},[1019,9733,1021],{},[1019,9735,9736],{},"a",[1019,9738,1750],{},[1019,9740,9741],{},"t",[1023,9743,1026],{"stretchy":1025},[1019,9745,1029],{},[1023,9747,5216],{},[1320,9749,4017],{},[1023,9751,1032],{"stretchy":1025},[1034,9753,9754],{"encoding":1036},"n \\times fact(n-1)",[1000,9756,9758,9776,9809],{"className":9757,"ariaHidden":1042},[1041],[1000,9759,9761,9764,9767,9770,9773],{"className":9760},[1046],[1000,9762],{"className":9763,"style":2595},[1050],[1000,9765,1029],{"className":9766},[1055,1056],[1000,9768],{"className":9769,"style":1434},[1371],[1000,9771,4167],{"className":9772},[1438],[1000,9774],{"className":9775,"style":1434},[1371],[1000,9777,9779,9782,9785,9788,9791,9794,9797,9800,9803,9806],{"className":9778},[1046],[1000,9780],{"className":9781,"style":1051},[1050],[1000,9783,1021],{"className":9784,"style":1057},[1055,1056],[1000,9786,9736],{"className":9787},[1055,1056],[1000,9789,1750],{"className":9790},[1055,1056],[1000,9792,9741],{"className":9793},[1055,1056],[1000,9795,1026],{"className":9796},[1061],[1000,9798,1029],{"className":9799},[1055,1056],[1000,9801],{"className":9802,"style":1434},[1371],[1000,9804,5216],{"className":9805},[1438],[1000,9807],{"className":9808,"style":1434},[1371],[1000,9810,9812,9815,9818],{"className":9811},[1046],[1000,9813],{"className":9814,"style":1051},[1050],[1000,9816,4017],{"className":9817},[1055],[1000,9819,1032],{"className":9820},[1068]," trông như đuôi nhưng không phải.",[973,9823,9824],{},"Vì thao tác cuối cùng là phép nhân, không phải lời gọi. Nên dạng này không tối ưu được.",[973,9826,9827],{},"Cách sửa là thêm đối số tích lũy giữ kết quả nhân dồn. Phép nhân xảy ra khi tính đối số, trước lời gọi đệ quy.",[973,9829,9830],{},"Nhờ đó lời gọi đệ quy thành thao tác cuối thật sự. Trình biên dịch dịch dạng này thành vòng lặp với biến tích lũy.",[9427,9832,9834],{"className":9429,"code":9833,"language":9431,"meta":9007,"style":9007},"long long fact(int n) {                      \u002F\u002F KHÔNG phải đệ quy đuôi: còn phép nhân sau lời gọi\n  return n \u003C= 1 ? 1 : n * fact(n - 1);\n}\nlong long factTail(int n, long long acc = 1) {   \u002F\u002F đệ quy đuôi: lời gọi là việc cuối cùng\n  return n \u003C= 1 ? acc : factTail(n - 1, acc * n);\n}\n",[8030,9835,9836,9841,9846,9850,9855,9860],{"__ignoreMap":9007},[1000,9837,9838],{"class":9436,"line":63},[1000,9839,9840],{},"long long fact(int n) {                      \u002F\u002F KHÔNG phải đệ quy đuôi: còn phép nhân sau lời gọi\n",[1000,9842,9843],{"class":9436,"line":68},[1000,9844,9845],{},"  return n \u003C= 1 ? 1 : n * fact(n - 1);\n",[1000,9847,9848],{"class":9436,"line":73},[1000,9849,9459],{},[1000,9851,9852],{"class":9436,"line":78},[1000,9853,9854],{},"long long factTail(int n, long long acc = 1) {   \u002F\u002F đệ quy đuôi: lời gọi là việc cuối cùng\n",[1000,9856,9857],{"class":9436,"line":83},[1000,9858,9859],{},"  return n \u003C= 1 ? acc : factTail(n - 1, acc * n);\n",[1000,9861,9862],{"class":9436,"line":88},[1000,9863,9459],{},[973,9865,9866],{},"Lưu ý thêm: hỗ trợ tối ưu đuôi phụ thuộc ngôn ngữ và trình biên dịch. Đừng mặc định nó luôn có mặt.",[968,9868,9870],{"id":9869},"_6-đệ-quy-tương-hỗ","6. Đệ quy tương hỗ",[973,9872,9873],{},"Hàm có thể gọi mình trực tiếp, hoặc gọi qua hàm khác. Khi hai hay nhiều hàm gọi nhau thành vòng tròn, đó là đệ quy tương hỗ.",[973,9875,9876],{},"Về lý thuyết, đệ quy đuôi tương hỗ cũng tối ưu được. Nhưng đa số trình biên dịch chỉ tối ưu đệ quy đuôi đơn giản.",[973,9878,9879],{},"Ví dụ kinh điển là kiểm tra chẵn lẻ bằng hai hàm gọi qua lại:",[9427,9881,9883],{"className":9429,"code":9882,"language":9431,"meta":9007,"style":9007},"bool isOdd(unsigned n);\nbool isEven(unsigned n) { return n == 0 ? true : isOdd(n - 1); }\nbool isOdd(unsigned n)  { return n == 0 ? false : isEven(n - 1); }\n",[8030,9884,9885,9890,9895],{"__ignoreMap":9007},[1000,9886,9887],{"class":9436,"line":63},[1000,9888,9889],{},"bool isOdd(unsigned n);\n",[1000,9891,9892],{"class":9436,"line":68},[1000,9893,9894],{},"bool isEven(unsigned n) { return n == 0 ? true : isOdd(n - 1); }\n",[1000,9896,9897],{"class":9436,"line":73},[1000,9898,9899],{},"bool isOdd(unsigned n)  { return n == 0 ? false : isEven(n - 1); }\n",[973,9901,9902,9903,9906,9907,9909],{},"Lần vết ",[8030,9904,9905],{},"isEven(7)",": isEven(7), isOdd(6), isEven(5), isOdd(4), isEven(3), isOdd(2), isEven(1), isOdd(0) trả ",[8030,9908,1025],{},". Chuỗi gọi luân phiên hai hàm, sâu 8 tầng. Kết luận rất dứt khoát: đệ quy tương hỗ khó theo dõi và khó tối ưu.",[973,9911,9912],{},"Chỉ dùng nó khi cấu trúc bài toán thực sự đòi hỏi. Giống như hai người gọi điện qua lại, rất dễ rối.",[968,9914,6568],{"id":6567},[973,9916,9917],{},"Đệ quy và lặp diễn đạt cùng một quá trình tính toán. Đệ quy thắng ở sự rõ ràng khi cấu trúc phân cấp.",[973,9919,9920],{},"Lặp thắng ở bộ nhớ ổn định vì không phình ngăn xếp. Ghi nhớ là đánh đổi bộ nhớ lấy thời gian.",[973,9922,9923],{},"Nhưng phải canh chừng bộ nhớ đệm phình quá to. Không có bữa trưa miễn phí ở đây.",[968,9925,6578],{"id":6577},[973,9927,9928],{},"Thứ nhất: quên điều kiện dừng, hoặc dừng không bao hết đầu vào lạ. Thứ hai: dùng đệ quy cho bài toán con gối nhau mà không ghi nhớ.",[973,9930,9931],{},"Cây gọi sẽ phình theo hàm mũ. Thứ ba: tưởng lời gọi nằm cuối dòng mã là đệ quy đuôi.",[973,9933,9934],{},"Thứ tư: mặc định trình biên dịch nào cũng tối ưu gọi đuôi. Thứ năm: đệ quy sâu cho dữ liệu lớn mà không ước lượng độ sâu ngăn xếp.",[968,9936,6779],{"id":6778},[973,9938,9939],{},"Tư duy đệ quy là chìa khóa đọc thuật toán chia để trị. Nó cũng mở cửa các thuật toán duyệt cây và đồ thị.",[973,9941,9942],{},"Thói quen lần vết bằng lời trước khi cài đặt rất đáng giá. Nó phát hiện sớm điều kiện dừng thiếu và nguy cơ tính lại.",[968,9944,6789],{"id":6788},[973,9946,6792],{},[973,9948,9949,9951,9952,9955,9956,9959,9960,9963],{},[6796,9950,6798],{}," Hàm ",[8030,9953,9954],{},"f(n) = f(n-1) + 1"," với ",[8030,9957,9958],{},"f(0) = 0",", gọi ",[8030,9961,9962],{},"f(-3)"," thì sao?",[6974,9965,9966],{"close-text":6976,"name":6977,"open-text":6978},[973,9967,9968,9969,2958],{},"Không bao giờ chạm điều kiện dừng, gọi mãi tới khi tràn stack. Cần chặn ",[8030,9970,9971],{},"n \u003C 0",[973,9973,9974,6799,9976,9979],{},[6796,9975,7124],{},[8030,9977,9978],{},"fib(5)"," ngây thơ gọi bao nhiêu lần?",[6974,9981,9982],{"close-text":6976,"name":6977,"open-text":6978},[973,9983,9984,9985,2958],{},"15 lần. Công thức số lời gọi là ",[1000,9986,9988,10038],{"className":9987},[1003],[1000,9989,9991],{"className":9990},[1007],[1009,9992,9993],{"xmlns":1011},[1013,9994,9995,10035],{},[1016,9996,9997,9999,10001,10003,10005,10008,10010,10012,10014,10016,10018,10020,10022,10024,10026,10028,10031,10033],{},[1320,9998,1330],{},[1023,10000,1971],{},[1019,10002,1021],{},[1019,10004,7700],{},[1019,10006,10007],{},"b",[1023,10009,1026],{"stretchy":1025},[1019,10011,1029],{},[1023,10013,1333],{},[1320,10015,4017],{},[1023,10017,1032],{"stretchy":1025},[1023,10019,5216],{},[1320,10021,4017],{},[1023,10023,1318],{},[1320,10025,1330],{},[1023,10027,1971],{},[1320,10029,10030],{},"8",[1023,10032,5216],{},[1320,10034,4017],{},[1034,10036,10037],{"encoding":1036},"2 \\cdot fib(n+1) - 1 = 2 \\cdot 8 - 1",[1000,10039,10041,10059,10087,10108,10126,10144,10162],{"className":10040,"ariaHidden":1042},[1041],[1000,10042,10044,10047,10050,10053,10056],{"className":10043},[1046],[1000,10045],{"className":10046,"style":1470},[1050],[1000,10048,1330],{"className":10049},[1055],[1000,10051],{"className":10052,"style":1434},[1371],[1000,10054,1971],{"className":10055},[1438],[1000,10057],{"className":10058,"style":1434},[1371],[1000,10060,10062,10065,10068,10072,10075,10078,10081,10084],{"className":10061},[1046],[1000,10063],{"className":10064,"style":1051},[1050],[1000,10066,1021],{"className":10067,"style":1057},[1055,1056],[1000,10069,10071],{"className":10070},[1055,1056],"ib",[1000,10073,1026],{"className":10074},[1061],[1000,10076,1029],{"className":10077},[1055,1056],[1000,10079],{"className":10080,"style":1434},[1371],[1000,10082,1333],{"className":10083},[1438],[1000,10085],{"className":10086,"style":1434},[1371],[1000,10088,10090,10093,10096,10099,10102,10105],{"className":10089},[1046],[1000,10091],{"className":10092,"style":1051},[1050],[1000,10094,4017],{"className":10095},[1055],[1000,10097,1032],{"className":10098},[1068],[1000,10100],{"className":10101,"style":1434},[1371],[1000,10103,5216],{"className":10104},[1438],[1000,10106],{"className":10107,"style":1434},[1371],[1000,10109,10111,10114,10117,10120,10123],{"className":10110},[1046],[1000,10112],{"className":10113,"style":1470},[1050],[1000,10115,4017],{"className":10116},[1055],[1000,10118],{"className":10119,"style":1372},[1371],[1000,10121,1318],{"className":10122},[1376],[1000,10124],{"className":10125,"style":1372},[1371],[1000,10127,10129,10132,10135,10138,10141],{"className":10128},[1046],[1000,10130],{"className":10131,"style":1470},[1050],[1000,10133,1330],{"className":10134},[1055],[1000,10136],{"className":10137,"style":1434},[1371],[1000,10139,1971],{"className":10140},[1438],[1000,10142],{"className":10143,"style":1434},[1371],[1000,10145,10147,10150,10153,10156,10159],{"className":10146},[1046],[1000,10148],{"className":10149,"style":1448},[1050],[1000,10151,10030],{"className":10152},[1055],[1000,10154],{"className":10155,"style":1434},[1371],[1000,10157,5216],{"className":10158},[1438],[1000,10160],{"className":10161,"style":1434},[1371],[1000,10163,10165,10168],{"className":10164},[1046],[1000,10166],{"className":10167,"style":1470},[1050],[1000,10169,4017],{"className":10170},[1055],[973,10172,10173,6799,10175,10178],{},[6796,10174,7655],{},[8030,10176,10177],{},"return n * fact(n - 1);"," có phải đệ quy đuôi không?",[6974,10180,10181],{"close-text":6976,"name":6977,"open-text":6978},[973,10182,10183],{},"Không. Việc cuối cùng là phép nhân, không phải lời gọi. Phải thêm tham số tích lũy.",[973,10185,10186,10188],{},[6796,10187,8027],{}," Duyệt cây theo thứ tự giữa (inorder) một BST cho ra gì?",[6974,10190,10191],{"close-text":6976,"name":6977,"open-text":6978},[973,10192,10193],{},"Các khóa theo thứ tự tăng dần.",[973,10195,10196,10198,10199,10260],{},[6796,10197,8212],{}," Đệ quy sâu ",[1000,10200,10202,10219],{"className":10201},[1003],[1000,10203,10205],{"className":10204},[1007],[1009,10206,10207],{"xmlns":1011},[1013,10208,10209,10217],{},[1016,10210,10211],{},[1324,10212,10213,10215],{},[1320,10214,1343],{},[1320,10216,5005],{},[1034,10218,6297],{"encoding":1036},[1000,10220,10222],{"className":10221,"ariaHidden":1042},[1041],[1000,10223,10225,10228,10231],{"className":10224},[1046],[1000,10226],{"className":10227,"style":1412},[1050],[1000,10229,4017],{"className":10230},[1055],[1000,10232,10234,10237],{"className":10233},[1055],[1000,10235,1786],{"className":10236},[1055],[1000,10238,10240],{"className":10239},[1399],[1000,10241,10243],{"className":10242},[1403],[1000,10244,10246],{"className":10245},[1407],[1000,10247,10249],{"className":10248,"style":1412},[1411],[1000,10250,10251,10254],{"style":1415},[1000,10252],{"className":10253,"style":1420},[1419],[1000,10255,10257],{"className":10256},[1424,1425,1426,1427],[1000,10258,5005],{"className":10259},[1055,1427]," tầng trên C++ mặc định thường gặp vấn đề gì?",[6974,10262,10263],{"close-text":6976,"name":6977,"open-text":6978},[973,10264,10265],{},"Tràn stack (thường giới hạn 1-8 MB). Chuyển sang vòng lặp với stack tường minh.",[968,10267,8450],{"id":8449},[5504,10269,10270,10273,10276,10279,10282],{},[5507,10271,10272],{},"Đệ quy gọi lại chính mình trên bài nhỏ hơn, điều kiện dừng luôn tới được là bắt buộc.",[5507,10274,10275],{},"Tính lại bài toán con là cạm bẫy lớn nhất, khắc phục bằng ghi nhớ kết quả.",[5507,10277,10278],{},"Đệ quy tỏa sáng khi bài toán vốn phân cấp, như duyệt cây trước, giữa, sau.",[5507,10280,10281],{},"Đệ quy đuôi cho phép viết lại thành vòng lặp nếu lời gọi là thao tác cuối thật sự.",[5507,10283,10284],{},"Đệ quy tương hỗ khó theo dõi và khó tối ưu nên hạn chế dùng.",[10286,10287,10288],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":9007,"searchDepth":68,"depth":68,"links":10290},[10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301],{"id":970,"depth":68,"text":971},{"id":9301,"depth":68,"text":9302},{"id":9462,"depth":68,"text":9463},{"id":9643,"depth":68,"text":9644},{"id":9699,"depth":68,"text":9700},{"id":9869,"depth":68,"text":9870},{"id":6567,"depth":68,"text":6568},{"id":6577,"depth":68,"text":6578},{"id":6778,"depth":68,"text":6779},{"id":6788,"depth":68,"text":6789},{"id":8449,"depth":68,"text":8450},"Đệ quy đơn giản, điều kiện dừng, cạm bẫy tính lại, ghi nhớ kết quả, đệ quy đuôi và đệ quy tương hỗ ở mức lý thuyết và trace bằng lời.",{},{"title":18,"description":10302},[10306,10307,10308,7],"de-quy","dieu-kien-dung","memoization","aPfMAMtwFbqv7a4lmbXN92_CoiiPPN87onOYEOvQjbw",{"id":10311,"title":22,"body":10312,"category":7,"day":9020,"description":11516,"difficulty":9022,"estimatedMinutes":258,"extension":9023,"lastUpdate":9024,"meta":11517,"navigation":9026,"outcomes":9020,"path":23,"prerequisites":9020,"seo":11518,"stem":24,"tags":11519,"__hash__":11524},"fundamentals\u002Ffundamentals\u002Fgiai-thuat-ngau-nhien-va-do-chinh-xac.md",{"type":965,"value":10313,"toc":11503},[10314,10316,10319,10322,10326,10329,10332,10335,10368,10429,10433,10436,10439,10442,10582,10585,10588,10592,10595,10598,10601,10604,10607,10610,10613,10616,10620,10623,10626,10629,10632,10635,10638,10641,10644,10648,10651,10654,10657,10660,10663,10666,10669,10672,10675,11011,11109,11111,11114,11117,11120,11123,11126,11128,11131,11134,11137,11140,11142,11145,11148,11150,11152,11157,11162,11167,11172,11177,11182,11187,11474,11479,11484,11486],[968,10315,971],{"id":970},[973,10317,10318],{},"Nhiều người mặc định thuật toán là dãy bước tất định. Cùng đầu vào luôn cho cùng đầu ra.",[973,10320,10321],{},"Thực ra đó chỉ là một lớp con. Bài này dựng khung đầy đủ: bài toán quyết định, hai họ Las Vegas và Monte Carlo, cùng ba độ đo chất lượng.",[968,10323,10325],{"id":10324},"_2-bài-toán-quyết-định-và-bài-toán-phân-loại-nhị-phân","2. Bài toán quyết định và bài toán phân loại nhị phân",[973,10327,10328],{},"Bài toán quyết định chỉ trả lời đúng hoặc sai. Thuật toán phân loại nhị phân gán mỗi dữ liệu một trong hai nhãn.",[973,10330,10331],{},"Hai nhãn có thể là bất kỳ thứ gì. Về khái niệm, chúng tương đương nhãn đúng và sai.",[973,10333,10334],{},"Chỉ xét phân loại nhị phân mà không hề hạn chế. Bộ phân loại đa lớp ghép được từ nhiều bộ nhị phân.",[973,10336,10337,10338,2958],{},"Một kết quả nền tảng: mọi bài toán tối ưu diễn đạt được thành bài toán quyết định, và ngược lại. Ví dụ thay vì tìm đường ngắn nhất, ta đặt ngưỡng ",[1000,10339,10341,10355],{"className":10340},[1003],[1000,10342,10344],{"className":10343},[1007],[1009,10345,10346],{"xmlns":1011},[1013,10347,10348,10353],{},[1016,10349,10350],{},[1019,10351,10352],{},"T",[1034,10354,10352],{"encoding":1036},[1000,10356,10358],{"className":10357,"ariaHidden":1042},[1041],[1000,10359,10361,10364],{"className":10360},[1046],[1000,10362],{"className":10363,"style":3910},[1050],[1000,10365,10352],{"className":10366,"style":10367},[1055,1056],"margin-right:0.1389em;",[973,10369,10370,10371,10399,10400,10428],{},"Rồi hỏi có đường đi nào dài không quá ",[1000,10372,10374,10387],{"className":10373},[1003],[1000,10375,10377],{"className":10376},[1007],[1009,10378,10379],{"xmlns":1011},[1013,10380,10381,10385],{},[1016,10382,10383],{},[1019,10384,10352],{},[1034,10386,10352],{"encoding":1036},[1000,10388,10390],{"className":10389,"ariaHidden":1042},[1041],[1000,10391,10393,10396],{"className":10392},[1046],[1000,10394],{"className":10395,"style":3910},[1050],[1000,10397,10352],{"className":10398,"style":10367},[1055,1056]," không. Giải bài quyết định này với nhiều ",[1000,10401,10403,10416],{"className":10402},[1003],[1000,10404,10406],{"className":10405},[1007],[1009,10407,10408],{"xmlns":1011},[1013,10409,10410,10414],{},[1016,10411,10412],{},[1019,10413,10352],{},[1034,10415,10352],{"encoding":1036},[1000,10417,10419],{"className":10418,"ariaHidden":1042},[1041],[1000,10420,10422,10425],{"className":10421},[1046],[1000,10423],{"className":10424,"style":3910},[1050],[1000,10426,10352],{"className":10427,"style":10367},[1055,1056]," sẽ ra nghiệm tối ưu gốc.",[968,10430,10432],{"id":10431},"_3-họ-las-vegas-đúng-nhưng-tốn-tài-nguyên-bất-định","3. Họ Las Vegas: đúng nhưng tốn tài nguyên bất định",[973,10434,10435],{},"Họ Las Vegas thỏa hai tính chất. Một là luôn cho nghiệm đúng hoặc báo thất bại.",[973,10437,10438],{},"Hai là chạy với tài nguyên hữu hạn nhưng không đoán trước được. Lượng tài nguyên không dự đoán được từ đầu vào.",[973,10440,10441],{},"Ví dụ nổi bật là sắp xếp nhanh ngẫu nhiên. Chốt chọn ngẫu nhiên mỗi bước nên nó luôn sắp xếp đúng.",[973,10443,10444,10445,2268,10508,10581],{},"Nhưng thời gian dao động giữa ",[1000,10446,10448,10473],{"className":10447},[1003],[1000,10449,10451],{"className":10450},[1007],[1009,10452,10453],{"xmlns":1011},[1013,10454,10455,10471],{},[1016,10456,10457,10459,10461,10463,10465,10467,10469],{},[1019,10458,1084],{},[1023,10460,1026],{"stretchy":1025},[1019,10462,1029],{},[1019,10464,4891],{},[1023,10466,4894],{},[1019,10468,1029],{},[1023,10470,1032],{"stretchy":1025},[1034,10472,5537],{"encoding":1036},[1000,10474,10476],{"className":10475,"ariaHidden":1042},[1041],[1000,10477,10479,10482,10485,10488,10491,10494,10499,10502,10505],{"className":10478},[1046],[1000,10480],{"className":10481,"style":1051},[1050],[1000,10483,1084],{"className":10484,"style":1113},[1055,1056],[1000,10486,1026],{"className":10487},[1061],[1000,10489,1029],{"className":10490},[1055,1056],[1000,10492],{"className":10493,"style":4928},[1371],[1000,10495,4921,10497],{"className":10496},[4920],[1000,10498,1089],{"style":4924},[1000,10500],{"className":10501,"style":4928},[1371],[1000,10503,1029],{"className":10504},[1055,1056],[1000,10506,1032],{"className":10507},[1068],[1000,10509,10511,10534],{"className":10510},[1003],[1000,10512,10514],{"className":10513},[1007],[1009,10515,10516],{"xmlns":1011},[1013,10517,10518,10532],{},[1016,10519,10520,10522,10524,10530],{},[1019,10521,1084],{},[1023,10523,1026],{"stretchy":1025},[1324,10525,10526,10528],{},[1019,10527,1029],{},[1320,10529,1330],{},[1023,10531,1032],{"stretchy":1025},[1034,10533,1500],{"encoding":1036},[1000,10535,10537],{"className":10536,"ariaHidden":1042},[1041],[1000,10538,10540,10543,10546,10549,10578],{"className":10539},[1046],[1000,10541],{"className":10542,"style":1510},[1050],[1000,10544,1084],{"className":10545,"style":1113},[1055,1056],[1000,10547,1026],{"className":10548},[1061],[1000,10550,10552,10555],{"className":10551},[1055],[1000,10553,1029],{"className":10554},[1055,1056],[1000,10556,10558],{"className":10557},[1399],[1000,10559,10561],{"className":10560},[1403],[1000,10562,10564],{"className":10563},[1407],[1000,10565,10567],{"className":10566,"style":1412},[1411],[1000,10568,10569,10572],{"style":1415},[1000,10570],{"className":10571,"style":1420},[1419],[1000,10573,10575],{"className":10574},[1424,1425,1426,1427],[1000,10576,1330],{"className":10577},[1055,1427],[1000,10579,1032],{"className":10580},[1068],". Tùy các lựa chọn ngẫu nhiên gặp hên hay xui.",[973,10583,10584],{},"Nói cách khác, họ này đổi tính đoán trước lấy đảm bảo đúng. Bạn chắc chắn nhận đáp án đúng, nhưng không biết chờ bao lâu.",[973,10586,10587],{},"Giống như tìm chìa khóa khắp nhà: chắc chắn thấy, nhưng không biết mất bao lâu.",[968,10589,10591],{"id":10590},"_4-họ-monte-carlo-tốn-tài-nguyên-xác-định-nhưng-có-thể-sai","4. Họ Monte Carlo: tốn tài nguyên xác định nhưng có thể sai",[973,10593,10594],{},"Ngược với Las Vegas, họ Monte Carlo đôi khi cho đáp án sai. Xác suất sai thường đổi chác với tài nguyên đầu tư.",[973,10596,10597],{},"Giải thuật thực tế giữ xác suất này ở mức nhỏ. Trong khi chỉ dùng tính toán và bộ nhớ hợp lý.",[973,10599,10600],{},"Có tranh luận liệu họ này có xứng gọi là thuật toán không. Khóa học coi chúng là thuật toán, vì dãy bước vẫn hữu hạn và định nghĩa rõ, chỉ đầu vào có thêm số ngẫu nhiên.",[973,10602,10603],{},"Với bài quyết định đáp án đúng hoặc sai, có ba tình huống. Thiên lệch sai: khi trả về sai thì luôn đúng.",[973,10605,10606],{},"Thiên lệch đúng: khi trả về đúng thì luôn đúng. Còn lại là có thể sai cả hai phía.",[973,10608,10609],{},"Họ Monte Carlo tốn tài nguyên đơn định. Nó là đối ngẫu của Las Vegas.",[973,10611,10612],{},"Hai họ chuyển đổi được cho nhau. Giả sử A là thuật toán Las Vegas: luôn đúng nhưng thời gian bất định. Ta chạy A tối đa T bước; hết T bước mà chưa xong thì trả một đáp án đoán.",[973,10614,10615],{},"Thuật toán mới luôn xong trong T bước nhưng có thể sai, tức là một thuật toán Monte Carlo. Ta đổi đảm bảo đúng lấy đảm bảo thời gian. Giống như đoán nhanh khi sắp hết giờ thi.",[968,10617,10619],{"id":10618},"_5-độ-đo-accuracy-và-hạn-chế-của-nó","5. Độ đo accuracy và hạn chế của nó",[973,10621,10622],{},"Với cấu trúc như bộ lọc Bloom (có thể trả lời sai), thời gian và bộ nhớ chưa đủ để đánh giá. Với Monte Carlo còn phải hỏi: nó làm việc tốt tới mức nào.",[973,10624,10625],{},"Muốn trả lời cần độ đo. Đó là hàm đo khoảng cách giữa nghiệm xấp xỉ và nghiệm tối ưu.",[973,10627,10628],{},"Với phân loại, chất lượng là mức gán đúng lớp mỗi đầu vào. Độ đo đầu tiên là accuracy: tỉ lệ dự đoán đúng trên tổng số.",[973,10630,10631],{},"Bài này định nghĩa qua bốn khái niệm. Dương tính thật là điểm vừa đoán đúng vừa thực sự đúng.",[973,10633,10634],{},"Tương tự với lớp sai cho ra âm tính thật. Accuracy bằng tổng hai loại thật chia cho tổng số điểm.",[973,10636,10637],{},"Khi accuracy bằng 1 thì giải thuật luôn đúng. Hạn chế lộ ra trong ví dụ 99 phần trăm điểm thuộc lớp đúng.",[973,10639,10640],{},"Bộ phân loại luôn trả nhãn đúng cho mọi điểm có accuracy cao nhất. Dù nó trượt toàn bộ điểm lớp sai.",[973,10642,10643],{},"Bài học: trên dữ liệu lệch, accuracy cao có thể che giấu mô hình kém. Giống như đoán mọi email đều không phải rác, vẫn đúng 99 phần trăm.",[968,10645,10647],{"id":10646},"_6-precision-recall-và-đường-cong-đánh-đổi","6. Precision, recall và đường cong đánh đổi",[973,10649,10650],{},"Để vượt hạn chế của accuracy, cần theo dõi từng lớp riêng. Hai độ đo mới là precision và recall.",[973,10652,10653],{},"Precision là tỉ lệ dương tính thật trên tổng số điểm được đoán là đúng. Nó trả lời: trong số ta khẳng định đúng, bao nhiêu là đúng thật.",[973,10655,10656],{},"Recall là tỉ lệ dương tính thật trên tổng số điểm thực sự đúng. Nó trả lời: trong số đúng thật, ta bắt được bao nhiêu.",[973,10658,10659],{},"Diễn đạt qua dương tính giả và âm tính giả cho gọn. Accuracy chỉ đo ta đoán tốt ra sao.",[973,10661,10662],{},"Còn precision và recall cân thành công với sai lầm từng phía. Hai độ đo này giằng co nhau.",[973,10664,10665],{},"Cải thiện recall thường làm precision giảm đôi chút, và ngược lại. Ví dụ bộ lọc Bloom: khi nó trả lời \"không có\" thì chắc chắn đúng.",[973,10667,10668],{},"Nên recall của nó luôn bằng 100 phần trăm. Nó không bao giờ có âm tính giả.",[973,10670,10671],{},"Với giải thuật thiên lệch một phía, muốn tăng precision chỉ còn cách đầu tư thêm tài nguyên (với Bloom là thêm bit hoặc chỉnh số hàm băm).",[973,10673,10674],{},"Khi cần một con số duy nhất, dùng F1, trung bình điều hòa của hai độ đo:",[973,10676,10677],{},[1000,10678,10680,10781],{"className":10679},[1003],[1000,10681,10683],{"className":10682},[1007],[1009,10684,10685],{"xmlns":1011},[1013,10686,10687,10778],{},[1016,10688,10689,10696,10698],{},[1780,10690,10691,10694],{},[1019,10692,10693],{},"F",[1320,10695,4017],{},[1023,10697,1318],{},[10699,10700,10701,10744],"mfrac",{},[1016,10702,10703,10705,10707,10709,10712,10715,10717,10719,10722,10724,10727,10729,10731,10733,10735,10737,10739,10742],{},[1320,10704,1330],{},[1023,10706,1971],{},[1019,10708,973],{},[1019,10710,10711],{},"r",[1019,10713,10714],{},"e",[1019,10716,1750],{},[1019,10718,7700],{},[1019,10720,10721],{},"s",[1019,10723,7700],{},[1019,10725,10726],{},"o",[1019,10728,1029],{},[1023,10730,1971],{},[1019,10732,10711],{},[1019,10734,10714],{},[1019,10736,1750],{},[1019,10738,9736],{},[1019,10740,10741],{},"l",[1019,10743,10741],{},[1016,10745,10746,10748,10750,10752,10754,10756,10758,10760,10762,10764,10766,10768,10770,10772,10774,10776],{},[1019,10747,973],{},[1019,10749,10711],{},[1019,10751,10714],{},[1019,10753,1750],{},[1019,10755,7700],{},[1019,10757,10721],{},[1019,10759,7700],{},[1019,10761,10726],{},[1019,10763,1029],{},[1023,10765,1333],{},[1019,10767,10711],{},[1019,10769,10714],{},[1019,10771,1750],{},[1019,10773,9736],{},[1019,10775,10741],{},[1019,10777,10741],{},[1034,10779,10780],{"encoding":1036},"F_1 = \\frac{2 \\cdot precision \\cdot recall}{precision + recall}",[1000,10782,10784,10841],{"className":10783,"ariaHidden":1042},[1041],[1000,10785,10787,10791,10832,10835,10838],{"className":10786},[1046],[1000,10788],{"className":10789,"style":10790},[1050],"height:0.8333em;vertical-align:-0.15em;",[1000,10792,10794,10797],{"className":10793},[1055],[1000,10795,10693],{"className":10796,"style":10367},[1055,1056],[1000,10798,10800],{"className":10799},[1399],[1000,10801,10803,10824],{"className":10802},[1403,1812],[1000,10804,10806,10821],{"className":10805},[1407],[1000,10807,10809],{"className":10808,"style":1819},[1411],[1000,10810,10812,10815],{"style":10811},"top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;",[1000,10813],{"className":10814,"style":1420},[1419],[1000,10816,10818],{"className":10817},[1424,1425,1426,1427],[1000,10819,4017],{"className":10820},[1055,1427],[1000,10822,1836],{"className":10823},[1835],[1000,10825,10827],{"className":10826},[1407],[1000,10828,10830],{"className":10829,"style":1843},[1411],[1000,10831],{},[1000,10833],{"className":10834,"style":1372},[1371],[1000,10836,1318],{"className":10837},[1376],[1000,10839],{"className":10840,"style":1372},[1371],[1000,10842,10844,10848],{"className":10843},[1046],[1000,10845],{"className":10846,"style":10847},[1050],"height:1.4133em;vertical-align:-0.4811em;",[1000,10849,10851,10855,11008],{"className":10850},[1055],[1000,10852],{"className":10853},[1061,10854],"nulldelimiter",[1000,10856,10858],{"className":10857},[10699],[1000,10859,10861,10999],{"className":10860},[1403,1812],[1000,10862,10864,10996],{"className":10863},[1407],[1000,10865,10868,10925,10936],{"className":10866,"style":10867},[1411],"height:0.9322em;",[1000,10869,10871,10875],{"style":10870},"top:-2.655em;",[1000,10872],{"className":10873,"style":10874},[1419],"height:3em;",[1000,10876,10878],{"className":10877},[1424,1425,1426,1427],[1000,10879,10881,10884,10887,10891,10894,10897,10900,10903,10906,10909,10912,10915,10918,10922],{"className":10880},[1055,1427],[1000,10882,973],{"className":10883},[1055,1056,1427],[1000,10885,10711],{"className":10886,"style":1113},[1055,1056,1427],[1000,10888,10890],{"className":10889},[1055,1056,1427],"ec",[1000,10892,7700],{"className":10893},[1055,1056,1427],[1000,10895,10721],{"className":10896},[1055,1056,1427],[1000,10898,7700],{"className":10899},[1055,1056,1427],[1000,10901,10726],{"className":10902},[1055,1056,1427],[1000,10904,1029],{"className":10905},[1055,1056,1427],[1000,10907,1333],{"className":10908},[1438,1427],[1000,10910,10711],{"className":10911,"style":1113},[1055,1056,1427],[1000,10913,10890],{"className":10914},[1055,1056,1427],[1000,10916,9736],{"className":10917},[1055,1056,1427],[1000,10919,10741],{"className":10920,"style":10921},[1055,1056,1427],"margin-right:0.0197em;",[1000,10923,10741],{"className":10924,"style":10921},[1055,1056,1427],[1000,10926,10928,10931],{"style":10927},"top:-3.23em;",[1000,10929],{"className":10930,"style":10874},[1419],[1000,10932],{"className":10933,"style":10935},[10934],"frac-line","border-bottom-width:0.04em;",[1000,10937,10939,10942],{"style":10938},"top:-3.4461em;",[1000,10940],{"className":10941,"style":10874},[1419],[1000,10943,10945],{"className":10944},[1424,1425,1426,1427],[1000,10946,10948,10951,10954,10957,10960,10963,10966,10969,10972,10975,10978,10981,10984,10987,10990,10993],{"className":10947},[1055,1427],[1000,10949,1330],{"className":10950},[1055,1427],[1000,10952,1971],{"className":10953},[1438,1427],[1000,10955,973],{"className":10956},[1055,1056,1427],[1000,10958,10711],{"className":10959,"style":1113},[1055,1056,1427],[1000,10961,10890],{"className":10962},[1055,1056,1427],[1000,10964,7700],{"className":10965},[1055,1056,1427],[1000,10967,10721],{"className":10968},[1055,1056,1427],[1000,10970,7700],{"className":10971},[1055,1056,1427],[1000,10973,10726],{"className":10974},[1055,1056,1427],[1000,10976,1029],{"className":10977},[1055,1056,1427],[1000,10979,1971],{"className":10980},[1438,1427],[1000,10982,10711],{"className":10983,"style":1113},[1055,1056,1427],[1000,10985,10890],{"className":10986},[1055,1056,1427],[1000,10988,9736],{"className":10989},[1055,1056,1427],[1000,10991,10741],{"className":10992,"style":10921},[1055,1056,1427],[1000,10994,10741],{"className":10995,"style":10921},[1055,1056,1427],[1000,10997,1836],{"className":10998},[1835],[1000,11000,11002],{"className":11001},[1407],[1000,11003,11006],{"className":11004,"style":11005},[1411],"height:0.4811em;",[1000,11007],{},[1000,11009],{"className":11010},[1068,10854],[973,11012,11013,11014,11108],{},"Ví dụ precision 0.9, recall 0.5 cho ",[1000,11015,11017,11041],{"className":11016},[1003],[1000,11018,11020],{"className":11019},[1007],[1009,11021,11022],{"xmlns":1011},[1013,11023,11024,11038],{},[1016,11025,11026,11032,11035],{},[1780,11027,11028,11030],{},[1019,11029,10693],{},[1320,11031,4017],{},[1023,11033,11034],{},"≈",[1320,11036,11037],{},"0.64",[1034,11039,11040],{"encoding":1036},"F_1 \\approx 0.64",[1000,11042,11044,11099],{"className":11043,"ariaHidden":1042},[1041],[1000,11045,11047,11050,11090,11093,11096],{"className":11046},[1046],[1000,11048],{"className":11049,"style":10790},[1050],[1000,11051,11053,11056],{"className":11052},[1055],[1000,11054,10693],{"className":11055,"style":10367},[1055,1056],[1000,11057,11059],{"className":11058},[1399],[1000,11060,11062,11082],{"className":11061},[1403,1812],[1000,11063,11065,11079],{"className":11064},[1407],[1000,11066,11068],{"className":11067,"style":1819},[1411],[1000,11069,11070,11073],{"style":10811},[1000,11071],{"className":11072,"style":1420},[1419],[1000,11074,11076],{"className":11075},[1424,1425,1426,1427],[1000,11077,4017],{"className":11078},[1055,1427],[1000,11080,1836],{"className":11081},[1835],[1000,11083,11085],{"className":11084},[1407],[1000,11086,11088],{"className":11087,"style":1843},[1411],[1000,11089],{},[1000,11091],{"className":11092,"style":1372},[1371],[1000,11094,11034],{"className":11095},[1376],[1000,11097],{"className":11098,"style":1372},[1371],[1000,11100,11102,11105],{"className":11101},[1046],[1000,11103],{"className":11104,"style":1470},[1050],[1000,11106,11037],{"className":11107},[1055],": F1 bị kéo về phía độ đo thấp hơn. Giống như lưới bắt cá: mắt dày bắt hết cá nhưng tốn công gỡ rác.",[968,11110,6568],{"id":6567},[973,11112,11113],{},"Las Vegas và Monte Carlo là hai cực của một đánh đổi. Cực một đảm bảo đúng nhưng chi phí bất định.",[973,11115,11116],{},"Cực hai đảm bảo chi phí nhưng đáp án có thể sai. Kỹ thuật dừng sớm biến Las Vegas thành Monte Carlo.",[973,11118,11119],{},"Đó chính là di chuyển trên trục đánh đổi cho hợp ngân sách. Trong họ Monte Carlo còn một đánh đổi thứ hai.",[973,11121,11122],{},"Siết tiêu chuẩn để tăng precision sẽ làm tuột vài ca đúng thật. Khi đó recall giảm xuống.",[973,11124,11125],{},"Với giải thuật thiên lệch một phía như Bloom, đánh đổi này mất một chiều. Chỉ còn đánh đổi giữa precision và tài nguyên.",[968,11127,6578],{"id":6577},[973,11129,11130],{},"Thứ nhất: mặc định mọi thuật toán đều tất định. Rồi ngạc nhiên khi cùng đầu vào cho đầu ra khác nhau.",[973,11132,11133],{},"Thứ hai: tôn thờ accuracy trên dữ liệu lệch. Tưởng mô hình đoán lớp đa số là mô hình tốt.",[973,11135,11136],{},"Thứ ba: tin rằng tối ưu precision và recall cùng lúc vô hạn. Thực ra chúng giằng co nhau theo bản chất.",[973,11138,11139],{},"Thứ tư: lẫn hai họ với nhau. Đòi Monte Carlo luôn đúng, hoặc đòi Las Vegas xong trong giờ cố định.",[968,11141,6779],{"id":6778},[973,11143,11144],{},"Khung hai họ giúp đọc hiểu cấu trúc ngẫu nhiên trong khóa học. Ba độ đo là ngôn ngữ chuẩn đọc báo cáo học máy.",[973,11146,11147],{},"Khi nhận mô hình mới, hãy hỏi accuracy, precision, recall ngay. Rồi mới quyết định có dùng được không.",[968,11149,6789],{"id":6788},[973,11151,6792],{},[973,11153,11154,11156],{},[6796,11155,6798],{}," Quicksort chọn chốt ngẫu nhiên thuộc họ nào?",[6974,11158,11159],{"close-text":6976,"name":6977,"open-text":6978},[973,11160,11161],{},"Las Vegas: luôn sắp đúng, thời gian dao động.",[973,11163,11164,11166],{},[6796,11165,7124],{}," Bloom filter thuộc họ nào, thiên lệch phía nào?",[6974,11168,11169],{"close-text":6976,"name":6977,"open-text":6978},[973,11170,11171],{},"Monte Carlo thiên lệch một phía: trả lời \"không có\" thì luôn đúng, \"có\" thì có thể sai.",[973,11173,11174,11176],{},[6796,11175,7655],{}," 100 email, 5 rác. Mô hình đoán tất cả là thường. Accuracy và recall lớp rác?",[6974,11178,11179],{"close-text":6976,"name":6977,"open-text":6978},[973,11180,11181],{},"Accuracy 95%, recall lớp rác 0%.",[973,11183,11184,11186],{},[6796,11185,8027],{}," TP = 40, FP = 10, FN = 20. Tính precision, recall, F1.",[6974,11188,11189],{"close-text":6976,"name":6977,"open-text":6978},[973,11190,11191,11192,11250,11251,2148,11309,2958],{},"Precision ",[1000,11193,11195,11219],{"className":11194},[1003],[1000,11196,11198],{"className":11197},[1007],[1009,11199,11200],{"xmlns":1011},[1013,11201,11202,11216],{},[1016,11203,11204,11206,11208,11211,11213],{},[1320,11205,2077],{},[1019,11207,1155],{"mathvariant":1154},[1320,11209,11210],{},"50",[1023,11212,1318],{},[1320,11214,11215],{},"0.8",[1034,11217,11218],{"encoding":1036},"40\u002F50 = 0.8",[1000,11220,11222,11241],{"className":11221,"ariaHidden":1042},[1041],[1000,11223,11225,11228,11232,11235,11238],{"className":11224},[1046],[1000,11226],{"className":11227,"style":1051},[1050],[1000,11229,11231],{"className":11230},[1055],"40\u002F50",[1000,11233],{"className":11234,"style":1372},[1371],[1000,11236,1318],{"className":11237},[1376],[1000,11239],{"className":11240,"style":1372},[1371],[1000,11242,11244,11247],{"className":11243},[1046],[1000,11245],{"className":11246,"style":1470},[1050],[1000,11248,11215],{"className":11249},[1055],", recall ",[1000,11252,11254,11278],{"className":11253},[1003],[1000,11255,11257],{"className":11256},[1007],[1009,11258,11259],{"xmlns":1011},[1013,11260,11261,11275],{},[1016,11262,11263,11265,11267,11270,11272],{},[1320,11264,2077],{},[1019,11266,1155],{"mathvariant":1154},[1320,11268,11269],{},"60",[1023,11271,11034],{},[1320,11273,11274],{},"0.667",[1034,11276,11277],{"encoding":1036},"40\u002F60 \\approx 0.667",[1000,11279,11281,11300],{"className":11280,"ariaHidden":1042},[1041],[1000,11282,11284,11287,11291,11294,11297],{"className":11283},[1046],[1000,11285],{"className":11286,"style":1051},[1050],[1000,11288,11290],{"className":11289},[1055],"40\u002F60",[1000,11292],{"className":11293,"style":1372},[1371],[1000,11295,11034],{"className":11296},[1376],[1000,11298],{"className":11299,"style":1372},[1371],[1000,11301,11303,11306],{"className":11302},[1046],[1000,11304],{"className":11305,"style":1470},[1050],[1000,11307,11274],{"className":11308},[1055],[1000,11310,11312,11352],{"className":11311},[1003],[1000,11313,11315],{"className":11314},[1007],[1009,11316,11317],{"xmlns":1011},[1013,11318,11319,11349],{},[1016,11320,11321,11327,11329,11331,11333,11335,11337,11339,11341,11344,11346],{},[1780,11322,11323,11325],{},[1019,11324,10693],{},[1320,11326,4017],{},[1023,11328,1318],{},[1320,11330,1330],{},[1023,11332,1971],{},[1320,11334,11215],{},[1023,11336,1971],{},[1320,11338,11274],{},[1019,11340,1155],{"mathvariant":1154},[1320,11342,11343],{},"1.467",[1023,11345,11034],{},[1320,11347,11348],{},"0.727",[1034,11350,11351],{"encoding":1036},"F_1 = 2 \\cdot 0.8 \\cdot 0.667 \u002F 1.467 \\approx 0.727",[1000,11353,11355,11410,11428,11446,11465],{"className":11354,"ariaHidden":1042},[1041],[1000,11356,11358,11361,11401,11404,11407],{"className":11357},[1046],[1000,11359],{"className":11360,"style":10790},[1050],[1000,11362,11364,11367],{"className":11363},[1055],[1000,11365,10693],{"className":11366,"style":10367},[1055,1056],[1000,11368,11370],{"className":11369},[1399],[1000,11371,11373,11393],{"className":11372},[1403,1812],[1000,11374,11376,11390],{"className":11375},[1407],[1000,11377,11379],{"className":11378,"style":1819},[1411],[1000,11380,11381,11384],{"style":10811},[1000,11382],{"className":11383,"style":1420},[1419],[1000,11385,11387],{"className":11386},[1424,1425,1426,1427],[1000,11388,4017],{"className":11389},[1055,1427],[1000,11391,1836],{"className":11392},[1835],[1000,11394,11396],{"className":11395},[1407],[1000,11397,11399],{"className":11398,"style":1843},[1411],[1000,11400],{},[1000,11402],{"className":11403,"style":1372},[1371],[1000,11405,1318],{"className":11406},[1376],[1000,11408],{"className":11409,"style":1372},[1371],[1000,11411,11413,11416,11419,11422,11425],{"className":11412},[1046],[1000,11414],{"className":11415,"style":1470},[1050],[1000,11417,1330],{"className":11418},[1055],[1000,11420],{"className":11421,"style":1434},[1371],[1000,11423,1971],{"className":11424},[1438],[1000,11426],{"className":11427,"style":1434},[1371],[1000,11429,11431,11434,11437,11440,11443],{"className":11430},[1046],[1000,11432],{"className":11433,"style":1470},[1050],[1000,11435,11215],{"className":11436},[1055],[1000,11438],{"className":11439,"style":1434},[1371],[1000,11441,1971],{"className":11442},[1438],[1000,11444],{"className":11445,"style":1434},[1371],[1000,11447,11449,11452,11456,11459,11462],{"className":11448},[1046],[1000,11450],{"className":11451,"style":1051},[1050],[1000,11453,11455],{"className":11454},[1055],"0.667\u002F1.467",[1000,11457],{"className":11458,"style":1372},[1371],[1000,11460,11034],{"className":11461},[1376],[1000,11463],{"className":11464,"style":1372},[1371],[1000,11466,11468,11471],{"className":11467},[1046],[1000,11469],{"className":11470,"style":1470},[1050],[1000,11472,11348],{"className":11473},[1055],[973,11475,11476,11478],{},[6796,11477,8212],{}," Biến thuật toán Las Vegas thành Monte Carlo bằng cách nào?",[6974,11480,11481],{"close-text":6976,"name":6977,"open-text":6978},[973,11482,11483],{},"Giới hạn số bước chạy. Hết giới hạn mà chưa xong thì trả một đáp án đoán.",[968,11485,8450],{"id":8449},[5504,11487,11488,11491,11494,11497,11500],{},[5507,11489,11490],{},"Bài toán quyết định nhị phân là khung chung để định nghĩa giải thuật ngẫu nhiên.",[5507,11492,11493],{},"Las Vegas luôn đúng nhưng tốn tài nguyên bất định; Monte Carlo đúng giờ nhưng đáp án có thể sai.",[5507,11495,11496],{},"Accuracy là tỉ lệ đoán đúng, dễ gây hiểu lầm trên dữ liệu lệch.",[5507,11498,11499],{},"Precision và recall đo từng phía, giằng co nhau trên đường cong đánh đổi.",[5507,11501,11502],{},"Giải thuật thiên lệch một phía như Bloom có recall 100 phần trăm, muốn tốt hơn chỉ còn cách thêm tài nguyên.",{"title":9007,"searchDepth":68,"depth":68,"links":11504},[11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515],{"id":970,"depth":68,"text":971},{"id":10324,"depth":68,"text":10325},{"id":10431,"depth":68,"text":10432},{"id":10590,"depth":68,"text":10591},{"id":10618,"depth":68,"text":10619},{"id":10646,"depth":68,"text":10647},{"id":6567,"depth":68,"text":6568},{"id":6577,"depth":68,"text":6578},{"id":6778,"depth":68,"text":6779},{"id":6788,"depth":68,"text":6789},{"id":8449,"depth":68,"text":8450},"Bài toán quyết định, Las Vegas và Monte Carlo, ba độ đo accuracy-precision-recall và quan hệ đánh đổi giữa chúng.",{},{"title":22,"description":11516},[11520,11521,11522,11523,7],"ngau-nhien","las-vegas","monte-carlo","do-do","BVqMnPkBL8-j41StCFWWhswHV0LC5qGoI-y709wiLmA",{"id":11526,"title":26,"body":11527,"category":7,"day":9020,"description":11895,"difficulty":9022,"estimatedMinutes":283,"extension":9023,"lastUpdate":9024,"meta":11896,"navigation":9026,"outcomes":9020,"path":27,"prerequisites":9020,"seo":11897,"stem":28,"tags":11898,"__hash__":11902},"fundamentals\u002Ffundamentals\u002Fnguyen-ly-thiet-ke-huong-doi-tuong.md",{"type":965,"value":11528,"toc":11882},[11529,11531,11534,11537,11540,11544,11547,11550,11553,11556,11559,11563,11566,11569,11572,11575,11578,11581,11584,11588,11591,11594,11597,11600,11603,11606,11609,11613,11616,11619,11622,11625,11628,11631,11634,11645,11656,11709,11713,11716,11719,11722,11725,11728,11731,11733,11736,11739,11742,11745,11748,11751,11753,11756,11759,11762,11765,11768,11770,11773,11776,11779,11781,11783,11792,11797,11810,11822,11832,11837,11845,11853,11858,11863,11865],[968,11530,971],{"id":970},[973,11532,11533],{},"Trước khi học mẫu thiết kế cụ thể, cần nắm nguyên lý đứng sau chúng. Mẫu chỉ là cách áp dụng nguyên lý vào tình huống cụ thể.",[973,11535,11536],{},"Bài này tổng hợp các nguyên lý thiết kế, gồm đủ năm chữ SOLID. Kèm tư duy về quan hệ đối tượng và mục tiêu ghép lỏng.",[973,11538,11539],{},"Toàn bộ trình bày ở mức lý thuyết thuần túy. Không dạy bất kỳ mẫu cụ thể nào ở đây.",[968,11541,11543],{"id":11542},"_2-đóng-gói-cái-biến-thiên","2. Đóng gói cái biến thiên",[973,11545,11546],{},"Nguyên lý đầu tiên: xác định khía cạnh hay biến thiên rồi đóng gói nó lại. Mọi thiết kế tốt đều bắt đầu từ quan sát cái gì đổi theo thời gian.",[973,11548,11549],{},"Ví dụ: cách bay và cách kêu của từng loài vịt. Chính sách giá đổi theo mùa, quy tắc kiểm tra đổi theo vùng miền.",[973,11551,11552],{},"Phần ổn định giữ nguyên. Phần biến thiên tách ra, đóng sau ranh giới rõ ràng.",[973,11554,11555],{},"Khi yêu cầu đổi, thay đổi bị giam trong phạm vi hẹp. Thay vì lan khắp hệ thống.",[973,11557,11558],{},"Hệ quả: thiết kế tốt không đoán trước mọi thay đổi. Nó tổ chức mã sao cho thay đổi xảy ra nơi đã chuẩn bị sẵn.",[968,11560,11562],{"id":11561},"_3-lập-trình-theo-giao-diện-và-ưu-tiên-hợp-thành","3. Lập trình theo giao diện và ưu tiên hợp thành",[973,11564,11565],{},"Nguyên lý thứ hai: lập trình theo giao diện, không theo cài đặt. Mã phía trên chỉ biết vai trò và hợp đồng hành vi.",[973,11567,11568],{},"Nhờ đó ta thay cài đặt sau vai trò mà phía trên không hay biết. Giống như remote chỉ biết nút bấm, không cần biết ruột máy nào.",[973,11570,11571],{},"Nguyên lý thứ ba: ưu tiên hợp thành hơn kế thừa. Kế thừa mô tả quan hệ IS-A: một lớp là một loại của lớp khác.",[973,11573,11574],{},"Nó ràng buộc hai lớp theo chiều dọc cứng nhắc. Đổi lớp cha lan xuống mọi lớp con.",[973,11576,11577],{},"Hợp thành mô tả quan hệ HAS-A: một đối tượng có một đối tượng khác đóng vai hành vi. Vai trò này thay được lúc đang chạy.",[973,11579,11580],{},"Hai nguyên lý đi thành cặp. Giao diện định nghĩa vai trò, hợp thành lắp ráp vai trò.",[973,11582,11583],{},"Giống như ráp xe bằng phụ tùng chuẩn. Thay vì đúc nguyên chiếc không sửa được.",[968,11585,11587],{"id":11586},"_4-ghép-lỏng-và-nguyên-tắc-hollywood","4. Ghép lỏng và nguyên tắc Hollywood",[973,11589,11590],{},"Nguyên lý thứ tư: phấn đấu cho thiết kế ghép lỏng. Hai thành phần ghép lỏng tương tác nhưng ít biết về nhau.",[973,11592,11593],{},"Mỗi bên chỉ biết vừa đủ để phối hợp. Không biết chi tiết nội tại của bên kia.",[973,11595,11596],{},"Lợi ích là đổi một bên ít gây chấn động bên còn lại. Mỗi bên tiến hóa độc lập.",[973,11598,11599],{},"Ví dụ: bên phát hành thông tin và bên theo dõi thông tin. Bên phát hành không cần biết có bao nhiêu người nghe.",[973,11601,11602],{},"Không cần biết họ là ai, làm gì với thông tin. Chỉ cần biết cơ chế đăng ký và thông báo chung.",[973,11604,11605],{},"Nguyên lý Hollywood: đừng gọi chúng tôi, chúng tôi sẽ gọi bạn. Thành phần mức thấp đăng ký vào khung rồi chờ khung gọi lại.",[973,11607,11608],{},"Nhờ đó thành phần mức cao giữ quyền điều phối luồng chung. Các thành phần mức thấp vẫn đóng góp hành vi riêng.",[968,11610,11612],{"id":11611},"_5-năm-nguyên-lý-solid","5. Năm nguyên lý SOLID",[973,11614,11615],{},"Nguyên lý đơn trách nhiệm: một lớp chỉ nên có một lý do để thay đổi. Lớp gánh hai việc thì sửa việc này dễ phá việc kia.",[973,11617,11618],{},"Hai nhóm yêu cầu khác nhau giằng co cùng một đơn vị mã. Tách mỗi trách nhiệm riêng giúp thay đổi khoanh vùng và kiểm thử độc lập.",[973,11620,11621],{},"Nguyên lý đóng mở: mở cho mở rộng, đóng cho sửa đổi. Hành vi mới thêm bằng đơn vị mới, mã cũ đã kiểm chứng không phải mở ra sửa.",[973,11623,11624],{},"Đây là nguyên lý khó nhất. Nó đòi đoán đúng điểm biến thiên ngay từ đầu.",[973,11626,11627],{},"Thước đo trưởng thành của thiết kế: đón yêu cầu mới bằng thêm mới thay vì sửa cũ. Nguyên lý đảo ngược phụ thuộc: phụ thuộc vào trừu tượng, đừng phụ thuộc lớp cụ thể.",[973,11629,11630],{},"Cả mô đun mức cao chứa chính sách lẫn mức thấp chứa chi tiết đều phụ thuộc trừu tượng ở giữa. Nhờ đó chi tiết thay được mà chính sách không lung lay.",[973,11632,11633],{},"Giống như ổ cắm điện chung cho mọi hãng sạc. Chuẩn cắm ổn định, thiết bị đổi tùy ý.",[973,11635,11636,11637,11640,11641,11644],{},"Nguyên lý thay thế Liskov (chữ L): lớp con phải dùng được ở mọi chỗ lớp cha được dùng mà không làm hỏng kỳ vọng. Ví dụ kinh điển: ",[8030,11638,11639],{},"Square"," kế thừa ",[8030,11642,11643],{},"Rectangle",". Đoạn mã đặt rộng 5, cao 4 rồi kỳ vọng diện tích 20 sẽ sai với hình vuông. Kế thừa đúng cú pháp nhưng sai hành vi.",[973,11646,11647,11648,11651,11652,11655],{},"Nguyên lý tách giao diện (chữ I): đừng ép lớp phụ thuộc vào phương thức nó không dùng. Máy in rẻ không nên phải cài ",[8030,11649,11650],{},"fax()"," rỗng chỉ vì giao diện ",[8030,11653,11654],{},"IMachine"," gom cả in, quét, fax. Tách thành nhiều giao diện nhỏ.",[2969,11657,11658,11668],{},[2972,11659,11660],{},[2975,11661,11662,11665],{},[2978,11663,11664],{},"Chữ",[2978,11666,11667],{},"Câu hỏi tự vấn",[2988,11669,11670,11678,11685,11693,11701],{},[2975,11671,11672,11675],{},[2993,11673,11674],{},"S",[2993,11676,11677],{},"Lớp này có mấy lý do để đổi?",[2975,11679,11680,11682],{},[2993,11681,1084],{},[2993,11683,11684],{},"Thêm tính năng có phải sửa mã cũ không?",[2975,11686,11687,11690],{},[2993,11688,11689],{},"L",[2993,11691,11692],{},"Thay lớp cha bằng lớp con có gây bất ngờ không?",[2975,11694,11695,11698],{},[2993,11696,11697],{},"I",[2993,11699,11700],{},"Có lớp nào cài phương thức rỗng cho đủ giao diện không?",[2975,11702,11703,11706],{},[2993,11704,11705],{},"D",[2993,11707,11708],{},"Mô đun chính sách đang phụ thuộc lớp cụ thể hay trừu tượng?",[968,11710,11712],{"id":11711},"_6-nguyên-tắc-ít-hiểu-biết-nhất-và-quan-hệ-đối-tượng","6. Nguyên tắc ít hiểu biết nhất và quan hệ đối tượng",[973,11714,11715],{},"Nguyên tắc ít hiểu biết nhất còn gọi là luật Demeter. Mỗi đơn vị chỉ nên nói chuyện với bạn bè thân thiết.",[973,11717,11718],{},"Tránh dây dưa với người lạ. Thực tế là hạn chế số đối tác tương tác trực tiếp.",[973,11720,11721],{},"Đừng thò tay qua nhiều tầng trung gian để chạm đối tượng xa. Ít đường phụ thuộc thì thay đổi ít lan truyền hơn.",[973,11723,11724],{},"Đối chiếu hai quan hệ nền tảng. IS-A diễn đạt bằng kế thừa, hợp khi phân loại bền vững.",[973,11726,11727],{},"HAS-A diễn đạt bằng hợp thành, hợp khi hành vi biến thiên hoặc cần thay lúc chạy. Quy tắc ngón tay cái: mặc định ưu tiên HAS-A.",[973,11729,11730],{},"Chỉ dùng IS-A khi quan hệ phân loại thực sự bền và đã kiểm chứng. Giống như chỉ đúc khuôn khi mẫu đã chốt, còn thử nghiệm thì ráp modul.",[968,11732,6568],{"id":6567},[973,11734,11735],{},"Các nguyên lý bổ sung chứ không thay thế nhau. Đóng gói chỉ ra cái gì cần tách.",[973,11737,11738],{},"Giao diện và hợp thành chỉ ra tách bằng cơ chế nào. Ghép lỏng và ít hiểu biết đo chất lượng quan hệ sau khi tách.",[973,11740,11741],{},"Ba nguyên lý SOLID đặt ràng buộc để thiết kế không thoái hóa theo thời gian. Đánh đổi chung là khái niệm phức tạp tăng lên.",[973,11743,11744],{},"Thêm tầng trừu tượng, thêm đơn vị, thêm quan hệ gián tiếp. Với bài nhỏ và ổn định, áp dụng máy móc mọi nguyên lý thành quan liêu.",[973,11746,11747],{},"Nghệ thuật nằm ở liều lượng. Càng dự báo nhiều biến thiên thì càng đầu tư trừu tượng.",[973,11749,11750],{},"Phần ổn định thì giữ đơn giản. Giống như không cần khung thép cho chòi lá.",[968,11752,6578],{"id":6577},[973,11754,11755],{},"Thứ nhất: nhầm lập trình theo giao diện với từ khóa interface của ngôn ngữ. Tinh thần thật là phụ thuộc vào hợp đồng hành vi.",[973,11757,11758],{},"Thứ hai: lạm dụng kế thừa cho mọi tái sử dụng. Cây kế thừa giòn, đổi cha gây chấn động toàn bộ con.",[973,11760,11761],{},"Thứ ba: hiểu nguyên lý đóng mở như cấm sửa mã. Ý đúng là tổ chức để yêu cầu mới thường đáp ứng bằng thêm mới.",[973,11763,11764],{},"Thứ tư: áp dụng luật Demeter cực đoan thành thêm tầng trung gian vô tội vạ. Hệ thống khó theo dõi hơn thay vì đơn giản hơn.",[973,11766,11767],{},"Thứ năm: thuộc tên nguyên lý mà không nhận ra chúng trong mã thật. Đó là biết chữ mà không biết nghĩa.",[968,11769,6779],{"id":6778},[973,11771,11772],{},"Các nguyên lý này là bộ tiêu chí đánh giá mọi thiết kế. Mỗi khi xem một mẫu cụ thể, câu hỏi đầu tiên là nó thể hiện nguyên lý nào.",[973,11774,11775],{},"Về lâu dài, nguyên lý bền hơn mẫu. Mẫu cụ thể có thể lỗi thời theo công nghệ.",[973,11777,11778],{},"Nhưng tư duy đóng gói biến thiên và ghép lỏng áp dụng cho mọi hệ thống. Từ ứng dụng nhỏ tới nền tảng lớn.",[968,11780,6789],{"id":6788},[973,11782,6792],{},[973,11784,11785,11787,11788,11791],{},[6796,11786,6798],{}," Lớp ",[8030,11789,11790],{},"Report"," vừa tính số liệu vừa xuất PDF. Vi phạm nguyên lý nào?",[6974,11793,11794],{"close-text":6976,"name":6977,"open-text":6978},[973,11795,11796],{},"Đơn trách nhiệm (S): có 2 lý do để đổi. Tách thành lớp tính toán và lớp xuất.",[973,11798,11799,11801,11802,11805,11806,11809],{},[6796,11800,7124],{}," Thêm phương thức thanh toán mới phải sửa ",[8030,11803,11804],{},"switch"," trong ",[8030,11807,11808],{},"Checkout",". Vi phạm nguyên lý nào, sửa ra sao?",[6974,11811,11812],{"close-text":6976,"name":6977,"open-text":6978},[973,11813,11814,11815,11818,11819,11821],{},"Đóng mở (O). Tạo giao diện ",[8030,11816,11817],{},"PaymentMethod",", mỗi phương thức một lớp, ",[8030,11820,11808],{}," chỉ gọi giao diện.",[973,11823,11824,11826,11827,11640,11829,11831],{},[6796,11825,7655],{}," Vì sao ",[8030,11828,11639],{},[8030,11830,11643],{}," vi phạm Liskov?",[6974,11833,11834],{"close-text":6976,"name":6977,"open-text":6978},[973,11835,11836],{},"Mã đặt rộng và cao khác nhau rồi kỳ vọng diện tích bằng tích hai số sẽ sai với hình vuông.",[973,11838,11839,6799,11841,11844],{},[6796,11840,8027],{},[8030,11842,11843],{},"order.getCustomer().getAddress().getCity()"," vi phạm nguyên lý nào?",[6974,11846,11847],{"close-text":6976,"name":6977,"open-text":6978},[973,11848,11849,11850,2958],{},"Luật Demeter (ít hiểu biết nhất): gọi xuyên qua nhiều đối tượng lạ. Nên có ",[8030,11851,11852],{},"order.shippingCity()",[973,11854,11855,11857],{},[6796,11856,8212],{}," Khi nào nên dùng kế thừa (IS-A) thay vì hợp thành (HAS-A)?",[6974,11859,11860],{"close-text":6976,"name":6977,"open-text":6978},[973,11861,11862],{},"Khi quan hệ phân loại thật sự bền và lớp con thay thế được lớp cha ở mọi chỗ. Còn hành vi hay đổi thì dùng hợp thành.",[968,11864,8450],{"id":8449},[5504,11866,11867,11870,11873,11876,11879],{},[5507,11868,11869],{},"Các nguyên lý hợp thành một hệ tư duy thống nhất, từ đóng gói biến thiên tới SOLID.",[5507,11871,11872],{},"Giao diện và hợp thành đi thành cặp; HAS-A linh hoạt hơn IS-A cho hành vi biến thiên.",[5507,11874,11875],{},"Ghép lỏng và Hollywood phân chia quyền điều khiển rõ ràng giữa các thành phần.",[5507,11877,11878],{},"SOLID: một lớp một việc, thêm mới thay vì sửa cũ, lớp con thay được lớp cha, giao diện nhỏ, phụ thuộc trừu tượng.",[5507,11880,11881],{},"Áp dụng đúng liều theo mức biến thiên dự báo của bài toán.",{"title":9007,"searchDepth":68,"depth":68,"links":11883},[11884,11885,11886,11887,11888,11889,11890,11891,11892,11893,11894],{"id":970,"depth":68,"text":971},{"id":11542,"depth":68,"text":11543},{"id":11561,"depth":68,"text":11562},{"id":11586,"depth":68,"text":11587},{"id":11611,"depth":68,"text":11612},{"id":11711,"depth":68,"text":11712},{"id":6567,"depth":68,"text":6568},{"id":6577,"depth":68,"text":6578},{"id":6778,"depth":68,"text":6779},{"id":6788,"depth":68,"text":6789},{"id":8449,"depth":68,"text":8450},"Chín nguyên lý thiết kế phần mềm, SOLID, quan hệ HAS-A và IS-A cùng tư duy ghép lỏng.",{},{"title":26,"description":11895},[11899,11900,11901,9285,7],"oop","solid","nguyen-ly","K14T8hUKqImH4KYEZPpwDQ-WA7PhW-Au6kPxOoZ3Zng",{"id":11904,"title":30,"body":11905,"category":7,"day":9020,"description":12231,"difficulty":9022,"estimatedMinutes":258,"extension":9023,"lastUpdate":9024,"meta":12232,"navigation":9026,"outcomes":9020,"path":31,"prerequisites":9020,"seo":12233,"stem":32,"tags":12234,"__hash__":12238},"fundamentals\u002Ffundamentals\u002Fnhap-mon-design-patterns.md",{"type":965,"value":11906,"toc":12218},[11907,11909,11912,11915,11918,11921,11925,11928,11931,11934,11937,11940,11943,11946,11950,11953,11956,11959,11962,11966,11969,12022,12025,12028,12031,12034,12037,12040,12043,12047,12050,12053,12056,12059,12062,12065,12068,12071,12075,12078,12081,12084,12087,12090,12093,12095,12098,12101,12104,12107,12110,12112,12115,12118,12121,12124,12127,12129,12132,12135,12138,12141,12143,12145,12150,12155,12160,12165,12170,12175,12180,12185,12194,12199,12201],[968,11908,971],{"id":970},[973,11910,11911],{},"Lập trình viên gặp lại bài toán giống nhau ở nhiều dự án. Mỗi lần giải lại từ đầu vừa tốn công vừa lặp sai lầm cũ.",[973,11913,11914],{},"Mẫu thiết kế ra đời từ quan sát giản dị: ai đó đã giải bài của bạn rồi. Lời giải đó ghi lại được để tái sử dụng.",[973,11916,11917],{},"Bài này trình bày ở mức meta. Mẫu là gì, vì sao từ vựng chung quan trọng, cấu trúc một mẫu ra sao.",[973,11919,11920],{},"Cách học và dùng mẫu đúng thế nào, cùng tư duy siêu nhận thức khi học. Bài này không dạy mẫu cụ thể nào.",[968,11922,11924],{"id":11923},"_2-mẫu-là-gì-và-không-là-gì","2. Mẫu là gì và không là gì",[973,11926,11927],{},"Tuyên bố mở đầu: ai đó đã giải quyết vấn đề của bạn rồi. Thay vì phát minh lại, hãy học từ người đã vấp ngã và chắt lọc lời giải tốt.",[973,11929,11930],{},"Mẫu là mô tả đã kiểm chứng của lời giải. Dành cho bài toán thiết kế lặp đi lặp lại trong một ngữ cảnh nhất định.",[973,11932,11933],{},"Ba thành phần làm nên một mẫu: tên gọi, bài toán cùng ngữ cảnh, và lời giải đúc kết. Điều mẫu không phải cũng quan trọng không kém.",[973,11935,11936],{},"Mẫu không phải đoạn mã chép vào là chạy. Cùng một mẫu cài đặt khác nhau tùy ngôn ngữ và tình huống.",[973,11938,11939],{},"Mẫu không phải công thức máy móc áp mọi nơi. Dùng sai ngữ cảnh gây hại nhiều hơn lợi.",[973,11941,11942],{},"Quy tắc ba lần thể hiện tinh thần này. Đừng phong thủ thuật thành mẫu cho tới khi thấy nó thành công ít nhất ba lần thực tế.",[973,11944,11945],{},"Giống như công thức nấu ăn: tùy bếp mà nêm nếm. Không ai bê nguyên xi mọi gia vị.",[968,11947,11949],{"id":11948},"_3-từ-vựng-chung-và-sức-mạnh-của-tên-gọi","3. Từ vựng chung và sức mạnh của tên gọi",[973,11951,11952],{},"Lợi ích đầu tiên là từ vựng chung với lập trình viên khác. Khi cả nhóm biết tên mẫu, một câu ngắn thay cả đoạn giải thích dài.",[973,11954,11955],{},"Sức mạnh tên gọi nằm ở mật độ tri thức. Mỗi cái tên gói bài toán, ngữ cảnh, lời giải, hệ quả và đánh đổi đã biết.",[973,11957,11958],{},"Bài này cảnh báo đừng coi thường từ vựng chung. Cùng một ngôn ngữ mẫu thì thảo luận thiết kế nhanh vọt lên.",[973,11960,11961],{},"Hiểu lầm cũng giảm hẳn. Giống như tên món ăn: gọi một từ cả quán đều hiểu.",[968,11963,11965],{"id":11964},"_4-cấu-trúc-của-một-mẫu-và-bản-đồ-các-mẫu","4. Cấu trúc của một mẫu và bản đồ các mẫu",[973,11967,11968],{},"Mỗi mẫu trình bày theo cấu trúc ổn định. Nhờ đó người đọc tra cứu và so sánh dễ dàng.",[2969,11970,11971,11980],{},[2972,11972,11973],{},[2975,11974,11975,11978],{},[2978,11976,11977],{},"Phần",[2978,11979,3932],{},[2988,11981,11982,11990,11998,12006,12014],{},[2975,11983,11984,11987],{},[2993,11985,11986],{},"Tên và phân loại",[2993,11988,11989],{},"Đặt mẫu vào bản đồ chung",[2975,11991,11992,11995],{},[2993,11993,11994],{},"Bài toán",[2993,11996,11997],{},"Tình huống lặp lại và lực giằng co",[2975,11999,12000,12003],{},[2993,12001,12002],{},"Lời giải",[2993,12004,12005],{},"Cách sắp xếp thành phần, độc lập ngôn ngữ",[2975,12007,12008,12011],{},[2993,12009,12010],{},"Hệ quả",[2993,12012,12013],{},"Kết quả và đánh đổi khi áp dụng",[2975,12015,12016,12019],{},[2993,12017,12018],{},"Ví dụ",[2993,12020,12021],{},"Tình huống cụ thể giúp ghi nhớ",[973,12023,12024],{},"Không mẫu nào chỉ có lợi mà không có giá. Phần hệ quả bắt buộc phải đọc kỹ.",[973,12026,12027],{},"Kho mẫu tổ chức thành ba nhóm lớn. Nhóm khởi tạo lo việc tạo đối tượng.",[973,12029,12030],{},"Nhóm cấu trúc lo ghép lớp và đối tượng thành cấu trúc lớn hơn. Nhóm hành vi lo phân phối trách nhiệm và giao tiếp.",[973,12032,12033],{},"Bản đồ này giúp định vị mẫu mới. Bài toán về cách tạo thì nghĩ nhóm khởi tạo.",[973,12035,12036],{},"Bài toán về cách ghép thì nghĩ nhóm cấu trúc. Bài toán về phối hợp thì nghĩ nhóm hành vi.",[973,12038,12039],{},"Ngoài ra còn khái niệm phản mẫu. Đó là lời giải trông hợp lý nhưng thực chất gây hại.",[973,12041,12042],{},"Cấu trúc mô tả phản mẫu gồm tên, bài toán, lời giải sai lầm và hậu quả. Học nó giúp nhận diện và tránh từ sớm.",[968,12044,12046],{"id":12045},"_5-cách-học-và-dùng-mẫu-đúng","5. Cách học và dùng mẫu đúng",[973,12048,12049],{},"Phương pháp học đi từ cụ thể tới trừu tượng. Bắt đầu bằng tình huống đời thực dễ hình dung.",[973,12051,12052],{},"Quan sát thiết kế ngây thơ bộc lộ vấn đề gì. Xem mẫu hóa giải từng vấn đề ra sao.",[973,12054,12055],{},"Cuối cùng rút ra nguyên lý tổng quát. Triết lý đằng sau: não nhớ tốt hơn khi phải suy nghĩ và làm.",[973,12057,12058],{},"Đọc thụ động lướt qua rất nhanh quên. Giống như học bơi phải xuống nước, không học trên bờ.",[973,12060,12061],{},"Về cách dùng, có bốn điểm. Một là dùng khi bài toán thực sự khớp ngữ cảnh, không dùng vì mẫu nghe hay.",[973,12063,12064],{},"Hai là giữ thiết kế đơn giản nhất có thể. Đưa mẫu vào khi áp lực thay đổi xuất hiện.",[973,12066,12067],{},"Ba là luôn đọc phần hệ quả trước khi áp dụng. Mỗi mẫu đều có giá phải trả.",[973,12069,12070],{},"Bốn là ghi lại quyết định dùng mẫu nào ở đâu. Người tới sau đọc sẽ hiểu ý đồ.",[968,12072,12074],{"id":12073},"_6-siêu-nhận-thức-học-cách-học-mẫu","6. Siêu nhận thức: học cách học mẫu",[973,12076,12077],{},"Điểm đặc sắc là bàn công khai về siêu nhận thức. Tức suy nghĩ về cách mình học.",[973,12079,12080],{},"Đa số chưa từng học lý thuyết học tập. Nên hay dùng cách kém hiệu quả như đọc lướt rồi tưởng đã hiểu.",[973,12082,12083],{},"Cách thay thế là học chủ động. Tự đặt câu hỏi trước khi đọc đáp án.",[973,12085,12086],{},"Tự giải thích lại bằng lời của mình. Xen kẽ nhiều loại bài khác nhau, quay lại ôn sau một khoảng thời gian.",[973,12088,12089],{},"Áp vào học mẫu, siêu nhận thức là theo dõi mức của mình. Mới nghe tên, hiểu ý tưởng, áp dụng được, hay đã nhận ra tình huống dùng trong dự án thực.",[973,12091,12092],{},"Học nhóm qua thảo luận từ vựng chung rất hiệu quả. Giải thích mẫu cho người khác chính là bài kiểm tra hiểu sâu nhất.",[968,12094,6568],{"id":6567},[973,12096,12097],{},"Học mẫu kiểu này đổi tốc độ đọc lấy độ sâu hiểu. Đọc chậm hơn nhưng nhớ lâu và dùng được.",[973,12099,12100],{},"Dùng mẫu đổi đơn giản trước mắt lấy linh hoạt lâu dài. Mã có mẫu phức tạp hơn mã ngây thơ.",[973,12102,12103],{},"Nhưng khi yêu cầu đổi, mã có mẫu rẻ hơn nhiều. Từ vựng chung đổi công học thuật ngữ lấy tốc độ giao tiếp.",[973,12105,12106],{},"Tốn công học tên ban đầu, mỗi thảo luận sau đều nhanh hơn. Nhận diện phản mẫu đổi khiêm tốn lấy an toàn.",[973,12108,12109],{},"Dám thừa nhận lời giải ưa thích có thể sai để tránh hậu quả lớn hơn.",[968,12111,6578],{"id":6577},[973,12113,12114],{},"Thứ nhất là sốt mẫu: thấy mẫu nào cũng muốn dùng. Rải mẫu khắp thiết kế còn đơn giản.",[973,12116,12117],{},"Thứ hai là học tên mà không học ngữ cảnh. Nhắc vanh vách tên mẫu nhưng áp sai chỗ.",[973,12119,12120],{},"Thứ ba là coi mẫu là mã chép sẵn. Thực ra mẫu là ý tưởng cần điều chỉnh cho tình huống.",[973,12122,12123],{},"Thứ tư là đọc thụ động, lướt ví dụ mà không tự làm. Rồi tưởng mình đã biết.",[973,12125,12126],{},"Thứ năm là bỏ qua phần hệ quả. Chỉ thấy lợi mà không thấy giá của mẫu.",[968,12128,6779],{"id":6778},[973,12130,12131],{},"Tư duy meta dùng suốt khóa học. Mỗi khi gặp mẫu cụ thể, hãy hỏi bốn điều.",[973,12133,12134],{},"Tên gọi của nó là gì? Ngữ cảnh nào thì dùng? Hệ quả và cái giá ra sao? Nó thể hiện nguyên lý thiết kế nào?",[973,12136,12137],{},"Từ vựng chung dùng ngay trong thảo luận nhóm và phỏng vấn. Gọi đúng tên giúp cuộc trò chuyện ở tầm thiết kế.",[973,12139,12140],{},"Phương pháp học chủ động và siêu nhận thức áp dụng cho mọi chủ đề khó. Không riêng gì mẫu thiết kế.",[968,12142,6789],{"id":6788},[973,12144,6792],{},[973,12146,12147,12149],{},[6796,12148,6798],{}," Ba thành phần cốt lõi của một mẫu là gì?",[6974,12151,12152],{"close-text":6976,"name":6977,"open-text":6978},[973,12153,12154],{},"Tên gọi, bài toán cùng ngữ cảnh, lời giải. Kèm hệ quả và đánh đổi.",[973,12156,12157,12159],{},[6796,12158,7124],{}," Ba nhóm mẫu là gì? Cho mỗi nhóm 1 ví dụ.",[6974,12161,12162],{"close-text":6976,"name":6977,"open-text":6978},[973,12163,12164],{},"Khởi tạo (Factory Method), cấu trúc (Decorator), hành vi (Observer).",[973,12166,12167,12169],{},[6796,12168,7655],{}," Phản mẫu là gì? Cho 1 ví dụ.",[6974,12171,12172],{"close-text":6976,"name":6977,"open-text":6978},[973,12173,12174],{},"Lời giải trông hợp lý nhưng gây hại. Ví dụ lớp chúa (God object) ôm mọi việc.",[973,12176,12177,12179],{},[6796,12178,8027],{}," Quy tắc ba lần nói gì?",[6974,12181,12182],{"close-text":6976,"name":6977,"open-text":6978},[973,12183,12184],{},"Chỉ coi một cách làm là mẫu khi đã thấy nó thành công ít nhất 3 lần trong thực tế.",[973,12186,12187,12189,12190,12193],{},[6796,12188,8212],{}," Khi nào ",[6796,12191,12192],{},"không"," nên dùng mẫu?",[6974,12195,12196],{"close-text":6976,"name":6977,"open-text":6978},[973,12197,12198],{},"Khi bài toán nhỏ, chỉ có 1 biến thể và không có dấu hiệu sẽ đổi. Thêm mẫu lúc đó chỉ làm mã khó đọc.",[968,12200,8450],{"id":8449},[5504,12202,12203,12206,12209,12212,12215],{},[5507,12204,12205],{},"Mẫu là lời giải đã kiểm chứng cho bài toán lặp lại trong một ngữ cảnh, phát hiện từ thực tiễn.",[5507,12207,12208],{},"Giá trị lớn nhất là từ vựng chung giúp giao tiếp ở tầm thiết kế.",[5507,12210,12211],{},"Mỗi mẫu gồm tên, bài toán, lời giải và hệ quả; kho mẫu chia ba nhóm khởi tạo, cấu trúc, hành vi.",[5507,12213,12214],{},"Học hiệu quả bằng cách chủ động từ cụ thể tới trừu tượng, dùng mẫu đúng bằng cách khớp ngữ cảnh.",[5507,12216,12217],{},"Theo dõi mức hiểu của bản thân bằng siêu nhận thức và đọc kỹ hệ quả trước khi áp dụng.",{"title":9007,"searchDepth":68,"depth":68,"links":12219},[12220,12221,12222,12223,12224,12225,12226,12227,12228,12229,12230],{"id":970,"depth":68,"text":971},{"id":11923,"depth":68,"text":11924},{"id":11948,"depth":68,"text":11949},{"id":11964,"depth":68,"text":11965},{"id":12045,"depth":68,"text":12046},{"id":12073,"depth":68,"text":12074},{"id":6567,"depth":68,"text":6568},{"id":6577,"depth":68,"text":6578},{"id":6778,"depth":68,"text":6779},{"id":6788,"depth":68,"text":6789},{"id":8449,"depth":68,"text":8450},"Mẫu thiết kế là gì, từ vựng chung, cấu trúc của một mẫu, cách học và dùng mẫu đúng, cùng siêu nhận thức về học tập.",{},{"title":30,"description":12231},[12235,12236,12237,7],"design-patterns","tu-vung","phuong-phap","Vr6mMe-BqZRemrnfK6xoMHkp7lHPouCOv5KXswlsFmY",{"id":12240,"title":34,"body":12241,"category":7,"day":9020,"description":13372,"difficulty":9022,"estimatedMinutes":258,"extension":9023,"lastUpdate":9024,"meta":13373,"navigation":9026,"outcomes":9020,"path":35,"prerequisites":9020,"seo":13374,"stem":36,"tags":13375,"__hash__":13380},"fundamentals\u002Ffundamentals\u002Fp-np-va-do-kho.md",{"type":965,"value":12242,"toc":13360},[12243,12245,12248,12251,12254,12258,12395,12402,12441,12476,12479,12617,12620,12624,12659,12669,12672,12675,12679,12685,12695,12701,12708,12840,12921,12924,12928,12931,12934,12937,12940,12943,12945,12948,12951,12954,12957,12960,12962,12965,12968,12971,12978,12981,12983,12986,12989,12992,12994,12996,13001,13074,13079,13084,13089,13123,13128,13136,13187,13267,13269],[968,12244,971],{"id":970},[973,12246,12247],{},"Không phải bài toán nào cũng khó như nhau. Biết bài của mình khó cỡ nào giúp chọn chiến lược đúng.",[973,12249,12250],{},"Bài dễ thì tìm lời giải tối ưu. Bài khó thì chấp nhận lời giải khả thi.",[973,12252,12253],{},"Cộng đồng phân loại độ khó thành P, NP, NP-complete và NP-hard. Câu hỏi P có bằng NP không treo giải một triệu đô la.",[968,12255,12257],{"id":12256},"_2-thuật-toán-đa-thức-bài-toán-quyết-định-và-chứng-chỉ","2. Thuật toán đa thức, bài toán quyết định và chứng chỉ",[973,12259,12260,12261,9955,12337,12365,12366,12394],{},"Thuật toán đa thức có thời gian chạy ",[1000,12262,12264,12288],{"className":12263},[1003],[1000,12265,12267],{"className":12266},[1007],[1009,12268,12269],{"xmlns":1011},[1013,12270,12271,12285],{},[1016,12272,12273,12275,12277,12283],{},[1019,12274,1084],{},[1023,12276,1026],{"stretchy":1025},[1324,12278,12279,12281],{},[1019,12280,1029],{},[1019,12282,4515],{},[1023,12284,1032],{"stretchy":1025},[1034,12286,12287],{"encoding":1036},"O(n^k)",[1000,12289,12291],{"className":12290,"ariaHidden":1042},[1041],[1000,12292,12294,12298,12301,12304,12334],{"className":12293},[1046],[1000,12295],{"className":12296,"style":12297},[1050],"height:1.0991em;vertical-align:-0.25em;",[1000,12299,1084],{"className":12300,"style":1113},[1055,1056],[1000,12302,1026],{"className":12303},[1061],[1000,12305,12307,12310],{"className":12306},[1055],[1000,12308,1029],{"className":12309},[1055,1056],[1000,12311,12313],{"className":12312},[1399],[1000,12314,12316],{"className":12315},[1403],[1000,12317,12319],{"className":12318},[1407],[1000,12320,12323],{"className":12321,"style":12322},[1411],"height:0.8491em;",[1000,12324,12325,12328],{"style":1415},[1000,12326],{"className":12327,"style":1420},[1419],[1000,12329,12331],{"className":12330},[1424,1425,1426,1427],[1000,12332,4515],{"className":12333,"style":4531},[1055,1056,1427],[1000,12335,1032],{"className":12336},[1068],[1000,12338,12340,12353],{"className":12339},[1003],[1000,12341,12343],{"className":12342},[1007],[1009,12344,12345],{"xmlns":1011},[1013,12346,12347,12351],{},[1016,12348,12349],{},[1019,12350,4515],{},[1034,12352,4515],{"encoding":1036},[1000,12354,12356],{"className":12355,"ariaHidden":1042},[1041],[1000,12357,12359,12362],{"className":12358},[1046],[1000,12360],{"className":12361,"style":4527},[1050],[1000,12363,4515],{"className":12364,"style":4531},[1055,1056]," là hằng số. Hàm đa thức tăng chậm hơn hàm mũ rất nhiều khi ",[1000,12367,12369,12382],{"className":12368},[1003],[1000,12370,12372],{"className":12371},[1007],[1009,12373,12374],{"xmlns":1011},[1013,12375,12376,12380],{},[1016,12377,12378],{},[1019,12379,1029],{},[1034,12381,1029],{"encoding":1036},[1000,12383,12385],{"className":12384,"ariaHidden":1042},[1041],[1000,12386,12388,12391],{"className":12387},[1046],[1000,12389],{"className":12390,"style":1762},[1050],[1000,12392,1029],{"className":12393},[1055,1056]," lớn, nên lời giải đa thức được coi là khả thi.",[973,12396,12397,12398,12401],{},"Lý thuyết độ khó làm việc với ",[6796,12399,12400],{},"bài toán quyết định",": câu trả lời chỉ là có hoặc không. Bài tối ưu được đổi thành bài quyết định bằng một ngưỡng.",[5504,12403,12404,12407],{},[5507,12405,12406],{},"Bài tối ưu: tìm tour ngắn nhất qua mọi thành phố.",[5507,12408,12409,12410,12440],{},"Bài quyết định: có tour nào dài không quá ",[1000,12411,12413,12427],{"className":12412},[1003],[1000,12414,12416],{"className":12415},[1007],[1009,12417,12418],{"xmlns":1011},[1013,12419,12420,12425],{},[1016,12421,12422],{},[1019,12423,12424],{},"K",[1034,12426,12424],{"encoding":1036},[1000,12428,12430],{"className":12429,"ariaHidden":1042},[1041],[1000,12431,12433,12436],{"className":12432},[1046],[1000,12434],{"className":12435,"style":3910},[1050],[1000,12437,12424],{"className":12438,"style":12439},[1055,1056],"margin-right:0.0715em;"," không?",[973,12442,12443,12446,12447,12475],{},[6796,12444,12445],{},"Chứng chỉ"," là bằng chứng cho câu trả lời \"có\". Với câu hỏi tour trên, chứng chỉ chính là một tour cụ thể. Ai cầm tour đó cũng kiểm tra được trong thời gian đa thức: đi qua đủ mọi thành phố chưa, tổng độ dài có không quá ",[1000,12448,12450,12463],{"className":12449},[1003],[1000,12451,12453],{"className":12452},[1007],[1009,12454,12455],{"xmlns":1011},[1013,12456,12457,12461],{},[1016,12458,12459],{},[1019,12460,12424],{},[1034,12462,12424],{"encoding":1036},[1000,12464,12466],{"className":12465,"ariaHidden":1042},[1041],[1000,12467,12469,12472],{"className":12468},[1046],[1000,12470],{"className":12471,"style":3910},[1050],[1000,12473,12424],{"className":12474,"style":12439},[1055,1056]," không.",[973,12477,12478],{},"Từ đó tách hai loại công việc:",[2969,12480,12481,12494],{},[2972,12482,12483],{},[2975,12484,12485,12488,12491],{},[2978,12486,12487],{},"Việc",[2978,12489,12490],{},"Ví dụ với tour",[2978,12492,12493],{},"Độ khó",[2988,12495,12496,12535],{},[2975,12497,12498,12501,12532],{},[2993,12499,12500],{},"Tìm chứng chỉ",[2993,12502,12503,12504],{},"Tìm một tour dài không quá ",[1000,12505,12507,12520],{"className":12506},[1003],[1000,12508,12510],{"className":12509},[1007],[1009,12511,12512],{"xmlns":1011},[1013,12513,12514,12518],{},[1016,12515,12516],{},[1019,12517,12424],{},[1034,12519,12424],{"encoding":1036},[1000,12521,12523],{"className":12522,"ariaHidden":1042},[1041],[1000,12524,12526,12529],{"className":12525},[1046],[1000,12527],{"className":12528,"style":3910},[1050],[1000,12530,12424],{"className":12531,"style":12439},[1055,1056],[2993,12533,12534],{},"Có thể rất khó",[2975,12536,12537,12540,12571],{},[2993,12538,12539],{},"Kiểm tra chứng chỉ",[2993,12541,12542,12543],{},"Cho sẵn tour, cộng độ dài và so với ",[1000,12544,12546,12559],{"className":12545},[1003],[1000,12547,12549],{"className":12548},[1007],[1009,12550,12551],{"xmlns":1011},[1013,12552,12553,12557],{},[1016,12554,12555],{},[1019,12556,12424],{},[1034,12558,12424],{"encoding":1036},[1000,12560,12562],{"className":12561,"ariaHidden":1042},[1041],[1000,12563,12565,12568],{"className":12564},[1046],[1000,12566],{"className":12567,"style":3910},[1050],[1000,12569,12424],{"className":12570,"style":12439},[1055,1056],[2993,12572,12573,12574],{},"Dễ, ",[1000,12575,12577,12596],{"className":12576},[1003],[1000,12578,12580],{"className":12579},[1007],[1009,12581,12582],{"xmlns":1011},[1013,12583,12584,12594],{},[1016,12585,12586,12588,12590,12592],{},[1019,12587,1084],{},[1023,12589,1026],{"stretchy":1025},[1019,12591,1029],{},[1023,12593,1032],{"stretchy":1025},[1034,12595,2784],{"encoding":1036},[1000,12597,12599],{"className":12598,"ariaHidden":1042},[1041],[1000,12600,12602,12605,12608,12611,12614],{"className":12601},[1046],[1000,12603],{"className":12604,"style":1051},[1050],[1000,12606,1084],{"className":12607,"style":1113},[1055,1056],[1000,12609,1026],{"className":12610},[1061],[1000,12612,1029],{"className":12613},[1055,1056],[1000,12615,1032],{"className":12616},[1068],[973,12618,12619],{},"Giống như giải Sudoku thì khó, nhưng chấm một lời giải Sudoku thì nhanh. Phân biệt này là chìa khóa của toàn bộ lý thuyết.",[968,12621,12623],{"id":12622},"_3-lớp-p-và-lớp-np","3. Lớp P và lớp NP",[973,12625,12626,12629,12630,12658],{},[6796,12627,12628],{},"Lớp P"," gồm bài toán quyết định giải được bằng thuật toán đa thức. Ví dụ: có đường đi từ A tới B không (BFS), mảng đã sắp xếp chưa, có đường đi ngắn hơn ",[1000,12631,12633,12646],{"className":12632},[1003],[1000,12634,12636],{"className":12635},[1007],[1009,12637,12638],{"xmlns":1011},[1013,12639,12640,12644],{},[1016,12641,12642],{},[1019,12643,12424],{},[1034,12645,12424],{"encoding":1036},[1000,12647,12649],{"className":12648,"ariaHidden":1042},[1041],[1000,12650,12652,12655],{"className":12651},[1046],[1000,12653],{"className":12654,"style":3910},[1050],[1000,12656,12424],{"className":12657,"style":12439},[1055,1056]," không (Dijkstra).",[973,12660,12661,12664,12665,12668],{},[6796,12662,12663],{},"Lớp NP"," gồm bài toán quyết định mà mọi câu trả lời \"có\" đều có chứng chỉ ",[6796,12666,12667],{},"kiểm tra được"," trong thời gian đa thức. NP viết tắt của nondeterministic polynomial: một máy \"đoán\" đúng chứng chỉ rồi kiểm tra nó trong đa thức.",[973,12670,12671],{},"Mọi bài trong P đều thuộc NP: nếu tự giải được trong đa thức thì kiểm tra càng dễ. Vậy P là tập con của NP.",[973,12673,12674],{},"Điều ngược lại, NP có nằm trong P không, chưa ai biết. Đây là câu hỏi P có bằng NP không, một trong bảy bài toán thiên niên kỷ với giải thưởng một triệu đô la của Viện Clay.",[968,12676,12678],{"id":12677},"_4-quy-dẫn-np-complete-và-np-hard","4. Quy dẫn, NP-complete và NP-hard",[973,12680,12681,12684],{},[6796,12682,12683],{},"Quy dẫn"," bài A về bài B nghĩa là: biến mọi đầu vào của A thành đầu vào của B trong thời gian đa thức, sao cho đáp án giữ nguyên. Nếu giải được B nhanh thì giải được A nhanh. Nói cách khác, B khó ít nhất bằng A.",[973,12686,12687,12690,12691,12694],{},[6796,12688,12689],{},"NP-hard"," là bài mà ",[6796,12692,12693],{},"mọi"," bài trong NP đều quy dẫn được về nó. Nó khó ít nhất bằng mọi bài trong NP, nhưng không bắt buộc thuộc NP. Ví dụ bài toán dừng (halting problem) là NP-hard mà thậm chí không giải được.",[973,12696,12697,12700],{},[6796,12698,12699],{},"NP-complete"," là bài vừa NP-hard vừa thuộc NP. Đây là những bài khó nhất trong NP. Bài NP-complete đầu tiên là SAT (Cook, 1971).",[973,12702,12703,12704,12707],{},"Tính chất đáng chú ý: chỉ cần tìm ra thuật toán đa thức cho ",[6796,12705,12706],{},"một"," bài NP-complete, mọi bài trong NP đều giải được trong đa thức, tức P = NP.",[2969,12709,12710,12719],{},[2972,12711,12712],{},[2975,12713,12714,12717],{},[2978,12715,12716],{},"Lớp",[2978,12718,12018],{},[2988,12720,12721,12729,12824,12832],{},[2975,12722,12723,12726],{},[2993,12724,12725],{},"P",[2993,12727,12728],{},"Tìm kiếm nhị phân, sắp xếp, BFS, Dijkstra, cây khung nhỏ nhất, ghép cặp",[2975,12730,12731,12734],{},[2993,12732,12733],{},"NP-complete (dạng quyết định)",[2993,12735,12736,12737,12765,12766,12795,12796],{},"SAT, có tour TSP dài không quá ",[1000,12738,12740,12753],{"className":12739},[1003],[1000,12741,12743],{"className":12742},[1007],[1009,12744,12745],{"xmlns":1011},[1013,12746,12747,12751],{},[1016,12748,12749],{},[1019,12750,12424],{},[1034,12752,12424],{"encoding":1036},[1000,12754,12756],{"className":12755,"ariaHidden":1042},[1041],[1000,12757,12759,12762],{"className":12758},[1046],[1000,12760],{"className":12761,"style":3910},[1050],[1000,12763,12424],{"className":12764,"style":12439},[1055,1056],", ba lô 0-1 có giá trị ít nhất ",[1000,12767,12769,12783],{"className":12768},[1003],[1000,12770,12772],{"className":12771},[1007],[1009,12773,12774],{"xmlns":1011},[1013,12775,12776,12781],{},[1016,12777,12778],{},[1019,12779,12780],{},"V",[1034,12782,12780],{"encoding":1036},[1000,12784,12786],{"className":12785,"ariaHidden":1042},[1041],[1000,12787,12789,12792],{"className":12788},[1046],[1000,12790],{"className":12791,"style":3910},[1050],[1000,12793,12780],{"className":12794,"style":1434},[1055,1056],", tô 3 màu đồ thị, phủ đỉnh cỡ ",[1000,12797,12799,12812],{"className":12798},[1003],[1000,12800,12802],{"className":12801},[1007],[1009,12803,12804],{"xmlns":1011},[1013,12805,12806,12810],{},[1016,12807,12808],{},[1019,12809,4515],{},[1034,12811,4515],{"encoding":1036},[1000,12813,12815],{"className":12814,"ariaHidden":1042},[1041],[1000,12816,12818,12821],{"className":12817},[1046],[1000,12819],{"className":12820,"style":4527},[1050],[1000,12822,4515],{"className":12823,"style":4531},[1055,1056],[2975,12825,12826,12829],{},[2993,12827,12828],{},"NP-hard (dạng tối ưu)",[2993,12830,12831],{},"Tìm tour TSP ngắn nhất, phân cụm K-means tối ưu toàn cục",[2975,12833,12834,12837],{},[2993,12835,12836],{},"Thuộc NP, chưa biết có NP-complete không",[2993,12838,12839],{},"Phân tích số nguyên ra thừa số nguyên tố (nền tảng của RSA)",[973,12841,12842,12843,12891,12892,12920],{},"Hai nhầm lẫn hay gặp: RSA không dựa trên bài NP-complete, và ba lô 0-1 có thuật toán quy hoạch động ",[1000,12844,12846,12869],{"className":12845},[1003],[1000,12847,12849],{"className":12848},[1007],[1009,12850,12851],{"xmlns":1011},[1013,12852,12853,12866],{},[1016,12854,12855,12857,12859,12861,12864],{},[1019,12856,1084],{},[1023,12858,1026],{"stretchy":1025},[1019,12860,1029],{},[1019,12862,12863],{},"W",[1023,12865,1032],{"stretchy":1025},[1034,12867,12868],{"encoding":1036},"O(nW)",[1000,12870,12872],{"className":12871,"ariaHidden":1042},[1041],[1000,12873,12875,12878,12881,12884,12888],{"className":12874},[1046],[1000,12876],{"className":12877,"style":1051},[1050],[1000,12879,1084],{"className":12880,"style":1113},[1055,1056],[1000,12882,1026],{"className":12883},[1061],[1000,12885,12887],{"className":12886,"style":10367},[1055,1056],"nW",[1000,12889,1032],{"className":12890},[1068],", chỉ là giả đa thức vì ",[1000,12893,12895,12908],{"className":12894},[1003],[1000,12896,12898],{"className":12897},[1007],[1009,12899,12900],{"xmlns":1011},[1013,12901,12902,12906],{},[1016,12903,12904],{},[1019,12905,12863],{},[1034,12907,12863],{"encoding":1036},[1000,12909,12911],{"className":12910,"ariaHidden":1042},[1041],[1000,12912,12914,12917],{"className":12913},[1046],[1000,12915],{"className":12916,"style":3910},[1050],[1000,12918,12863],{"className":12919,"style":10367},[1055,1056]," có thể lớn theo hàm mũ số bit.",[973,12922,12923],{},"Sơ đồ quan hệ, giả định P khác NP: P nằm trong NP, NP-complete là phần khó nhất của NP, NP-hard bao NP-complete và tràn ra ngoài NP. Nếu P bằng NP thì P, NP và NP-complete trùng nhau.",[968,12925,12927],{"id":12926},"_5-vì-sao-bài-toán-khó-buộc-phải-xấp-xỉ","5. Vì sao bài toán khó buộc phải xấp xỉ",[973,12929,12930],{},"Lý thuyết độ khó gắn với thực hành qua một câu hỏi. Liệu có nên nhắm nghiệm tối ưu ngay từ đầu không.",[973,12932,12933],{},"Nếu tìm và xác minh tối ưu tốn công khổng lồ, lời giải khả thi thực tế tốt hơn. Lời giải khả thi dựa trên kinh nghiệm gọi là heuristic.",[973,12935,12936],{},"Điện toán đám mây co giãn mang lựa chọn mới. Dữ liệu tăng thì cấp thêm CPU hay máy ảo để giữ thời gian.",[973,12938,12939],{},"Nhưng co giãn không cứu được tăng trưởng hàm mũ của NP-hard. Nó chỉ trì hoãn điểm sụp đổ chứ không xóa bỏ nó.",[973,12941,12942],{},"Giống như thêm xô múc nước lũ. Nước lên theo hàm mũ thì bao nhiêu xô cũng tràn.",[968,12944,9148],{"id":9147},[973,12946,12947],{},"Bốn lớp cho bốn chiến lược khác nhau. Bài lớp P thì đầu tư tìm tối ưu vì công bỏ ra được đền đáp.",[973,12949,12950],{},"Bài NP-complete hay NP-hard thì chấp nhận heuristic và xấp xỉ. Đặt ngưỡng sai số từ đầu và kiểm chứng sai số.",[973,12952,12953],{},"Đừng đòi nghiệm tối ưu. Đánh đổi cốt lõi là giữa tối ưu và khả thi.",[973,12955,12956],{},"Càng khăng khăng tối ưu cho bài khó, chi phí càng phình theo hàm mũ. Đánh đổi thứ hai là giữa phân loại và giải.",[973,12958,12959],{},"Một ngày phân tích độ khó có thể tiết kiệm hàng tháng cài đặt lời giải không tưởng.",[968,12961,9167],{"id":9166},[973,12963,12964],{},"Thứ nhất: lẫn khó kiểm tra với khó giải. Thấy nghiệm dễ kiểm tra thì tưởng bài dễ giải.",[973,12966,12967],{},"Trong khi đó chính là đặc trưng của NP. Thứ hai: không phân loại độ khó mà lao ngay vào tìm tối ưu cho NP-hard.",[973,12969,12970],{},"Rồi kẹt trong vòng lặp tối ưu vô vọng. Thứ ba: hiểu sai quan hệ tập con.",[973,12972,12973,12974,12977],{},"Mọi P đều là NP nhưng ngược lại chưa chứng minh được. Không thể mặc định bài NP nào cũng có lời giải đa thức. Chiều quy dẫn cũng hay bị đảo: muốn chứng minh bài mới khó, phải quy dẫn một bài đã biết là NP-complete ",[6796,12975,12976],{},"về"," bài mới.",[973,12979,12980],{},"Thứ tư: tin thêm phần cứng giải được NP-hard quy mô lớn. Tăng trưởng hàm mũ nuốt chửng mọi nâng cấp tuyến tính.",[968,12982,9183],{"id":9182},[973,12984,12985],{},"Tư duy độ khó dùng ngay khi nhận bài mới. Thử xem nó có lời giải đa thức đã biết không.",[973,12987,12988],{},"Thử xem nó có phải biến thể của ba lô hay người bán hàng rong không. Từ đó quyết định theo đuổi tối ưu hay chấp nhận heuristic.",[973,12990,12991],{},"Thói quen này rẻ mà cứu nhiều công sức. Phân loại một giờ đỡ hơn cài đặt một tháng vô vọng.",[968,12993,6789],{"id":6788},[973,12995,6792],{},[973,12997,12998,13000],{},[6796,12999,6798],{}," Chứng chỉ cho bài \"đồ thị có tô được 3 màu không\" là gì, và kiểm tra mất bao lâu?",[6974,13002,13003],{"close-text":6976,"name":6977,"open-text":6978},[973,13004,13005,13006,2958],{},"Một cách gán màu cho mọi đỉnh. Kiểm tra: duyệt mọi cạnh xem 2 đầu khác màu, ",[1000,13007,13009,13034],{"className":13008},[1003],[1000,13010,13012],{"className":13011},[1007],[1009,13013,13014],{"xmlns":1011},[1013,13015,13016,13031],{},[1016,13017,13018,13020,13022,13024,13026,13029],{},[1019,13019,1084],{},[1023,13021,1026],{"stretchy":1025},[1019,13023,12780],{},[1023,13025,1333],{},[1019,13027,13028],{},"E",[1023,13030,1032],{"stretchy":1025},[1034,13032,13033],{"encoding":1036},"O(V + E)",[1000,13035,13037,13061],{"className":13036,"ariaHidden":1042},[1041],[1000,13038,13040,13043,13046,13049,13052,13055,13058],{"className":13039},[1046],[1000,13041],{"className":13042,"style":1051},[1050],[1000,13044,1084],{"className":13045,"style":1113},[1055,1056],[1000,13047,1026],{"className":13048},[1061],[1000,13050,12780],{"className":13051,"style":1434},[1055,1056],[1000,13053],{"className":13054,"style":1434},[1371],[1000,13056,1333],{"className":13057},[1438],[1000,13059],{"className":13060,"style":1434},[1371],[1000,13062,13064,13067,13071],{"className":13063},[1046],[1000,13065],{"className":13066,"style":1051},[1050],[1000,13068,13028],{"className":13069,"style":13070},[1055,1056],"margin-right:0.0576em;",[1000,13072,1032],{"className":13073},[1068],[973,13075,13076,13078],{},[6796,13077,7124],{}," Vì sao P là tập con của NP?",[6974,13080,13081],{"close-text":6976,"name":6977,"open-text":6978},[973,13082,13083],{},"Nếu giải được trong đa thức thì kiểm tra cũng được: bỏ qua chứng chỉ, tự giải lại rồi so.",[973,13085,13086,13088],{},[6796,13087,7655],{}," Tìm tour TSP ngắn nhất là NP-complete hay NP-hard?",[6974,13090,13091],{"close-text":6976,"name":6977,"open-text":6978},[973,13092,13093,13094,13122],{},"NP-hard. Bản quyết định \"có tour dài không quá ",[1000,13095,13097,13110],{"className":13096},[1003],[1000,13098,13100],{"className":13099},[1007],[1009,13101,13102],{"xmlns":1011},[1013,13103,13104,13108],{},[1016,13105,13106],{},[1019,13107,12424],{},[1034,13109,12424],{"encoding":1036},[1000,13111,13113],{"className":13112,"ariaHidden":1042},[1041],[1000,13114,13116,13119],{"className":13115},[1046],[1000,13117],{"className":13118,"style":3910},[1050],[1000,13120,12424],{"className":13121,"style":12439},[1055,1056]," không\" mới là NP-complete, vì bản tối ưu không phải bài quyết định nên không thuộc NP.",[973,13124,13125,13127],{},[6796,13126,8027],{}," Muốn chứng minh bài X mới là NP-hard, quy dẫn theo chiều nào?",[6974,13129,13130],{"close-text":6976,"name":6977,"open-text":6978},[973,13131,13132,13133,13135],{},"Quy dẫn một bài đã biết là NP-complete (ví dụ SAT) ",[6796,13134,12976],{}," X trong thời gian đa thức.",[973,13137,13138,13140,13141,13186],{},[6796,13139,8212],{}," Ba lô 0-1 có DP ",[1000,13142,13144,13165],{"className":13143},[1003],[1000,13145,13147],{"className":13146},[1007],[1009,13148,13149],{"xmlns":1011},[1013,13150,13151,13163],{},[1016,13152,13153,13155,13157,13159,13161],{},[1019,13154,1084],{},[1023,13156,1026],{"stretchy":1025},[1019,13158,1029],{},[1019,13160,12863],{},[1023,13162,1032],{"stretchy":1025},[1034,13164,12868],{"encoding":1036},[1000,13166,13168],{"className":13167,"ariaHidden":1042},[1041],[1000,13169,13171,13174,13177,13180,13183],{"className":13170},[1046],[1000,13172],{"className":13173,"style":1051},[1050],[1000,13175,1084],{"className":13176,"style":1113},[1055,1056],[1000,13178,1026],{"className":13179},[1061],[1000,13181,12887],{"className":13182,"style":10367},[1055,1056],[1000,13184,1032],{"className":13185},[1068],". Vậy nó có thuộc P không?",[6974,13188,13189],{"close-text":6976,"name":6977,"open-text":6978},[973,13190,13191,13192,13237,13238,13266],{},"Chưa biết. ",[1000,13193,13195,13216],{"className":13194},[1003],[1000,13196,13198],{"className":13197},[1007],[1009,13199,13200],{"xmlns":1011},[1013,13201,13202,13214],{},[1016,13203,13204,13206,13208,13210,13212],{},[1019,13205,1084],{},[1023,13207,1026],{"stretchy":1025},[1019,13209,1029],{},[1019,13211,12863],{},[1023,13213,1032],{"stretchy":1025},[1034,13215,12868],{"encoding":1036},[1000,13217,13219],{"className":13218,"ariaHidden":1042},[1041],[1000,13220,13222,13225,13228,13231,13234],{"className":13221},[1046],[1000,13223],{"className":13224,"style":1051},[1050],[1000,13226,1084],{"className":13227,"style":1113},[1055,1056],[1000,13229,1026],{"className":13230},[1061],[1000,13232,12887],{"className":13233,"style":10367},[1055,1056],[1000,13235,1032],{"className":13236},[1068]," là giả đa thức: ",[1000,13239,13241,13254],{"className":13240},[1003],[1000,13242,13244],{"className":13243},[1007],[1009,13245,13246],{"xmlns":1011},[1013,13247,13248,13252],{},[1016,13249,13250],{},[1019,13251,12863],{},[1034,13253,12863],{"encoding":1036},[1000,13255,13257],{"className":13256,"ariaHidden":1042},[1041],[1000,13258,13260,13263],{"className":13259},[1046],[1000,13261],{"className":13262,"style":3910},[1050],[1000,13264,12863],{"className":13265,"style":10367},[1055,1056]," có thể lớn theo hàm mũ của số bit biểu diễn nó, nên đây không phải thuật toán đa thức theo kích thước đầu vào.",[968,13268,8450],{"id":8449},[5504,13270,13271,13348,13351,13354,13357],{},[5507,13272,13273,13274,13347],{},"Thuật toán đa thức ",[1000,13275,13277,13300],{"className":13276},[1003],[1000,13278,13280],{"className":13279},[1007],[1009,13281,13282],{"xmlns":1011},[1013,13283,13284,13298],{},[1016,13285,13286,13288,13290,13296],{},[1019,13287,1084],{},[1023,13289,1026],{"stretchy":1025},[1324,13291,13292,13294],{},[1019,13293,1029],{},[1019,13295,4515],{},[1023,13297,1032],{"stretchy":1025},[1034,13299,12287],{"encoding":1036},[1000,13301,13303],{"className":13302,"ariaHidden":1042},[1041],[1000,13304,13306,13309,13312,13315,13344],{"className":13305},[1046],[1000,13307],{"className":13308,"style":12297},[1050],[1000,13310,1084],{"className":13311,"style":1113},[1055,1056],[1000,13313,1026],{"className":13314},[1061],[1000,13316,13318,13321],{"className":13317},[1055],[1000,13319,1029],{"className":13320},[1055,1056],[1000,13322,13324],{"className":13323},[1399],[1000,13325,13327],{"className":13326},[1403],[1000,13328,13330],{"className":13329},[1407],[1000,13331,13333],{"className":13332,"style":12322},[1411],[1000,13334,13335,13338],{"style":1415},[1000,13336],{"className":13337,"style":1420},[1419],[1000,13339,13341],{"className":13340},[1424,1425,1426,1427],[1000,13342,4515],{"className":13343,"style":4531},[1055,1056,1427],[1000,13345,1032],{"className":13346},[1068]," là chuẩn mực của lời giải khả thi; chứng chỉ là bằng chứng cho câu trả lời \"có\" của bài quyết định.",[5507,13349,13350],{},"P: giải được trong đa thức. NP: kiểm tra chứng chỉ được trong đa thức. P là tập con của NP.",[5507,13352,13353],{},"NP-hard: mọi bài NP quy dẫn được về nó. NP-complete: vừa NP-hard vừa thuộc NP.",[5507,13355,13356],{},"Với bài khó, chiến lược đúng là heuristic và xấp xỉ có ngưỡng sai số.",[5507,13358,13359],{},"Thêm phần cứng không xóa được bản chất hàm mũ của bài toán khó.",{"title":9007,"searchDepth":68,"depth":68,"links":13361},[13362,13363,13364,13365,13366,13367,13368,13369,13370,13371],{"id":970,"depth":68,"text":971},{"id":12256,"depth":68,"text":12257},{"id":12622,"depth":68,"text":12623},{"id":12677,"depth":68,"text":12678},{"id":12926,"depth":68,"text":12927},{"id":9147,"depth":68,"text":9148},{"id":9166,"depth":68,"text":9167},{"id":9182,"depth":68,"text":9183},{"id":6788,"depth":68,"text":6789},{"id":8449,"depth":68,"text":8450},"Thuật toán đa thức, chứng chỉ, quan hệ P là tập con của NP, NP-complete, NP-hard và chiến lược ứng phó với bài toán khó.",{},{"title":34,"description":13372},[13376,13377,13378,13379,7],"p-np","np-complete","np-hard","do-kho","QJnlywleVMvMnrKAMmV7xlBeONSAZM9zFtoHptUWbFE",{"id":13382,"title":38,"body":13383,"category":7,"day":9020,"description":14855,"difficulty":9022,"estimatedMinutes":258,"extension":9023,"lastUpdate":9024,"meta":14856,"navigation":9026,"outcomes":9020,"path":39,"prerequisites":9020,"seo":14857,"stem":40,"tags":14858,"__hash__":14862},"fundamentals\u002Ffundamentals\u002Fram-model-va-chi-phi.md",{"type":965,"value":13384,"toc":14843},[13385,13387,13390,13393,13396,13400,13403,13406,13409,13412,13415,13419,13422,13467,13470,13473,13518,13522,13525,13528,13531,13615,13618,13621,13625,13628,13941,14086,14133,14136,14139,14249,14281,14283,14286,14289,14292,14295,14297,14300,14303,14306,14309,14312,14314,14381,14384,14387,14389,14391,14396,14401,14410,14458,14463,14468,14564,14569,14748,14824,14826],[968,13386,971],{"id":970},[973,13388,13389],{},"Mọi phát biểu về độ phức tạp đều đứng trên một mô hình tính toán. Đó là tập quy ước về phép nào tốn bao nhiêu chi phí.",[973,13391,13392],{},"Không thống nhất mô hình thì so hai thuật toán như đua trên hai địa hình khác nhau. Mô hình RAM là máy trừu tượng tối giản để đếm bước logic.",[973,13394,13395],{},"Thay vì đếm giây hay lệnh máy cụ thể. Bài này trình bày vì sao cần mô hình, các giả định RAM, cách đếm bước và ý nghĩa bỏ hằng số.",[968,13397,13399],{"id":13398},"_2-vì-sao-cần-một-mô-hình-trừu-tượng","2. Vì sao cần một mô hình trừu tượng",[973,13401,13402],{},"Bài này mở đầu bằng câu hỏi ngây thơ: hiệu năng là gì, đo bằng gì. Đo giờ chạy trên một đầu vào nghe thẳng thắn.",[973,13404,13405],{},"Nhưng kết quả nhiễu vì chip đa nhân, hệ điều hành và tiến trình nền. Tệ hơn, con số tuyệt đối gắn chặt với máy chạy thử.",[973,13407,13408],{},"Nên nó không có ý nghĩa phổ quát. So tương đối bằng benchmark vẫn còn quá nhiều biến số.",[973,13410,13411],{},"Đếm lệnh thì gắn với nền tảng và ngôn ngữ. Lối thoát là trừu tượng hóa chi tiết ít quan trọng bằng mô hình tối giản.",[973,13413,13414],{},"Đó chính là mô hình RAM. Giống như thi chạy cùng một đường mới so được.",[968,13416,13418],{"id":13417},"_3-các-giả-định-của-mô-hình-ram","3. Các giả định của mô hình RAM",[973,13420,13421],{},"Mô hình RAM coi máy tính là bộ nhớ truy cập ngẫu nhiên và tập phép tính cơ sở. Có bốn giả định nền tảng.",[2969,13423,13424,13433],{},[2972,13425,13426],{},[2975,13427,13428,13431],{},[2978,13429,13430],{},"Giả định",[2978,13432,3932],{},[2988,13434,13435,13443,13451,13459],{},[2975,13436,13437,13440],{},[2993,13438,13439],{},"Phép cơ sở",[2993,13441,13442],{},"Số học, rẽ nhánh, gọi hàm đều tốn một bước",[2975,13444,13445,13448],{},[2993,13446,13447],{},"Tổ hợp",[2993,13449,13450],{},"Vòng lặp và chương trình con tốn theo số lần thực hiện",[2975,13452,13453,13456],{},[2993,13454,13455],{},"Truy cập nhớ",[2993,13457,13458],{},"Mỗi lần đọc ghi bộ nhớ tốn một bước",[2975,13460,13461,13464],{},[2993,13462,13463],{},"Bộ nhớ",[2993,13465,13466],{},"Coi như vô hạn",[973,13468,13469],{},"Giả định bộ nhớ vô hạn nghe phi thực tế. Nhưng mô hình cố tình không phân biệt nhớ đệm, RAM, đĩa hay kho dữ liệu.",[973,13471,13472],{},"Nhờ đó hiệu năng đo bằng số bước logic trên đầu vào cho trước. Lấy món nào trong tủ cũng tính một tay.",[973,13474,13475,13476,13517],{},"Một giả định ngầm nữa: mỗi ô nhớ chứa một số có kích thước giới hạn (cỡ ",[1000,13477,13479,13497],{"className":13478},[1003],[1000,13480,13482],{"className":13481},[1007],[1009,13483,13484],{"xmlns":1011},[1013,13485,13486,13494],{},[1016,13487,13488,13490,13492],{},[1019,13489,4891],{},[1023,13491,4894],{},[1019,13493,1029],{},[1034,13495,13496],{"encoding":1036},"\\log n",[1000,13498,13500],{"className":13499,"ariaHidden":1042},[1041],[1000,13501,13503,13506,13511,13514],{"className":13502},[1046],[1000,13504],{"className":13505,"style":6933},[1050],[1000,13507,4921,13509],{"className":13508},[4920],[1000,13510,1089],{"style":4924},[1000,13512],{"className":13513,"style":4928},[1371],[1000,13515,1029],{"className":13516},[1055,1056]," bit). Nếu cho phép số nguyên lớn tùy ý với phép nhân một bước, mô hình sẽ \"gian lận\": nhân hai số một triệu chữ số không thể tốn một bước.",[968,13519,13521],{"id":13520},"_4-từ-đếm-bước-sang-bậc-tăng-trưởng","4. Từ đếm bước sang bậc tăng trưởng",[973,13523,13524],{},"Có cách đếm bước rồi, ta hỏi tiếp: cải thiện nào mới đáng kể. Biến động nhỏ về số bước hiếm khi có ý nghĩa.",[973,13526,13527],{},"Thay vào đó ta nghĩ theo bậc độ lớn: gấp đôi, gấp mười, gấp trăm. Bước giác ngộ thứ hai còn quan trọng hơn.",[973,13529,13530],{},"Phải biểu diễn số bước thành hàm của kích thước bài toán. Nói A tốn 100 bước, B tốn 10 bước trên một mẫu thử thì chưa dự báo được gì.",[973,13532,13533,13534,13585,13586,13614],{},"Nhưng nếu trên mảng n phần tử, A đổi chỗ tỉ lệ ",[1000,13535,13537,13555],{"className":13536},[1003],[1000,13538,13540],{"className":13539},[1007],[1009,13541,13542],{"xmlns":1011},[1013,13543,13544,13552],{},[1016,13545,13546,13548,13550],{},[1019,13547,1029],{},[1023,13549,4167],{},[1019,13551,1029],{},[1034,13553,13554],{"encoding":1036},"n \\times n",[1000,13556,13558,13576],{"className":13557,"ariaHidden":1042},[1041],[1000,13559,13561,13564,13567,13570,13573],{"className":13560},[1046],[1000,13562],{"className":13563,"style":2595},[1050],[1000,13565,1029],{"className":13566},[1055,1056],[1000,13568],{"className":13569,"style":1434},[1371],[1000,13571,4167],{"className":13572},[1438],[1000,13574],{"className":13575,"style":1434},[1371],[1000,13577,13579,13582],{"className":13578},[1046],[1000,13580],{"className":13581,"style":1762},[1050],[1000,13583,1029],{"className":13584},[1055,1056]," còn B tỉ lệ ",[1000,13587,13589,13602],{"className":13588},[1003],[1000,13590,13592],{"className":13591},[1007],[1009,13593,13594],{"xmlns":1011},[1013,13595,13596,13600],{},[1016,13597,13598],{},[1019,13599,1029],{},[1034,13601,1029],{"encoding":1036},[1000,13603,13605],{"className":13604,"ariaHidden":1042},[1041],[1000,13606,13608,13611],{"className":13607},[1046],[1000,13609],{"className":13610,"style":1762},[1050],[1000,13612,1029],{"className":13613},[1055,1056],". Ta đã có công cụ dự báo mọi kích thước đầu vào.",[973,13616,13617],{},"Chính tại đây ký hiệu Big-O xuất hiện để phát biểu bậc tăng trưởng. Mô hình RAM là mặt đếm chi phí, Big-O là mặt phát biểu chi phí.",[973,13619,13620],{},"Hai mặt gắn chặt thành một khung phân tích hoàn chỉnh. Chi tiết Big-O đã trình bày ở bài Big-O.",[968,13622,13624],{"id":13623},"_5-hệ-quả-hằng-số-không-quan-trọng-và-số-hạng-trội-thắng","5. Hệ quả: hằng số không quan trọng và số hạng trội thắng",[973,13626,13627],{},"Từ định nghĩa chặn trên, bài này rút ra hệ quả thực tiễn sâu sắc. Thứ nhất, ta chỉ quan tâm n rất lớn, không bận tâm n nhỏ.",[973,13629,13630,13631,9955,13664,13722,13723,2148,13773,13831,13832,2148,13882,13940],{},"Ví dụ so ",[1000,13632,13634,13649],{"className":13633},[1003],[1000,13635,13637],{"className":13636},[1007],[1009,13638,13639],{"xmlns":1011},[1013,13640,13641,13647],{},[1016,13642,13643,13645],{},[1320,13644,1336],{},[1019,13646,1029],{},[1034,13648,8232],{"encoding":1036},[1000,13650,13652],{"className":13651,"ariaHidden":1042},[1041],[1000,13653,13655,13658,13661],{"className":13654},[1046],[1000,13656],{"className":13657,"style":1470},[1050],[1000,13659,1336],{"className":13660},[1055],[1000,13662,1029],{"className":13663},[1055,1056],[1000,13665,13667,13684],{"className":13666},[1003],[1000,13668,13670],{"className":13669},[1007],[1009,13671,13672],{"xmlns":1011},[1013,13673,13674,13682],{},[1016,13675,13676],{},[1324,13677,13678,13680],{},[1019,13679,1029],{},[1320,13681,1330],{},[1034,13683,6088],{"encoding":1036},[1000,13685,13687],{"className":13686,"ariaHidden":1042},[1041],[1000,13688,13690,13693],{"className":13689},[1046],[1000,13691],{"className":13692,"style":1412},[1050],[1000,13694,13696,13699],{"className":13695},[1055],[1000,13697,1029],{"className":13698},[1055,1056],[1000,13700,13702],{"className":13701},[1399],[1000,13703,13705],{"className":13704},[1403],[1000,13706,13708],{"className":13707},[1407],[1000,13709,13711],{"className":13710,"style":1412},[1411],[1000,13712,13713,13716],{"style":1415},[1000,13714],{"className":13715,"style":1420},[1419],[1000,13717,13719],{"className":13718},[1424,1425,1426,1427],[1000,13720,1330],{"className":13721},[1055,1427],": khi ",[1000,13724,13726,13743],{"className":13725},[1003],[1000,13727,13729],{"className":13728},[1007],[1009,13730,13731],{"xmlns":1011},[1013,13732,13733,13741],{},[1016,13734,13735,13737,13739],{},[1019,13736,1029],{},[1023,13738,8410],{},[1320,13740,1336],{},[1034,13742,8415],{"encoding":1036},[1000,13744,13746,13764],{"className":13745,"ariaHidden":1042},[1041],[1000,13747,13749,13752,13755,13758,13761],{"className":13748},[1046],[1000,13750],{"className":13751,"style":1882},[1050],[1000,13753,1029],{"className":13754},[1055,1056],[1000,13756],{"className":13757,"style":1372},[1371],[1000,13759,8410],{"className":13760},[1376],[1000,13762],{"className":13763,"style":1372},[1371],[1000,13765,13767,13770],{"className":13766},[1046],[1000,13768],{"className":13769,"style":1470},[1050],[1000,13771,1336],{"className":13772},[1055],[1000,13774,13776,13793],{"className":13775},[1003],[1000,13777,13779],{"className":13778},[1007],[1009,13780,13781],{"xmlns":1011},[1013,13782,13783,13791],{},[1016,13784,13785],{},[1324,13786,13787,13789],{},[1019,13788,1029],{},[1320,13790,1330],{},[1034,13792,6088],{"encoding":1036},[1000,13794,13796],{"className":13795,"ariaHidden":1042},[1041],[1000,13797,13799,13802],{"className":13798},[1046],[1000,13800],{"className":13801,"style":1412},[1050],[1000,13803,13805,13808],{"className":13804},[1055],[1000,13806,1029],{"className":13807},[1055,1056],[1000,13809,13811],{"className":13810},[1399],[1000,13812,13814],{"className":13813},[1403],[1000,13815,13817],{"className":13816},[1407],[1000,13818,13820],{"className":13819,"style":1412},[1411],[1000,13821,13822,13825],{"style":1415},[1000,13823],{"className":13824,"style":1420},[1419],[1000,13826,13828],{"className":13827},[1424,1425,1426,1427],[1000,13829,1330],{"className":13830},[1055,1427]," còn nhỏ hơn. Nhưng từ ",[1000,13833,13835,13852],{"className":13834},[1003],[1000,13836,13838],{"className":13837},[1007],[1009,13839,13840],{"xmlns":1011},[1013,13841,13842,13850],{},[1016,13843,13844,13846,13848],{},[1019,13845,1029],{},[1023,13847,1863],{},[1320,13849,1336],{},[1034,13851,8362],{"encoding":1036},[1000,13853,13855,13873],{"className":13854,"ariaHidden":1042},[1041],[1000,13856,13858,13861,13864,13867,13870],{"className":13857},[1046],[1000,13859],{"className":13860,"style":1882},[1050],[1000,13862,1029],{"className":13863},[1055,1056],[1000,13865],{"className":13866,"style":1372},[1371],[1000,13868,1863],{"className":13869},[1376],[1000,13871],{"className":13872,"style":1372},[1371],[1000,13874,13876,13879],{"className":13875},[1046],[1000,13877],{"className":13878,"style":1470},[1050],[1000,13880,1336],{"className":13881},[1055],[1000,13883,13885,13902],{"className":13884},[1003],[1000,13886,13888],{"className":13887},[1007],[1009,13889,13890],{"xmlns":1011},[1013,13891,13892,13900],{},[1016,13893,13894],{},[1324,13895,13896,13898],{},[1019,13897,1029],{},[1320,13899,1330],{},[1034,13901,6088],{"encoding":1036},[1000,13903,13905],{"className":13904,"ariaHidden":1042},[1041],[1000,13906,13908,13911],{"className":13907},[1046],[1000,13909],{"className":13910,"style":1412},[1050],[1000,13912,13914,13917],{"className":13913},[1055],[1000,13915,1029],{"className":13916},[1055,1056],[1000,13918,13920],{"className":13919},[1399],[1000,13921,13923],{"className":13922},[1403],[1000,13924,13926],{"className":13925},[1407],[1000,13927,13929],{"className":13928,"style":1412},[1411],[1000,13930,13931,13934],{"style":1415},[1000,13932],{"className":13933,"style":1420},[1419],[1000,13935,13937],{"className":13936},[1424,1425,1426,1427],[1000,13938,1330],{"className":13939},[1055,1427]," vượt lên và bỏ xa mãi mãi.",[973,13942,13943,13944,2148,13987,2268,14036,14085],{},"Thứ hai, hệ số hằng không quan trọng. ",[1000,13945,13947,13966],{"className":13946},[1003],[1000,13948,13950],{"className":13949},[1007],[1009,13951,13952],{"xmlns":1011},[1013,13953,13954,13964],{},[1016,13955,13956,13958,13960,13962],{},[1019,13957,1084],{},[1023,13959,1026],{"stretchy":1025},[1019,13961,1029],{},[1023,13963,1032],{"stretchy":1025},[1034,13965,2784],{"encoding":1036},[1000,13967,13969],{"className":13968,"ariaHidden":1042},[1041],[1000,13970,13972,13975,13978,13981,13984],{"className":13971},[1046],[1000,13973],{"className":13974,"style":1051},[1050],[1000,13976,1084],{"className":13977,"style":1113},[1055,1056],[1000,13979,1026],{"className":13980},[1061],[1000,13982,1029],{"className":13983},[1055,1056],[1000,13985,1032],{"className":13986},[1068],[1000,13988,13990,14012],{"className":13989},[1003],[1000,13991,13993],{"className":13992},[1007],[1009,13994,13995],{"xmlns":1011},[1013,13996,13997,14009],{},[1016,13998,13999,14001,14003,14005,14007],{},[1019,14000,1084],{},[1023,14002,1026],{"stretchy":1025},[1320,14004,2082],{},[1019,14006,1029],{},[1023,14008,1032],{"stretchy":1025},[1034,14010,14011],{"encoding":1036},"O(3n)",[1000,14013,14015],{"className":14014,"ariaHidden":1042},[1041],[1000,14016,14018,14021,14024,14027,14030,14033],{"className":14017},[1046],[1000,14019],{"className":14020,"style":1051},[1050],[1000,14022,1084],{"className":14023,"style":1113},[1055,1056],[1000,14025,1026],{"className":14026},[1061],[1000,14028,2082],{"className":14029},[1055],[1000,14031,1029],{"className":14032},[1055,1056],[1000,14034,1032],{"className":14035},[1068],[1000,14037,14039,14061],{"className":14038},[1003],[1000,14040,14042],{"className":14041},[1007],[1009,14043,14044],{"xmlns":1011},[1013,14045,14046,14058],{},[1016,14047,14048,14050,14052,14054,14056],{},[1019,14049,1084],{},[1023,14051,1026],{"stretchy":1025},[1320,14053,1336],{},[1019,14055,1029],{},[1023,14057,1032],{"stretchy":1025},[1034,14059,14060],{"encoding":1036},"O(100n)",[1000,14062,14064],{"className":14063,"ariaHidden":1042},[1041],[1000,14065,14067,14070,14073,14076,14079,14082],{"className":14066},[1046],[1000,14068],{"className":14069,"style":1051},[1050],[1000,14071,1084],{"className":14072,"style":1113},[1055,1056],[1000,14074,1026],{"className":14075},[1061],[1000,14077,1336],{"className":14078},[1055],[1000,14080,1029],{"className":14081},[1055,1056],[1000,14083,1032],{"className":14084},[1068]," là một.",[973,14087,14088,14089,14132],{},"Thứ ba, mọi hằng số dương đều thuộc ",[1000,14090,14092,14111],{"className":14091},[1003],[1000,14093,14095],{"className":14094},[1007],[1009,14096,14097],{"xmlns":1011},[1013,14098,14099,14109],{},[1016,14100,14101,14103,14105,14107],{},[1019,14102,1084],{},[1023,14104,1026],{"stretchy":1025},[1320,14106,4017],{},[1023,14108,1032],{"stretchy":1025},[1034,14110,4844],{"encoding":1036},[1000,14112,14114],{"className":14113,"ariaHidden":1042},[1041],[1000,14115,14117,14120,14123,14126,14129],{"className":14116},[1046],[1000,14118],{"className":14119,"style":1051},[1050],[1000,14121,1084],{"className":14122,"style":1113},[1055,1056],[1000,14124,1026],{"className":14125},[1061],[1000,14127,4017],{"className":14128},[1055],[1000,14130,1032],{"className":14131},[1068],". Nghĩa là chi phí không phụ thuộc đầu vào.",[973,14134,14135],{},"Ví dụ tính tổng n số đầu bằng công thức Gauss. Chỉ cần một cộng, một nhân, một chia với mọi n.",[973,14137,14138],{},"Thứ tư, cộng hai biểu thức thì số hạng lớn hơn thắng. Hai thuật toán nối tiếp bị chi phối bởi thuật toán chậm hơn.",[973,14140,14141,14142,14205,14206,2958],{},"Thứ năm, tích hai biểu thức không rút gọn được, trừ khi một bên là hằng số. Ví dụ ",[1000,14143,14145,14170],{"className":14144},[1003],[1000,14146,14148],{"className":14147},[1007],[1009,14149,14150],{"xmlns":1011},[1013,14151,14152,14168],{},[1016,14153,14154,14156,14158,14160,14162,14164,14166],{},[1019,14155,1084],{},[1023,14157,1026],{"stretchy":1025},[1019,14159,1029],{},[1019,14161,4891],{},[1023,14163,4894],{},[1019,14165,1029],{},[1023,14167,1032],{"stretchy":1025},[1034,14169,5537],{"encoding":1036},[1000,14171,14173],{"className":14172,"ariaHidden":1042},[1041],[1000,14174,14176,14179,14182,14185,14188,14191,14196,14199,14202],{"className":14175},[1046],[1000,14177],{"className":14178,"style":1051},[1050],[1000,14180,1084],{"className":14181,"style":1113},[1055,1056],[1000,14183,1026],{"className":14184},[1061],[1000,14186,1029],{"className":14187},[1055,1056],[1000,14189],{"className":14190,"style":4928},[1371],[1000,14192,4921,14194],{"className":14193},[4920],[1000,14195,1089],{"style":4924},[1000,14197],{"className":14198,"style":4928},[1371],[1000,14200,1029],{"className":14201},[1055,1056],[1000,14203,1032],{"className":14204},[1068]," giữ nguyên, không thành ",[1000,14207,14209,14228],{"className":14208},[1003],[1000,14210,14212],{"className":14211},[1007],[1009,14213,14214],{"xmlns":1011},[1013,14215,14216,14226],{},[1016,14217,14218,14220,14222,14224],{},[1019,14219,1084],{},[1023,14221,1026],{"stretchy":1025},[1019,14223,1029],{},[1023,14225,1032],{"stretchy":1025},[1034,14227,2784],{"encoding":1036},[1000,14229,14231],{"className":14230,"ariaHidden":1042},[1041],[1000,14232,14234,14237,14240,14243,14246],{"className":14233},[1046],[1000,14235],{"className":14236,"style":1051},[1050],[1000,14238,1084],{"className":14239,"style":1113},[1055,1056],[1000,14241,1026],{"className":14242},[1061],[1000,14244,1029],{"className":14245},[1055,1056],[1000,14247,1032],{"className":14248},[1068],[973,14250,14251,14252,14280],{},"Lưu ý: trong thực tế người ta hay viết Big-O nhưng ý muốn nói chặn khít ",[1000,14253,14255,14268],{"className":14254},[1003],[1000,14256,14258],{"className":14257},[1007],[1009,14259,14260],{"xmlns":1011},[1013,14261,14262,14266],{},[1016,14263,14264],{},[1019,14265,3506],{"mathvariant":1154},[1034,14267,3900],{"encoding":1036},[1000,14269,14271],{"className":14270,"ariaHidden":1042},[1041],[1000,14272,14274,14277],{"className":14273},[1046],[1000,14275],{"className":14276,"style":3910},[1050],[1000,14278,3506],{"className":14279},[1055],". Khi cần chính xác thì phân biệt rõ.",[968,14282,9148],{"id":9147},[973,14284,14285],{},"Mô hình RAM đổi chính xác phần cứng lấy tính phổ quát. So với benchmark thực nghiệm, nó đúng trên mọi máy.",[973,14287,14288],{},"Nhưng nó không nói được thuật toán nào nhanh hơn trên cấu hình cụ thể với dữ liệu vừa. So với mô hình chi tiết phân biệt nhớ đệm và đĩa, nó đơn giản và dễ suy luận hơn.",[973,14290,14291],{},"Nhưng có thể gây hiểu lầm khi chi phí thật nằm ở phân cấp bộ nhớ. Thực hành tốt là dùng RAM cho phân tích ban đầu.",[973,14293,14294],{},"Rồi đưa chi tiết phần cứng trở lại khi tối ưu điểm nóng đã chứng minh. Giống như phác thảo trước, đo đạc chi tiết sau.",[968,14296,9167],{"id":9166},[973,14298,14299],{},"Thứ nhất: lẫn bước logic với giây thực tế. Thuật toán ít bước hơn vẫn có thể chạy chậm hơn vì mỗi bước ẩn chi phí phần cứng khác nhau.",[973,14301,14302],{},"Thứ hai: quên giả định bộ nhớ vô hạn. Rồi áp kết luận RAM cho môi trường chật hẹp mà không hiệu chỉnh.",[973,14304,14305],{},"Thứ ba: tôn thờ hằng số. Tối ưu vài chục phần trăm số bước trong khi hình dạng tăng trưởng vẫn xấu.",[973,14307,14308],{},"Đó là thắng trận nhỏ mà thua cuộc chiến lớn. Thứ tư: đếm lệnh máy hay dòng code rồi tưởng đó là phân tích độc lập nền tảng.",[973,14310,14311],{},"Đúng điều bài này cảnh báo ngay từ đầu. Đếm dòng code vẫn gắn với ngôn ngữ.",[968,14313,9183],{"id":9182},[973,14315,14316,14317,14380],{},"Mô hình RAM là nền của mọi phát biểu Big-O trong tài liệu. Mỗi khi đọc ",[1000,14318,14320,14345],{"className":14319},[1003],[1000,14321,14323],{"className":14322},[1007],[1009,14324,14325],{"xmlns":1011},[1013,14326,14327,14343],{},[1016,14328,14329,14331,14333,14335,14337,14339,14341],{},[1019,14330,1084],{},[1023,14332,1026],{"stretchy":1025},[1019,14334,1029],{},[1019,14336,4891],{},[1023,14338,4894],{},[1019,14340,1029],{},[1023,14342,1032],{"stretchy":1025},[1034,14344,5537],{"encoding":1036},[1000,14346,14348],{"className":14347,"ariaHidden":1042},[1041],[1000,14349,14351,14354,14357,14360,14363,14366,14371,14374,14377],{"className":14350},[1046],[1000,14352],{"className":14353,"style":1051},[1050],[1000,14355,1084],{"className":14356,"style":1113},[1055,1056],[1000,14358,1026],{"className":14359},[1061],[1000,14361,1029],{"className":14362},[1055,1056],[1000,14364],{"className":14365,"style":4928},[1371],[1000,14367,4921,14369],{"className":14368},[4920],[1000,14370,1089],{"style":4924},[1000,14372],{"className":14373,"style":4928},[1371],[1000,14375,1029],{"className":14376},[1055,1056],[1000,14378,1032],{"className":14379},[1068],", ta hiểu đó là số bước RAM chứ không phải số giây.",[973,14382,14383],{},"Nó cũng là điểm tựa thảo luận công bằng trong nhóm. Thay vì cãi máy ai nhanh hơn, mọi người cùng đếm bước logic.",[973,14385,14386],{},"Về lâu dài, hiểu rõ giả định giúp biết khi nào cần mô hình tinh chỉnh hơn. Ví dụ khi dữ liệu không vừa bộ nhớ hay hệ phân tán.",[968,14388,6789],{"id":6788},[973,14390,6792],{},[973,14392,14393,14395],{},[6796,14394,6798],{}," Vì sao không dùng số giây đo được để so sánh hai thuật toán?",[6974,14397,14398],{"close-text":6976,"name":6977,"open-text":6978},[973,14399,14400],{},"Số giây phụ thuộc máy, hệ điều hành, tiến trình nền và ngôn ngữ, nên không so được giữa các môi trường.",[973,14402,14403,14405,14406,14409],{},[6796,14404,7124],{}," Trong mô hình RAM, đoạn ",[8030,14407,14408],{},"x = a[i] + a[j] * 2"," tốn khoảng bao nhiêu bước?",[6974,14411,14412],{"close-text":6976,"name":6977,"open-text":6978},[973,14413,14414,14415,2958],{},"Vài bước hằng số: 2 lần đọc nhớ, 1 nhân, 1 cộng, 1 ghi. Tổng là ",[1000,14416,14418,14437],{"className":14417},[1003],[1000,14419,14421],{"className":14420},[1007],[1009,14422,14423],{"xmlns":1011},[1013,14424,14425,14435],{},[1016,14426,14427,14429,14431,14433],{},[1019,14428,1084],{},[1023,14430,1026],{"stretchy":1025},[1320,14432,4017],{},[1023,14434,1032],{"stretchy":1025},[1034,14436,4844],{"encoding":1036},[1000,14438,14440],{"className":14439,"ariaHidden":1042},[1041],[1000,14441,14443,14446,14449,14452,14455],{"className":14442},[1046],[1000,14444],{"className":14445,"style":1051},[1050],[1000,14447,1084],{"className":14448,"style":1113},[1055,1056],[1000,14450,1026],{"className":14451},[1061],[1000,14453,4017],{"className":14454},[1055],[1000,14456,1032],{"className":14457},[1068],[973,14459,14460,14462],{},[6796,14461,7655],{}," Giả định nào của RAM sai nhiều nhất trên máy thật?",[6974,14464,14465],{"close-text":6976,"name":6977,"open-text":6978},[973,14466,14467],{},"Mọi truy cập bộ nhớ tốn như nhau. Thực tế đọc cache L1 nhanh hơn RAM cả trăm lần, đọc đĩa còn chậm hơn nữa.",[973,14469,14470,6799,14472,2268,14520,14563],{},[6796,14471,8027],{},[1000,14473,14475,14496],{"className":14474},[1003],[1000,14476,14478],{"className":14477},[1007],[1009,14479,14480],{"xmlns":1011},[1013,14481,14482,14494],{},[1016,14483,14484,14486,14488,14490,14492],{},[1019,14485,1084],{},[1023,14487,1026],{"stretchy":1025},[1320,14489,2082],{},[1019,14491,1029],{},[1023,14493,1032],{"stretchy":1025},[1034,14495,14011],{"encoding":1036},[1000,14497,14499],{"className":14498,"ariaHidden":1042},[1041],[1000,14500,14502,14505,14508,14511,14514,14517],{"className":14501},[1046],[1000,14503],{"className":14504,"style":1051},[1050],[1000,14506,1084],{"className":14507,"style":1113},[1055,1056],[1000,14509,1026],{"className":14510},[1061],[1000,14512,2082],{"className":14513},[1055],[1000,14515,1029],{"className":14516},[1055,1056],[1000,14518,1032],{"className":14519},[1068],[1000,14521,14523,14542],{"className":14522},[1003],[1000,14524,14526],{"className":14525},[1007],[1009,14527,14528],{"xmlns":1011},[1013,14529,14530,14540],{},[1016,14531,14532,14534,14536,14538],{},[1019,14533,1084],{},[1023,14535,1026],{"stretchy":1025},[1019,14537,1029],{},[1023,14539,1032],{"stretchy":1025},[1034,14541,2784],{"encoding":1036},[1000,14543,14545],{"className":14544,"ariaHidden":1042},[1041],[1000,14546,14548,14551,14554,14557,14560],{"className":14547},[1046],[1000,14549],{"className":14550,"style":1051},[1050],[1000,14552,1084],{"className":14553,"style":1113},[1055,1056],[1000,14555,1026],{"className":14556},[1061],[1000,14558,1029],{"className":14559},[1055,1056],[1000,14561,1032],{"className":14562},[1068]," có khác nhau không?",[6974,14565,14566],{"close-text":6976,"name":6977,"open-text":6978},[973,14567,14568],{},"Không. Hằng số bị bỏ trong Big-O.",[973,14570,14571,14573,14574,14673,14674,14747],{},[6796,14572,8212],{}," Tính tổng ",[1000,14575,14577,14607],{"className":14576},[1003],[1000,14578,14580],{"className":14579},[1007],[1009,14581,14582],{"xmlns":1011},[1013,14583,14584,14604],{},[1016,14585,14586,14588,14590,14592,14594,14596,14598,14600,14602],{},[1320,14587,4017],{},[1023,14589,1333],{},[1320,14591,1330],{},[1023,14593,1333],{},[1019,14595,2958],{"mathvariant":1154},[1019,14597,2958],{"mathvariant":1154},[1019,14599,2958],{"mathvariant":1154},[1023,14601,1333],{},[1019,14603,1029],{},[1034,14605,14606],{"encoding":1036},"1 + 2 + ... + n",[1000,14608,14610,14628,14646,14664],{"className":14609,"ariaHidden":1042},[1041],[1000,14611,14613,14616,14619,14622,14625],{"className":14612},[1046],[1000,14614],{"className":14615,"style":1448},[1050],[1000,14617,4017],{"className":14618},[1055],[1000,14620],{"className":14621,"style":1434},[1371],[1000,14623,1333],{"className":14624},[1438],[1000,14626],{"className":14627,"style":1434},[1371],[1000,14629,14631,14634,14637,14640,14643],{"className":14630},[1046],[1000,14632],{"className":14633,"style":1448},[1050],[1000,14635,1330],{"className":14636},[1055],[1000,14638],{"className":14639,"style":1434},[1371],[1000,14641,1333],{"className":14642},[1438],[1000,14644],{"className":14645,"style":1434},[1371],[1000,14647,14649,14652,14655,14658,14661],{"className":14648},[1046],[1000,14650],{"className":14651,"style":2595},[1050],[1000,14653,7882],{"className":14654},[1055],[1000,14656],{"className":14657,"style":1434},[1371],[1000,14659,1333],{"className":14660},[1438],[1000,14662],{"className":14663,"style":1434},[1371],[1000,14665,14667,14670],{"className":14666},[1046],[1000,14668],{"className":14669,"style":1762},[1050],[1000,14671,1029],{"className":14672},[1055,1056]," bằng công thức ",[1000,14675,14677,14705],{"className":14676},[1003],[1000,14678,14680],{"className":14679},[1007],[1009,14681,14682],{"xmlns":1011},[1013,14683,14684,14702],{},[1016,14685,14686,14688,14690,14692,14694,14696,14698,14700],{},[1019,14687,1029],{},[1023,14689,1026],{"stretchy":1025},[1019,14691,1029],{},[1023,14693,1333],{},[1320,14695,4017],{},[1023,14697,1032],{"stretchy":1025},[1019,14699,1155],{"mathvariant":1154},[1320,14701,1330],{},[1034,14703,14704],{"encoding":1036},"n(n+1)\u002F2",[1000,14706,14708,14732],{"className":14707,"ariaHidden":1042},[1041],[1000,14709,14711,14714,14717,14720,14723,14726,14729],{"className":14710},[1046],[1000,14712],{"className":14713,"style":1051},[1050],[1000,14715,1029],{"className":14716},[1055,1056],[1000,14718,1026],{"className":14719},[1061],[1000,14721,1029],{"className":14722},[1055,1056],[1000,14724],{"className":14725,"style":1434},[1371],[1000,14727,1333],{"className":14728},[1438],[1000,14730],{"className":14731,"style":1434},[1371],[1000,14733,14735,14738,14741,14744],{"className":14734},[1046],[1000,14736],{"className":14737,"style":1051},[1050],[1000,14739,4017],{"className":14740},[1055],[1000,14742,1032],{"className":14743},[1068],[1000,14745,5270],{"className":14746},[1055]," tốn bao nhiêu bước?",[6974,14749,14750],{"close-text":6976,"name":6977,"open-text":6978},[973,14751,14752,14795,14796,2958],{},[1000,14753,14755,14774],{"className":14754},[1003],[1000,14756,14758],{"className":14757},[1007],[1009,14759,14760],{"xmlns":1011},[1013,14761,14762,14772],{},[1016,14763,14764,14766,14768,14770],{},[1019,14765,1084],{},[1023,14767,1026],{"stretchy":1025},[1320,14769,4017],{},[1023,14771,1032],{"stretchy":1025},[1034,14773,4844],{"encoding":1036},[1000,14775,14777],{"className":14776,"ariaHidden":1042},[1041],[1000,14778,14780,14783,14786,14789,14792],{"className":14779},[1046],[1000,14781],{"className":14782,"style":1051},[1050],[1000,14784,1084],{"className":14785,"style":1113},[1055,1056],[1000,14787,1026],{"className":14788},[1061],[1000,14790,4017],{"className":14791},[1055],[1000,14793,1032],{"className":14794},[1068],": một cộng, một nhân, một chia, không phụ thuộc ",[1000,14797,14799,14812],{"className":14798},[1003],[1000,14800,14802],{"className":14801},[1007],[1009,14803,14804],{"xmlns":1011},[1013,14805,14806,14810],{},[1016,14807,14808],{},[1019,14809,1029],{},[1034,14811,1029],{"encoding":1036},[1000,14813,14815],{"className":14814,"ariaHidden":1042},[1041],[1000,14816,14818,14821],{"className":14817},[1046],[1000,14819],{"className":14820,"style":1762},[1050],[1000,14822,1029],{"className":14823},[1055,1056],[968,14825,8450],{"id":8449},[5504,14827,14828,14831,14834,14837,14840],{},[5507,14829,14830],{},"Đo bằng giây hay đếm lệnh đều không khái quát được, nên cần mô hình RAM tối giản.",[5507,14832,14833],{},"Bốn giả định RAM: phép cơ sở một bước, vòng lặp theo số lần, nhớ một bước, bộ nhớ vô hạn.",[5507,14835,14836],{},"Chi phí phải biểu diễn thành hàm của n, rồi phát biểu bằng Big-O.",[5507,14838,14839],{},"Hệ quả: bỏ hằng số, số hạng trội thắng, tích không rút gọn được.",[5507,14841,14842],{},"Dùng RAM để phân tích ban đầu, đưa phần cứng trở lại khi tối ưu điểm nóng.",{"title":9007,"searchDepth":68,"depth":68,"links":14844},[14845,14846,14847,14848,14849,14850,14851,14852,14853,14854],{"id":970,"depth":68,"text":971},{"id":13398,"depth":68,"text":13399},{"id":13417,"depth":68,"text":13418},{"id":13520,"depth":68,"text":13521},{"id":13623,"depth":68,"text":13624},{"id":9147,"depth":68,"text":9148},{"id":9166,"depth":68,"text":9167},{"id":9182,"depth":68,"text":9183},{"id":6788,"depth":68,"text":6789},{"id":8449,"depth":68,"text":8450},"Các giả định của mô hình RAM, cách đếm bước trừu tượng, bậc tăng trưởng và ý nghĩa của việc bỏ qua hằng số.",{},{"title":38,"description":14855},[14859,14860,14861,7],"ram-model","chi-phi","ly-thuyet","YUSHmSnnvkvxVGEjolGjVlJu8SQAzrXu18seBoXUUkY",{"id":14864,"title":42,"body":14865,"category":7,"day":9020,"description":15572,"difficulty":9022,"estimatedMinutes":283,"extension":9023,"lastUpdate":9024,"meta":15573,"navigation":9026,"outcomes":9020,"path":43,"prerequisites":9020,"seo":15574,"stem":44,"tags":15575,"__hash__":15578},"fundamentals\u002Ffundamentals\u002Fthiet-ke-va-kiem-chung-thuat-toan.md",{"type":965,"value":14866,"toc":15560},[14867,14869,14872,14875,14878,14882,14885,14888,14891,14894,14897,14900,14903,14907,14910,14913,14916,14919,14922,14925,14928,15085,15089,15092,15095,15098,15101,15104,15107,15110,15114,15117,15120,15123,15126,15129,15132,15134,15137,15140,15143,15146,15149,15151,15154,15157,15160,15163,15165,15168,15171,15174,15176,15178,15183,15188,15193,15198,15203,15208,15213,15531,15536,15541,15543],[968,14868,971],{"id":970},[973,14870,14871],{},"Thiết kế mà không kiểm chứng chẳng khác xây cầu không thử tải. Khung đầy đủ gồm bốn phần.",[973,14873,14874],{},"Ba mối quan tâm khi thiết kế là gì. Ba họ thuật toán với logic kiểm chứng khác nhau ra sao.",[973,14876,14877],{},"Cách dùng độ đo để kiểm chứng thế nào. Yêu cầu mới về tính giải thích được là gì.",[968,14879,14881],{"id":14880},"_2-ba-mối-quan-tâm-khi-thiết-kế","2. Ba mối quan tâm khi thiết kế",[973,14883,14884],{},"Ba câu hỏi phải thường trực suốt quá trình thiết kế và tinh chỉnh. Mối thứ nhất: thuật toán có cho kết quả mong đợi không.",[973,14886,14887],{},"Đây là câu hỏi về tính đúng đắn. Câu trả lời đến từ kiểm thử rộng khắp, nhất là trường hợp biên.",[973,14889,14890],{},"Mối thứ hai: đó có phải cách tối ưu nhất không. Đây là câu hỏi về tính tối ưu.",[973,14892,14893],{},"Nhân loại đã tốn hàng thập kỷ cho một lớp bài mà vẫn chưa biết lời giải hiện có tốt nhất chưa. Mối thứ ba: thuật toán thể hiện ra sao trên dữ liệu lớn hơn.",[973,14895,14896],{},"Đây là câu hỏi về khả năng mở rộng. Câu trả lời đến từ phân tích độ phức tạp và hạ tầng co giãn.",[973,14898,14899],{},"Thứ tự ưu tiên thực tế: đúng trước, tối ưu sau, mở rộng cuối cùng. Thuật toán nhanh mà sai là vô giá trị.",[973,14901,14902],{},"Thuật toán đúng mà không mở rộng được chỉ dùng cho bài nhỏ. Giống như món ngon, ra nhanh, giá rõ: thiếu món ngon thì hai thứ còn lại vô nghĩa.",[968,14904,14906],{"id":14905},"_3-ba-họ-thuật-toán-và-logic-kiểm-chứng-khác-nhau","3. Ba họ thuật toán và logic kiểm chứng khác nhau",[973,14908,14909],{},"Kiểm chứng phụ thuộc vào họ thuật toán. Vì kỹ thuật kiểm thử mỗi họ khác nhau.",[973,14911,14912],{},"Trước hết phân biệt tất định và ngẫu nhiên. Thuật toán tất định cho cùng một đầu vào luôn ra một đầu ra.",[973,14914,14915],{},"Nên kiểm chứng bằng tập kiểm thử cố định với kết quả kỳ vọng cố định. Thuật toán ngẫu nhiên đưa thêm dãy số ngẫu nhiên làm đầu vào.",[973,14917,14918],{},"Mỗi lần chạy cho đầu ra khác nhau. Kiểm chứng họ này phải kiểm tính chất thống kê, không trông đợi kết quả cố định.",[973,14920,14921],{},"Trên trục khác, chia thành chính xác và xấp xỉ. Thuật toán chính xác cho nghiệm đúng mà không thêm giả định hay xấp xỉ nào.",[973,14923,14924],{},"Thuật toán xấp xỉ đơn giản hóa bài toán bằng giả định khi tài nguyên không kham nổi. Nên nó không cho nghiệm đúng tuyệt đối.",[973,14926,14927],{},"Ví dụ minh họa là người bán hàng rong ra đời năm 1930. Tìm hành trình ngắn nhất thăm mỗi thành phố một lần rồi về điểm xuất phát.",[973,14929,14930,14931,14995,14996,15084],{},"Cách trực diện liệt kê mọi hoán vị rồi chọn rẻ nhất: ",[1000,14932,14934,14958],{"className":14933},[1003],[1000,14935,14937],{"className":14936},[1007],[1009,14938,14939],{"xmlns":1011},[1013,14940,14941,14955],{},[1016,14942,14943,14945,14947,14949,14951,14953],{},[1023,14944,1026],{"stretchy":1025},[1019,14946,1029],{},[1023,14948,5216],{},[1320,14950,4017],{},[1023,14952,1032],{"stretchy":1025},[1023,14954,5788],{"stretchy":1025},[1034,14956,14957],{"encoding":1036},"(n-1)!",[1000,14959,14961,14982],{"className":14960,"ariaHidden":1042},[1041],[1000,14962,14964,14967,14970,14973,14976,14979],{"className":14963},[1046],[1000,14965],{"className":14966,"style":1051},[1050],[1000,14968,1026],{"className":14969},[1061],[1000,14971,1029],{"className":14972},[1055,1056],[1000,14974],{"className":14975,"style":1434},[1371],[1000,14977,5216],{"className":14978},[1438],[1000,14980],{"className":14981,"style":1434},[1371],[1000,14983,14985,14988,14991],{"className":14984},[1046],[1000,14986],{"className":14987,"style":1051},[1050],[1000,14989,4017],{"className":14990},[1055],[1000,14992,14994],{"className":14993},[1068],")!"," tour. Với 15 thành phố đã là khoảng ",[1000,14997,14999,15022],{"className":14998},[1003],[1000,15000,15002],{"className":15001},[1007],[1009,15003,15004],{"xmlns":1011},[1013,15005,15006,15019],{},[1016,15007,15008,15011,15013],{},[1320,15009,15010],{},"8.7",[1023,15012,1971],{},[1324,15014,15015,15017],{},[1320,15016,1343],{},[1320,15018,1343],{},[1034,15020,15021],{"encoding":1036},"8.7 \\cdot 10^{10}",[1000,15023,15025,15043],{"className":15024,"ariaHidden":1042},[1041],[1000,15026,15028,15031,15034,15037,15040],{"className":15027},[1046],[1000,15029],{"className":15030,"style":1470},[1050],[1000,15032,15010],{"className":15033},[1055],[1000,15035],{"className":15036,"style":1434},[1371],[1000,15038,1971],{"className":15039},[1438],[1000,15041],{"className":15042,"style":1434},[1371],[1000,15044,15046,15049,15052],{"className":15045},[1046],[1000,15047],{"className":15048,"style":1412},[1050],[1000,15050,4017],{"className":15051},[1055],[1000,15053,15055,15058],{"className":15054},[1055],[1000,15056,1786],{"className":15057},[1055],[1000,15059,15061],{"className":15060},[1399],[1000,15062,15064],{"className":15063},[1403],[1000,15065,15067],{"className":15066},[1407],[1000,15068,15070],{"className":15069,"style":1412},[1411],[1000,15071,15072,15075],{"style":1415},[1000,15073],{"className":15074,"style":1420},[1419],[1000,15076,15078],{"className":15077},[1424,1425,1426,1427],[1000,15079,15081],{"className":15080},[1055,1427],[1000,15082,1343],{"className":15083},[1055,1427]," tour, vét cạn không còn khả thi. Quy hoạch động Held-Karp đẩy ngưỡng lên khoảng 25-30 thành phố, sau đó phải dùng xấp xỉ.",[968,15086,15088],{"id":15087},"_4-kiểm-chứng-bằng-độ-đo-và-trường-hợp-biên","4. Kiểm chứng bằng độ đo và trường hợp biên",[973,15090,15091],{},"Kiểm chứng là xác nhận thuật toán thực sự giải đúng bài toán. Quy trình phải thử càng nhiều giá trị và kiểu đầu vào càng tốt.",[973,15093,15094],{},"Với học có giám sát, dữ liệu gán nhãn sẵn đóng vai trò chân lý. Ta đo độ lệch qua độ đo như accuracy (tỉ lệ đúng), precision (độ chuẩn) và recall (độ phủ).",[973,15096,15097],{},"Đôi khi đầu ra đúng không phải một giá trị đơn mà là một khoảng. Thiết kế lặp cải tiến dần cho tới khi nằm trong khoảng yêu cầu.",[973,15099,15100],{},"Với thuật toán lặp (tối ưu, học máy), mỗi vòng sinh một nghiệm ứng viên. Kiểm chứng gồm hai việc: kiểm tra từng nghiệm ứng viên có hợp lệ không, và theo dõi chất lượng qua các vòng để biết khi nào dừng.",[973,15102,15103],{},"Nội dung không thể thiếu là trường hợp biên. Đó là khi thuật toán vận hành ở cực trị tham số, hiếm gặp nhưng có thể gây sụp đổ.",[973,15105,15106],{},"Phần còn lại gọi là đường hạnh phúc, nơi tham số bình thường và thuật toán thường đi qua. Không ai liệt kê được mọi trường hợp biên.",[973,15108,15109],{},"Nhưng phải nghĩ tới càng nhiều càng tốt. Bỏ qua chúng là mời gọi sự cố.",[968,15111,15113],{"id":15112},"_5-tính-giải-thích-được-và-lime","5. Tính giải thích được và LIME",[973,15115,15116],{},"Khi thuật toán dùng cho việc trọng yếu, khả năng giải thích từng kết quả thành bắt buộc. Để đảm bảo quyết định dựa trên nó không tạo thiên kiến.",[973,15118,15119],{},"Khả năng chỉ ra đặc trưng nào dẫn tới một quyết định cụ thể gọi là tính giải thích được. Thuật toán ảnh hưởng đời người cần đánh giá thiên kiến và định kiến.",[973,15121,15122],{},"Phân tích đạo đức thuật toán đã thành phần chuẩn của kiểm chứng. Với học sâu, tính giải thích được rất khó đạt.",[973,15124,15125],{},"Ví dụ thuật toán từ chối đơn vay thế chấp của một người. Việc minh bạch lý do là bắt buộc.",[973,15127,15128],{},"Kỹ thuật hiệu quả là LIME. Đưa thay đổi nhỏ vào từng đầu vào rồi vẽ biên quyết định cục bộ quanh đó.",[973,15130,15131],{},"Từ đó lượng hóa ảnh hưởng của từng biến với từng trường hợp cụ thể. Giống như gõ nhẹ từng chỗ để xem chỗ nào làm đổi kết quả.",[968,15133,9148],{"id":9147},[973,15135,15136],{},"Đánh đổi trung tâm là giữa chính xác và hiệu năng. Thuật toán chính xác tốn tài nguyên khổng lồ cho bài khó.",[973,15138,15139],{},"Thuật toán xấp xỉ chạy nhanh nhưng đòi chấp nhận sai số. Đánh đổi thứ hai là giữa chi phí kiểm chứng và độ tin cậy.",[973,15141,15142],{},"Thử càng nhiều đầu vào và biên càng tốn kém nhưng càng an toàn. Đánh đổi thứ ba là giữa giải thích được và sức mạnh mô hình.",[973,15144,15145],{},"Mô hình càng phức tạp càng khó giải thích. Với ứng dụng trọng yếu đôi khi phải chấp nhận mô hình yếu hơn nhưng minh bạch hơn.",[973,15147,15148],{},"Giống như cân tiểu ly và cân ước lượng ngoài chợ. Mỗi loại hợp một việc.",[968,15150,9167],{"id":9166},[973,15152,15153],{},"Thứ nhất: kiểm chứng thuật toán ngẫu nhiên như tất định. Trông đợi cùng một đầu ra mọi lần chạy.",[973,15155,15156],{},"Thứ hai: dùng xấp xỉ mà không đặt ngưỡng sai số từ đầu. Không ai biết lệch bao nhiêu thì chấp nhận được.",[973,15158,15159],{},"Thứ ba: chỉ thử đường hạnh phúc mà quên trường hợp biên. Sự cố thường ẩn náu ở đó.",[973,15161,15162],{},"Thứ tư: coi kiểm chứng là việc một lần cuối dự án. Thực ra thiết kế là quá trình lặp, mỗi vòng đều kiểm chứng lại ba mối quan tâm.",[968,15164,9183],{"id":9182},[973,15166,15167],{},"Khung ba mối quan tâm dùng như danh sách kiểm tra mọi buổi đánh giá thiết kế. Đúng chưa, tối ưu chưa, mở rộng được không.",[973,15169,15170],{},"Yêu cầu giải thích được ngày càng vào đặc tả hệ trọng yếu. Như tín dụng, tuyển dụng và y tế.",[973,15172,15173],{},"Hỏi ba câu này sớm giúp tránh sửa lớn về sau. Rẻ hơn nhiều so với vá khi đã triển khai.",[968,15175,6789],{"id":6788},[973,15177,6792],{},[973,15179,15180,15182],{},[6796,15181,6798],{}," Ba mối quan tâm khi thiết kế, theo thứ tự ưu tiên?",[6974,15184,15185],{"close-text":6976,"name":6977,"open-text":6978},[973,15186,15187],{},"Đúng đắn, tối ưu, khả năng mở rộng.",[973,15189,15190,15192],{},[6796,15191,7124],{}," Làm sao kiểm thử một thuật toán ngẫu nhiên?",[6974,15194,15195],{"close-text":6976,"name":6977,"open-text":6978},[973,15196,15197],{},"Cố định seed để tái lập, và kiểm tra tính chất thống kê qua nhiều lần chạy thay vì so một đầu ra cố định.",[973,15199,15200,15202],{},[6796,15201,7655],{}," Kể 4 trường hợp biên khi kiểm thử hàm sắp xếp.",[6974,15204,15205],{"close-text":6976,"name":6977,"open-text":6978},[973,15206,15207],{},"Mảng rỗng, 1 phần tử, toàn phần tử bằng nhau, đã sắp xếp hoặc sắp ngược. Thêm: số âm, giá trị lớn nhất của kiểu dữ liệu.",[973,15209,15210,15212],{},[6796,15211,8027],{}," TSP 20 thành phố: vét cạn có khả thi không?",[6974,15214,15215],{"close-text":6976,"name":6977,"open-text":6978},[973,15216,15217,15218,15335,15336,15445,15446,15530],{},"Không. ",[1000,15219,15221,15252],{"className":15220},[1003],[1000,15222,15224],{"className":15223},[1007],[1009,15225,15226],{"xmlns":1011},[1013,15227,15228,15249],{},[1016,15229,15230,15233,15235,15237,15240,15242],{},[1320,15231,15232],{},"19",[1023,15234,5788],{"stretchy":1025},[1023,15236,11034],{},[1320,15238,15239],{},"1.2",[1023,15241,1971],{},[1324,15243,15244,15246],{},[1320,15245,1343],{},[1320,15247,15248],{},"17",[1034,15250,15251],{"encoding":1036},"19! \\approx 1.2 \\cdot 10^{17}",[1000,15253,15255,15276,15294],{"className":15254,"ariaHidden":1042},[1041],[1000,15256,15258,15261,15264,15267,15270,15273],{"className":15257},[1046],[1000,15259],{"className":15260,"style":4527},[1050],[1000,15262,15232],{"className":15263},[1055],[1000,15265,5788],{"className":15266},[1068],[1000,15268],{"className":15269,"style":1372},[1371],[1000,15271,11034],{"className":15272},[1376],[1000,15274],{"className":15275,"style":1372},[1371],[1000,15277,15279,15282,15285,15288,15291],{"className":15278},[1046],[1000,15280],{"className":15281,"style":1470},[1050],[1000,15283,15239],{"className":15284},[1055],[1000,15286],{"className":15287,"style":1434},[1371],[1000,15289,1971],{"className":15290},[1438],[1000,15292],{"className":15293,"style":1434},[1371],[1000,15295,15297,15300,15303],{"className":15296},[1046],[1000,15298],{"className":15299,"style":1412},[1050],[1000,15301,4017],{"className":15302},[1055],[1000,15304,15306,15309],{"className":15305},[1055],[1000,15307,1786],{"className":15308},[1055],[1000,15310,15312],{"className":15311},[1399],[1000,15313,15315],{"className":15314},[1403],[1000,15316,15318],{"className":15317},[1407],[1000,15319,15321],{"className":15320,"style":1412},[1411],[1000,15322,15323,15326],{"style":1415},[1000,15324],{"className":15325,"style":1420},[1419],[1000,15327,15329],{"className":15328},[1424,1425,1426,1427],[1000,15330,15332],{"className":15331},[1055,1427],[1000,15333,15248],{"className":15334},[1055,1427]," tour. Held-Karp ",[1000,15337,15339,15369],{"className":15338},[1003],[1000,15340,15342],{"className":15341},[1007],[1009,15343,15344],{"xmlns":1011},[1013,15345,15346,15366],{},[1016,15347,15348,15350,15352,15358,15364],{},[1019,15349,1084],{},[1023,15351,1026],{"stretchy":1025},[1324,15353,15354,15356],{},[1019,15355,1029],{},[1320,15357,1330],{},[1324,15359,15360,15362],{},[1320,15361,1330],{},[1019,15363,1029],{},[1023,15365,1032],{"stretchy":1025},[1034,15367,15368],{"encoding":1036},"O(n^2 2^n)",[1000,15370,15372],{"className":15371,"ariaHidden":1042},[1041],[1000,15373,15375,15378,15381,15384,15413,15442],{"className":15374},[1046],[1000,15376],{"className":15377,"style":1510},[1050],[1000,15379,1084],{"className":15380,"style":1113},[1055,1056],[1000,15382,1026],{"className":15383},[1061],[1000,15385,15387,15390],{"className":15386},[1055],[1000,15388,1029],{"className":15389},[1055,1056],[1000,15391,15393],{"className":15392},[1399],[1000,15394,15396],{"className":15395},[1403],[1000,15397,15399],{"className":15398},[1407],[1000,15400,15402],{"className":15401,"style":1412},[1411],[1000,15403,15404,15407],{"style":1415},[1000,15405],{"className":15406,"style":1420},[1419],[1000,15408,15410],{"className":15409},[1424,1425,1426,1427],[1000,15411,1330],{"className":15412},[1055,1427],[1000,15414,15416,15419],{"className":15415},[1055],[1000,15417,1330],{"className":15418},[1055],[1000,15420,15422],{"className":15421},[1399],[1000,15423,15425],{"className":15424},[1403],[1000,15426,15428],{"className":15427},[1407],[1000,15429,15431],{"className":15430,"style":5753},[1411],[1000,15432,15433,15436],{"style":1415},[1000,15434],{"className":15435,"style":1420},[1419],[1000,15437,15439],{"className":15438},[1424,1425,1426,1427],[1000,15440,1029],{"className":15441},[1055,1056,1427],[1000,15443,1032],{"className":15444},[1068]," chỉ khoảng ",[1000,15447,15449,15471],{"className":15448},[1003],[1000,15450,15452],{"className":15451},[1007],[1009,15453,15454],{"xmlns":1011},[1013,15455,15456,15468],{},[1016,15457,15458,15460,15462],{},[1320,15459,2234],{},[1023,15461,1971],{},[1324,15463,15464,15466],{},[1320,15465,1343],{},[1320,15467,10030],{},[1034,15469,15470],{"encoding":1036},"4 \\cdot 10^8",[1000,15472,15474,15492],{"className":15473,"ariaHidden":1042},[1041],[1000,15475,15477,15480,15483,15486,15489],{"className":15476},[1046],[1000,15478],{"className":15479,"style":1470},[1050],[1000,15481,2234],{"className":15482},[1055],[1000,15484],{"className":15485,"style":1434},[1371],[1000,15487,1971],{"className":15488},[1438],[1000,15490],{"className":15491,"style":1434},[1371],[1000,15493,15495,15498,15501],{"className":15494},[1046],[1000,15496],{"className":15497,"style":1412},[1050],[1000,15499,4017],{"className":15500},[1055],[1000,15502,15504,15507],{"className":15503},[1055],[1000,15505,1786],{"className":15506},[1055],[1000,15508,15510],{"className":15509},[1399],[1000,15511,15513],{"className":15512},[1403],[1000,15514,15516],{"className":15515},[1407],[1000,15517,15519],{"className":15518,"style":1412},[1411],[1000,15520,15521,15524],{"style":1415},[1000,15522],{"className":15523,"style":1420},[1419],[1000,15525,15527],{"className":15526},[1424,1425,1426,1427],[1000,15528,10030],{"className":15529},[1055,1427]," bước nên vẫn chạy được.",[973,15532,15533,15535],{},[6796,15534,8212],{}," LIME giải thích một dự đoán bằng cách nào?",[6974,15537,15538],{"close-text":6976,"name":6977,"open-text":6978},[973,15539,15540],{},"Thay đổi nhẹ đầu vào quanh điểm cần giải thích, quan sát đầu ra đổi ra sao, rồi khớp một mô hình đơn giản cục bộ để đo ảnh hưởng từng đặc trưng.",[968,15542,8450],{"id":8449},[5504,15544,15545,15548,15551,15554,15557],{},[5507,15546,15547],{},"Thiết kế tốt trả lời ba câu hỏi: đúng đắn, tối ưu và mở rộng, theo quá trình lặp.",[5507,15549,15550],{},"Bốn họ tất định, ngẫu nhiên, chính xác, xấp xỉ cần logic kiểm chứng khác nhau.",[5507,15552,15553],{},"Kiểm chứng dùng độ đo so với chân lý, kiểm tra nghiệm ứng viên và bao phủ trường hợp biên.",[5507,15555,15556],{},"Người bán hàng rong minh họa ngưỡng phải chuyển sang xấp xỉ: vét cạn tắc ở khoảng 15 thành phố, quy hoạch động ở khoảng 30.",[5507,15558,15559],{},"Tính giải thích được với LIME là bắt buộc với ứng dụng trọng yếu.",{"title":9007,"searchDepth":68,"depth":68,"links":15561},[15562,15563,15564,15565,15566,15567,15568,15569,15570,15571],{"id":970,"depth":68,"text":971},{"id":14880,"depth":68,"text":14881},{"id":14905,"depth":68,"text":14906},{"id":15087,"depth":68,"text":15088},{"id":15112,"depth":68,"text":15113},{"id":9147,"depth":68,"text":9148},{"id":9166,"depth":68,"text":9167},{"id":9182,"depth":68,"text":9183},{"id":6788,"depth":68,"text":6789},{"id":8449,"depth":68,"text":8450},"Ba mối quan tâm thiết kế, phân biệt exact-approximate-randomized, kiểm chứng bằng độ đo và tính giải thích được của thuật toán.",{},{"title":42,"description":15572},[9285,15576,15577,7],"kiem-chung","explainability","Jqca6gPr3xVnTwD9HHAuet2d4k-UQj4G33-6cvWtFmo",{"id":15580,"title":46,"body":15581,"category":7,"day":9020,"description":16074,"difficulty":9022,"estimatedMinutes":283,"extension":9023,"lastUpdate":9024,"meta":16075,"navigation":9026,"outcomes":9020,"path":47,"prerequisites":9020,"seo":16076,"stem":48,"tags":16077,"__hash__":16080},"fundamentals\u002Ffundamentals\u002Fthuat-toan-moi-truong-phat-trien.md",{"type":965,"value":15582,"toc":16058},[15583,15585,15588,15591,15594,15598,15601,15604,15607,15610,15613,15616,15620,15623,15626,15629,15632,15635,15638,15641,15645,15648,15651,15654,15657,15661,15664,15667,15670,15673,15723,15726,15741,15744,15748,15753,15830,15876,15880,15883,15928,15935,15937,15940,15943,15946,15949,15952,15954,15957,15960,15963,15966,15968,15971,15974,15977,15979,15981,15986,15991,15996,16001,16006,16011,16016,16023,16028,16036,16038,16055],[968,15584,971],{"id":970},[973,15586,15587],{},"Trước khi học thuật toán cụ thể, cần thống nhất ba điều. Thuật toán là gì, nó đi từ ý tưởng tới sản phẩm qua chặng nào.",[973,15589,15590],{},"Môi trường thử nghiệm nào phù hợp để học và nghiên cứu. Bài này trình bày toàn bộ khung cảnh đó ở mức lý thuyết.",[973,15592,15593],{},"Làm bệ đỡ cho mọi bài học thuật toán phía sau. Không đi vào thuật toán coding cụ thể nào.",[968,15595,15597],{"id":15596},"_2-thuật-toán-là-gì","2. Thuật toán là gì",[973,15599,15600],{},"Định nghĩa gọn nhất: thuật toán là tập quy tắc thực hiện phép tính để giải một bài toán. Nó cho ra kết quả với mọi đầu vào hợp lệ theo chỉ dẫn định nghĩa chính xác.",[973,15602,15603],{},"Từ điển American Heritage định nghĩa: tập hữu hạn chỉ dẫn không mơ hồ, với điều kiện ban đầu cho trước, thực hiện theo trình tự quy định để đạt mục tiêu, và có điều kiện kết thúc nhận biết được.",[973,15605,15606],{},"Ba tính từ đáng suy ngẫm. Hữu hạn nghĩa là thuật toán phải dừng, không phải quá trình vô tận.",[973,15608,15609],{},"Không mơ hồ nghĩa là mỗi bước rõ tới mức ai làm cũng ra cùng kết quả. Có điều kiện kết thúc nhận biết được nghĩa là ta luôn biết khi nào xong việc.",[973,15611,15612],{},"Thiết kế thuật toán là tạo công thức toán hiệu quả nhất cho bài thực tế. Công thức đó có thể thành nền tảng tái dùng cho cả họ bài tương tự.",[973,15614,15615],{},"Giống như công thức nấu ăn từng bước rõ ràng. Bước mơ hồ thì không phải thuật toán.",[968,15617,15619],{"id":15618},"_3-các-pha-từ-yêu-cầu-tới-triển-khai","3. Các pha: từ yêu cầu tới triển khai",[973,15621,15622],{},"Vòng đời thuật toán đi qua sơ đồ các pha. Mọi thứ bắt đầu từ hiểu yêu cầu trong phát biểu bài toán.",[973,15624,15625],{},"Tức làm rõ cần làm gì trước khi nghĩ làm như thế nào. Từ đó bước vào pha phát triển gồm hai chặng nhỏ.",[973,15627,15628],{},"Chặng thiết kế hình dung và ghi lại kiến trúc, logic và chi tiết cài đặt. Trong đầu luôn giữ cả chính xác và hiệu năng.",[973,15630,15631],{},"Khi có nhiều ứng viên, chặng thiết kế là quá trình lặp. So sánh ứng viên với mọi đánh đổi rồi mới lựa chọn.",[973,15633,15634],{},"Chặng viết mã chuyển thiết kế thành chương trình máy tính. Yêu cầu quan trọng là triển khai đầy đủ logic và kiến trúc đã đề ra.",[973,15636,15637],{},"Xong thiết kế và viết mã thì sẵn sàng triển khai. Thiết kế môi trường sản phẩm nơi mã sẽ chạy.",[973,15639,15640],{},"Rồi đưa thuật toán vào vận hành với dữ liệu thật để sinh đầu ra theo yêu cầu. Giống như tập lái ở sân rồi mới chạy thật ngoài đường.",[968,15642,15644],{"id":15643},"_4-yêu-cầu-chức-năng-và-phi-chức-năng","4. Yêu cầu chức năng và phi chức năng",[973,15646,15647],{},"Bài toán thực tế có hai loại yêu cầu. Yêu cầu chức năng quy định tính năng mong đợi, tức mô tả hành vi.",[973,15649,15650],{},"Với một đầu vào nhất định thì đầu ra kỳ vọng là gì. Yêu cầu phi chức năng nói về hiệu năng, mở rộng, khả dụng và chính xác.",[973,15652,15653],{},"Đồng thời đặt kỳ vọng về bảo mật dữ liệu. Ví dụ món ăn là chức năng, giao trong 30 phút là phi chức năng.",[973,15655,15656],{},"Phi chức năng phải có số đo được. Không đo được thì không nghiệm thu được.",[968,15658,15660],{"id":15659},"_5-môi-trường-phát-triển-và-môi-trường-sản-phẩm","5. Môi trường phát triển và môi trường sản phẩm",[973,15662,15663],{},"Môi trường phát triển là nơi học, thử và cài đặt thuật toán. Môi trường sản phẩm là nơi thuật toán vận hành thực tế.",[973,15665,15666],{},"Môi trường sản phẩm thiết kế theo nhu cầu dữ liệu và xử lý. Thuật toán song song được cần cụm máy với số nút phù hợp.",[973,15668,15669],{},"Thuật toán nặng dữ liệu cần đường ống nạp, chiến lược đệm và lưu trữ. Chi tiết môi trường cho hệ lớn dành cho các bài sau.",[973,15671,15672],{},"Về phía phát triển, khóa học dùng hai ngôn ngữ, mỗi ngôn ngữ cho một việc:",[2969,15674,15675,15688],{},[2972,15676,15677],{},[2975,15678,15679,15682,15685],{},[2978,15680,15681],{},"Nhóm bài",[2978,15683,15684],{},"Ngôn ngữ",[2978,15686,15687],{},"Lý do",[2988,15689,15690,15701,15712],{},[2975,15691,15692,15695,15698],{},[2993,15693,15694],{},"Cấu trúc dữ liệu, thuật toán cổ điển",[2993,15696,15697],{},"C hoặc C++17",[2993,15699,15700],{},"Thấy rõ bộ nhớ, con trỏ, chi phí từng thao tác",[2975,15702,15703,15706,15709],{},[2993,15704,15705],{},"Design pattern",[2993,15707,15708],{},"C++17 hoặc Java",[2993,15710,15711],{},"Có lớp, kế thừa, giao diện rõ ràng",[2975,15713,15714,15717,15720],{},[2993,15715,15716],{},"Dữ liệu, học máy, hệ thống lớn",[2993,15718,15719],{},"Python 3",[2993,15721,15722],{},"Hệ sinh thái NumPy, pandas, PyTorch, Spark",[973,15724,15725],{},"Mỗi ngày học ghi rõ ngôn ngữ ở đầu mục bài tập. Bạn được đổi sang ngôn ngữ khác nếu viết lại API tương đương.",[973,15727,15728,15729,15732,15733,15736,15737,15740],{},"Thực hành bắt buộc: môi trường phải dựng lại được bằng một lệnh. Với Python là tệp ",[8030,15730,15731],{},"requirements.txt"," ghim phiên bản thư viện. Với C\u002FC++ là ",[8030,15734,15735],{},"CMakeLists.txt"," hoặc ",[8030,15738,15739],{},"Makefile"," ghi rõ cờ biên dịch.",[973,15742,15743],{},"Không lẫn số đo của môi trường phát triển với môi trường sản phẩm.",[968,15745,15747],{"id":15746},"_6-bộ-công-cụ","6. Bộ công cụ",[15749,15750,15752],"h3",{"id":15751},"c-và-c","C và C++",[2969,15754,15755,15765],{},[2972,15756,15757],{},[2975,15758,15759,15762],{},[2978,15760,15761],{},"Công cụ",[2978,15763,15764],{},"Vai trò",[2988,15766,15767,15784,15794,15804,15817],{},[2975,15768,15769,15777],{},[2993,15770,15771,15736,15774],{},[8030,15772,15773],{},"gcc",[8030,15775,15776],{},"clang",[2993,15778,15779,15780,15783],{},"Biên dịch. Bật ",[8030,15781,15782],{},"-Wall -Wextra"," để thấy cảnh báo",[2975,15785,15786,15791],{},[2993,15787,15788],{},[8030,15789,15790],{},"-fsanitize=address,undefined",[2993,15792,15793],{},"Bắt lỗi tràn mảng, dùng sau khi giải phóng, hành vi không xác định",[2975,15795,15796,15801],{},[2993,15797,15798],{},[8030,15799,15800],{},"valgrind --leak-check=full",[2993,15802,15803],{},"Bắt rò bộ nhớ",[2975,15805,15806,15814],{},[2993,15807,15808,15736,15811],{},[8030,15809,15810],{},"gdb",[8030,15812,15813],{},"lldb",[2993,15815,15816],{},"Chạy từng bước, xem biến",[2975,15818,15819,15827],{},[2993,15820,15821,2268,15824],{},[8030,15822,15823],{},"-O2",[8030,15825,15826],{},"perf",[2993,15828,15829],{},"Build để đo hiệu năng và tìm điểm nóng",[9427,15831,15835],{"className":15832,"code":15833,"language":15834,"meta":9007,"style":9007},"language-bash shiki shiki-themes github-light github-light github-dark","g++ -std=c++17 -Wall -Wextra -g -fsanitize=address,undefined main.cpp -o main && .\u002Fmain\n","bash",[8030,15836,15837],{"__ignoreMap":9007},[1000,15838,15839,15843,15847,15850,15853,15856,15859,15863,15866,15869,15873],{"class":9436,"line":63},[1000,15840,15842],{"class":15841},"snPdu","g++",[1000,15844,15846],{"class":15845},"sBjJW"," -std=c++17",[1000,15848,15849],{"class":15845}," -Wall",[1000,15851,15852],{"class":15845}," -Wextra",[1000,15854,15855],{"class":15845}," -g",[1000,15857,15858],{"class":15845}," -fsanitize=address,undefined",[1000,15860,15862],{"class":15861},"sIIMD"," main.cpp",[1000,15864,15865],{"class":15845}," -o",[1000,15867,15868],{"class":15861}," main",[1000,15870,15872],{"class":15871},"sxrX7"," && ",[1000,15874,15875],{"class":15841},".\u002Fmain\n",[15749,15877,15879],{"id":15878},"python-và-hệ-sinh-thái-scipy","Python và hệ sinh thái SciPy",[973,15881,15882],{},"Hệ sinh thái SciPy là nhóm gói Python cho cộng đồng khoa học. Nó chứa bộ sinh số ngẫu nhiên, thủ tục đại số tuyến tính và bộ tối ưu. Vì là lớp bọc mỏng quanh mã tối ưu viết bằng C, C++ và Fortran, SciPy vừa tiện vừa nhanh.",[2969,15884,15885,15894],{},[2972,15886,15887],{},[2975,15888,15889,15892],{},[2978,15890,15891],{},"Thành viên",[2978,15893,15764],{},[2988,15895,15896,15904,15912,15920],{},[2975,15897,15898,15901],{},[2993,15899,15900],{},"NumPy",[2993,15902,15903],{},"Mảng và ma trận đa chiều",[2975,15905,15906,15909],{},[2993,15907,15908],{},"scikit-learn",[2993,15910,15911],{},"Phân loại, hồi quy, phân cụm, kiểm định mô hình",[2975,15913,15914,15917],{},[2993,15915,15916],{},"pandas",[2993,15918,15919],{},"Nhập, xuất và xử lý dữ liệu dạng bảng",[2975,15921,15922,15925],{},[2993,15923,15924],{},"Matplotlib",[2993,15926,15927],{},"Trực quan hóa dữ liệu",[973,15929,15930,15931,15934],{},"Jupyter và Colab cho phép chạy thử từng đoạn, xem kết quả ngay và ghi chú xen kẽ. Rất hợp để khám phá dữ liệu. Code nộp bài vẫn nên là tệp ",[8030,15932,15933],{},".py"," có test, không chỉ là notebook.",[968,15936,6568],{"id":6567},[973,15938,15939],{},"Đánh đổi đầu tiên nằm giữa thiết kế và viết mã. Đầu tư nhiều vào thiết kế tốn giờ ban đầu.",[973,15941,15942],{},"Nhưng rẻ hơn nhiều so với viết mã rồi mới phát hiện thiết kế sai. Đánh đổi thứ hai nằm giữa chức năng và phi chức năng.",[973,15944,15945],{},"Thuật toán đúng mà chậm hoặc nhanh mà sai đều không đạt. Hai nhóm yêu cầu phải cân cùng lúc.",[973,15947,15948],{},"Đánh đổi thứ ba nằm giữa phát triển tiện lợi và sản phẩm hiệu quả. Python và Jupyter tuyệt vời để thử nhanh, C++ cho quyền kiểm soát bộ nhớ và tốc độ.",[973,15950,15951],{},"Nhưng thuật toán cần mã biên dịch tối ưu mức thấp có thể phải chuyển ngôn ngữ khi lên sản phẩm. Giống như xe tập lái và xe đua dùng việc khác nhau.",[968,15953,6578],{"id":6577},[973,15955,15956],{},"Thứ nhất: nhảy vào viết mã khi phát biểu bài toán còn mơ hồ. Tức bỏ qua bước hiểu yêu cầu.",[973,15958,15959],{},"Thứ hai: lẫn cần làm gì với làm như thế nào. Tức đưa giải pháp vào trong đặc tả yêu cầu.",[973,15961,15962],{},"Thứ ba: coi môi trường phát triển mặc định là môi trường sản phẩm. Thuật toán chạy tốt trên máy cá nhân nhưng sụp đổ với dữ liệu thật.",[973,15964,15965],{},"Thứ tư: không ghim phiên bản thư viện. Kết quả hôm nay không tái tạo được ngày mai vì môi trường đã trôi.",[968,15967,6779],{"id":6778},[973,15969,15970],{},"Khung pha phát triển dùng cho mọi dự án thuật toán. Viết đặc tả yêu cầu trước, thiết kế và so ứng viên trên giấy.",[973,15972,15973],{},"Rồi mới viết mã và thiết kế môi trường triển khai. Phân biệt chức năng và phi chức năng giúp nhóm và khách hàng cùng ngôn ngữ nghiệm thu.",[973,15975,15976],{},"Thực hành tệp yêu cầu và môi trường tái tạo được giúp mọi thử nghiệm đáng tin. Mọi kết quả trong khóa học đều kiểm chứng lại được.",[968,15978,6789],{"id":6788},[973,15980,6792],{},[973,15982,15983,15985],{},[6796,15984,6798],{}," Ba tính chất của một thuật toán theo định nghĩa trong bài?",[6974,15987,15988],{"close-text":6976,"name":6977,"open-text":6978},[973,15989,15990],{},"Hữu hạn (phải dừng), không mơ hồ (mỗi bước rõ ràng), có điều kiện kết thúc nhận biết được.",[973,15992,15993,15995],{},[6796,15994,7124],{}," \"Tìm kiếm trả kết quả trong 200 ms với 1 triệu bản ghi\" là yêu cầu gì?",[6974,15997,15998],{"close-text":6976,"name":6977,"open-text":6978},[973,15999,16000],{},"Yêu cầu phi chức năng: nó đặt ngưỡng hiệu năng đo được.",[973,16002,16003,16005],{},[6796,16004,7655],{}," Vì sao phải ghim phiên bản thư viện?",[6974,16007,16008],{"close-text":6976,"name":6977,"open-text":6978},[973,16009,16010],{},"Để người khác và chính bạn sau này dựng lại đúng môi trường, và kết quả đo có thể tái lập.",[973,16012,16013,16015],{},[6796,16014,8027],{}," Lệnh biên dịch C++ nào bắt lỗi tràn mảng lúc chạy?",[6974,16017,16018],{"close-text":6976,"name":6977,"open-text":6978},[973,16019,16020,2958],{},[8030,16021,16022],{},"g++ -g -fsanitize=address,undefined main.cpp",[973,16024,16025,16027],{},[6796,16026,8212],{}," Vì sao không nên đo hiệu năng với bản build có sanitizer?",[6974,16029,16030],{"close-text":6976,"name":6977,"open-text":6978},[973,16031,16032,16033,16035],{},"Sanitizer thêm kiểm tra vào mỗi lần truy cập bộ nhớ, làm chương trình chậm đi nhiều lần. Đo hiệu năng phải dùng bản ",[8030,16034,15823],{}," không sanitizer.",[968,16037,8450],{"id":8449},[5504,16039,16040,16043,16046,16049,16052],{},[5507,16041,16042],{},"Thuật toán là tập hữu hạn chỉ dẫn không mơ hồ, có điều kiện kết thúc nhận biết được.",[5507,16044,16045],{},"Vòng đời đi từ hiểu yêu cầu qua thiết kế và viết mã tới triển khai sản phẩm.",[5507,16047,16048],{},"Yêu cầu chức năng mô tả hành vi, phi chức năng đặt ngưỡng đo được về hiệu năng và bảo mật.",[5507,16050,16051],{},"Môi trường phát triển và sản phẩm phải thiết kế khác nhau, không lẫn số đo.",[5507,16053,16054],{},"Khóa học dùng C\u002FC++ cho cấu trúc dữ liệu và thuật toán, Python cho dữ liệu và học máy; môi trường phải dựng lại được bằng một lệnh.",[10286,16056,16057],{},"html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":9007,"searchDepth":68,"depth":68,"links":16059},[16060,16061,16062,16063,16064,16065,16069,16070,16071,16072,16073],{"id":970,"depth":68,"text":971},{"id":15596,"depth":68,"text":15597},{"id":15618,"depth":68,"text":15619},{"id":15643,"depth":68,"text":15644},{"id":15659,"depth":68,"text":15660},{"id":15746,"depth":68,"text":15747,"children":16066},[16067,16068],{"id":15751,"depth":73,"text":15752},{"id":15878,"depth":73,"text":15879},{"id":6567,"depth":68,"text":6568},{"id":6577,"depth":68,"text":6578},{"id":6778,"depth":68,"text":6779},{"id":6788,"depth":68,"text":6789},{"id":8449,"depth":68,"text":8450},"Định nghĩa thuật toán, các pha phát triển và triển khai, yêu cầu chức năng và phi chức năng, môi trường học tập và môi trường vận hành.",{},{"title":46,"description":16074},[16078,16079,14861,7],"thuat-toan","moi-truong","KyVHKaU2gUcVUofGIaMipNX9Sp7Ovpv_OMcfYclI7lQ",{"id":16082,"title":50,"body":16083,"category":7,"day":9020,"description":16940,"difficulty":9022,"estimatedMinutes":283,"extension":9023,"lastUpdate":9024,"meta":16941,"navigation":9026,"outcomes":9020,"path":51,"prerequisites":9020,"seo":16942,"stem":52,"tags":16943,"__hash__":16946},"fundamentals\u002Ffundamentals\u002Ftime-space-complexity.md",{"type":965,"value":16084,"toc":16926},[16085,16087,16090,16093,16096,16100,16103,16106,16109,16112,16115,16118,16121,16125,16128,16135,16138,16141,16144,16242,16245,16248,16251,16255,16258,16261,16264,16267,16270,16273,16276,16280,16287,16344,16347,16351,16354,16357,16360,16363,16366,16369,16371,16374,16377,16380,16383,16386,16388,16391,16394,16397,16400,16402,16405,16408,16411,16413,16415,16449,16519,16524,16572,16577,16681,16686,16691,16696,16905,16907,16924],[968,16086,971],{"id":970},[973,16088,16089],{},"Mọi thuật toán đều tiêu hai tài nguyên hữu hạn: giờ chạy và bộ nhớ. Bài này trình bày hai trục phân tích thời gian và không gian.",[973,16091,16092],{},"Kèm ba kịch bản tốt nhất, tệ nhất và trung bình. Thêm ba kiểu vòng lặp hội tụ, phân kỳ và phẳng.",[973,16094,16095],{},"Cùng nguyên tắc ước lượng và tiết kiệm chi phí đúc kết từ đó. Nắm khung này rồi mới đọc mọi phân tích cụ thể.",[968,16097,16099],{"id":16098},"_2-hai-trục-phân-tích-thời-gian-và-không-gian","2. Hai trục phân tích: thời gian và không gian",[973,16101,16102],{},"Phân tích thời gian ước lượng thuật toán mất bao lâu dựa trên cấu trúc của nó. Điểm đáng chú ý là nó không phụ thuộc phần cứng, ngăn xếp chạy hay ngôn ngữ.",[973,16104,16105],{},"Mục tiêu trả lời hai câu hỏi lớn. Thuật toán có mở rộng được không, và nó xử lý tập lớn hơn ra sao.",[973,16107,16108],{},"Phân tích không gian ước lượng bộ nhớ cần để thực thi. Gồm nhớ cho đầu vào, cấu trúc tạm sinh lúc chạy và bản thân quá trình thực thi.",[973,16110,16111],{},"Phân tích không gian ngày càng quan trọng trong thời đại phân tán. Nếu không tính kỹ từ khâu thiết kế, nhớ thiếu cho cấu trúc tạm sẽ gây tràn đĩa.",[973,16113,16114],{},"Hiệu năng khi đó sụt nghiêm trọng. Hai cách tiếp cận phân tích được đối chiếu.",[973,16116,16117],{},"Đo sau khi cài đặt: triển khai ứng viên rồi so hiệu năng thực tế. Lý thuyết trước khi cài đặt: xấp xỉ bằng toán mà không tốn công cài đặt.",[973,16119,16120],{},"Giống như nấu nhanh cần nhiều bếp cùng lúc. Muốn nhanh thường phải trả bằng nhớ.",[968,16122,16124],{"id":16123},"_3-ba-kịch-bản-hiệu-năng-tốt-nhất-tệ-nhất-trung-bình","3. Ba kịch bản hiệu năng: tốt nhất, tệ nhất, trung bình",[973,16126,16127],{},"Hiệu năng thường phụ thuộc hình dạng đầu vào. Nên bài này trình bày ba kịch bản.",[973,16129,16130,16131,16134],{},"Kịch bản tốt nhất xét đầu vào có lợi nhất cho thuật toán. Nó cho biết thời gian chạy ",[6796,16132,16133],{},"ít nhất"," có thể, tức mức tốt nhất có thể hy vọng.",[973,16136,16137],{},"Nhưng hiếm khi phản ánh dùng thực tế. Kịch bản tệ nhất tìm giờ tối đa thuật toán có thể tốn trong điều kiện cho trước.",[973,16139,16140],{},"Giá trị của nó là đảm bảo. Bất kể điều kiện ra sao, thực tế luôn tốt hơn con số này.",[973,16142,16143],{},"Kịch bản trung bình là kỳ vọng thời gian chạy khi đầu vào tuân theo một phân phối, thường giả định mọi đầu vào cùng khả năng. Cách làm thủ công: chia đầu vào khả dĩ thành nhiều nhóm, tính chi phí mỗi nhóm rồi lấy trung bình có trọng số.",[973,16145,16146,16147,16175,16176,16204,16205,16241],{},"Ví dụ tìm tuyến tính trong mảng ",[1000,16148,16150,16163],{"className":16149},[1003],[1000,16151,16153],{"className":16152},[1007],[1009,16154,16155],{"xmlns":1011},[1013,16156,16157,16161],{},[1016,16158,16159],{},[1019,16160,1029],{},[1034,16162,1029],{"encoding":1036},[1000,16164,16166],{"className":16165,"ariaHidden":1042},[1041],[1000,16167,16169,16172],{"className":16168},[1046],[1000,16170],{"className":16171,"style":1762},[1050],[1000,16173,1029],{"className":16174},[1055,1056]," phần tử: tốt nhất 1 phép so sánh (phần tử ở đầu), tệ nhất ",[1000,16177,16179,16192],{"className":16178},[1003],[1000,16180,16182],{"className":16181},[1007],[1009,16183,16184],{"xmlns":1011},[1013,16185,16186,16190],{},[1016,16187,16188],{},[1019,16189,1029],{},[1034,16191,1029],{"encoding":1036},[1000,16193,16195],{"className":16194,"ariaHidden":1042},[1041],[1000,16196,16198,16201],{"className":16197},[1046],[1000,16199],{"className":16200,"style":1762},[1050],[1000,16202,1029],{"className":16203},[1055,1056]," (không có), trung bình khoảng ",[1000,16206,16208,16226],{"className":16207},[1003],[1000,16209,16211],{"className":16210},[1007],[1009,16212,16213],{"xmlns":1011},[1013,16214,16215,16223],{},[1016,16216,16217,16219,16221],{},[1019,16218,1029],{},[1019,16220,1155],{"mathvariant":1154},[1320,16222,1330],{},[1034,16224,16225],{"encoding":1036},"n\u002F2",[1000,16227,16229],{"className":16228,"ariaHidden":1042},[1041],[1000,16230,16232,16235,16238],{"className":16231},[1046],[1000,16233],{"className":16234,"style":1051},[1050],[1000,16236,1029],{"className":16237},[1055,1056],[1000,16239,5270],{"className":16240},[1055]," nếu phần tử có mặt ở vị trí ngẫu nhiên.",[973,16243,16244],{},"Hạn chế là không phải lúc nào cũng chính xác. Vì cần xét mọi tổ hợp và khả năng đầu vào, điều không phải lúc nào cũng dễ.",[973,16246,16247],{},"Thực tế người thiết kế dựa vào tệ nhất để quyết định an toàn. Dùng trung bình để dự báo thực tế, xem tốt nhất như mốc lạc quan.",[973,16249,16250],{},"Giống như đường vắng đi nhanh, giờ cao điểm kẹt cứng. Kế hoạch chắc chắn phải tính giờ kẹt.",[968,16252,16254],{"id":16253},"_4-ba-kiểu-vòng-lặp-và-ý-nghĩa-với-bộ-nhớ","4. Ba kiểu vòng lặp và ý nghĩa với bộ nhớ",[973,16256,16257],{},"Thuật toán phức tạp thường mang tính lặp. Thay vì nạp hết vào nhớ một lúc, chúng điền dần cấu trúc qua từng vòng.",[973,16259,16260],{},"Ba kiểu vòng lặp ảnh hưởng khác nhau tới không gian. Vòng hội tụ xử lý ít dần mỗi vòng, thách thức nằm ở vòng đầu nặng nhất.",[973,16262,16263],{},"Hạ tầng co giãn hợp kiểu này vì cấp nhiều lúc đầu rồi thu hẹp dần. Vòng phân kỳ xử lý nhiều dần mỗi vòng.",[973,16265,16266],{},"Vì không gian tăng theo giờ, cần đặt ràng buộc để hệ thống không mất ổn định. Bằng cách giới hạn số vòng hoặc kích thước dữ liệu ban đầu.",[973,16268,16269],{},"Vòng phẳng xử lý đều mỗi vòng. Vì không gian không đổi nên không cần tính co giãn hạ tầng.",[973,16271,16272],{},"Để ước lượng không gian, tập trung vào vòng phức tạp nhất. Nhiều thuật toán càng gần nghiệm càng nhẹ, nên vòng đầu cho ước lượng tốt nhất.",[973,16274,16275],{},"Khi đã chọn vòng đó, ước lượng tổng nhớ cho cấu trúc tạm, thực thi và đầu vào. Giống như chia đôi tờ giấy: mỗi lần một nửa, nhanh mỏng dần.",[15749,16277,16279],{"id":16278},"đếm-bộ-nhớ-phụ","Đếm bộ nhớ phụ",[973,16281,16282,16283,16286],{},"Độ phức tạp không gian thường chỉ tính ",[6796,16284,16285],{},"bộ nhớ phụ",": phần cấp thêm ngoài đầu vào. Ba ví dụ:",[9427,16288,16290],{"className":9429,"code":16289,"language":9431,"meta":9007,"style":9007},"int sum(const std::vector\u003Cint> &a) {          \u002F\u002F bộ nhớ phụ O(1): chỉ 1 biến\n  int s = 0;\n  for (int x : a) s += x;\n  return s;\n}\nstd::vector\u003Cint> reversedCopy(const std::vector\u003Cint> &a) {   \u002F\u002F O(n): tạo mảng mới\n  return std::vector\u003Cint>(a.rbegin(), a.rend());\n}\nint sumRec(const std::vector\u003Cint> &a, size_t i) {           \u002F\u002F O(n): n khung stack\n  return i == a.size() ? 0 : a[i] + sumRec(a, i + 1);\n}\n",[8030,16291,16292,16297,16302,16307,16312,16316,16321,16326,16330,16335,16340],{"__ignoreMap":9007},[1000,16293,16294],{"class":9436,"line":63},[1000,16295,16296],{},"int sum(const std::vector\u003Cint> &a) {          \u002F\u002F bộ nhớ phụ O(1): chỉ 1 biến\n",[1000,16298,16299],{"class":9436,"line":68},[1000,16300,16301],{},"  int s = 0;\n",[1000,16303,16304],{"class":9436,"line":73},[1000,16305,16306],{},"  for (int x : a) s += x;\n",[1000,16308,16309],{"class":9436,"line":78},[1000,16310,16311],{},"  return s;\n",[1000,16313,16314],{"class":9436,"line":83},[1000,16315,9459],{},[1000,16317,16318],{"class":9436,"line":88},[1000,16319,16320],{},"std::vector\u003Cint> reversedCopy(const std::vector\u003Cint> &a) {   \u002F\u002F O(n): tạo mảng mới\n",[1000,16322,16323],{"class":9436,"line":93},[1000,16324,16325],{},"  return std::vector\u003Cint>(a.rbegin(), a.rend());\n",[1000,16327,16328],{"class":9436,"line":98},[1000,16329,9459],{},[1000,16331,16332],{"class":9436,"line":103},[1000,16333,16334],{},"int sumRec(const std::vector\u003Cint> &a, size_t i) {           \u002F\u002F O(n): n khung stack\n",[1000,16336,16337],{"class":9436,"line":108},[1000,16338,16339],{},"  return i == a.size() ? 0 : a[i] + sumRec(a, i + 1);\n",[1000,16341,16342],{"class":9436,"line":113},[1000,16343,9459],{},[973,16345,16346],{},"Hàm thứ ba cho thấy đệ quy cũng tốn bộ nhớ: mỗi lời gọi chưa trả về giữ một khung trên stack.",[968,16348,16350],{"id":16349},"_5-nguyên-tắc-tiết-kiệm-không-gian-và-tư-duy-mở-rộng","5. Nguyên tắc tiết kiệm không gian và tư duy mở rộng",[973,16352,16353],{},"Ba chỉ dẫn giảm độ phức tạp không gian. Một là thiết kế dạng lặp thay vì nạp tất cả vào nhớ cùng lúc.",[973,16355,16356],{},"Hai là khi phải chọn, ưu tiên vòng nhiều và mịn hơn vòng ít và thô. Ba là chỉ giữ trong nhớ thứ cần cho xử lý hiện tại.",[973,16358,16359],{},"Thứ không cần thì đẩy ra ngoài. Tái dùng mảng cũ cũng tiết kiệm nhớ đáng kể.",[973,16361,16362],{},"Hai câu hỏi mở rộng mà phân tích thời gian phải trả lời. Thuật toán có tận dụng hạ tầng co giãn hiện đại không.",[973,16364,16365],{},"Tức có dùng thêm CPU, nhân xử lý, GPU và nhớ khi được cấp không. Thuật toán xử lý tập lớn hơn ra sao.",[973,16367,16368],{},"Vì hiệu năng ngày càng quan trọng trong thế giới dữ liệu lớn. Lúc phát triển nhiều thuật toán chỉ thử trên mẫu nhỏ, lên dữ liệu lớn mới lộ vấn đề.",[968,16370,9148],{"id":9147},[973,16372,16373],{},"Hai trục giờ và nhớ thường giằng co nhau. Dùng thêm nhớ lưu kết quả trung gian có thể rút ngắn giờ.",[973,16375,16376],{},"Tiết kiệm nhớ bằng tính lại nhiều lần sẽ kéo dài giờ. Phân tích cả hai trục giúp thấy điểm cân bằng thay vì tối ưu mù một trục.",[973,16378,16379],{},"Đánh đổi thứ hai nằm giữa tệ nhất và trung bình. Thiết kế theo tệ nhất cho đảm bảo chắc nhưng có thể quá thận trọng và tốn kém.",[973,16381,16382],{},"Thiết kế theo trung bình cho thực tế tốt hơn nhưng rủi ro khi gặp đầu vào thù địch. Đánh đổi thứ ba nằm ở vòng lặp mịn.",[973,16384,16385],{},"Vòng mịn tiết kiệm nhớ nhưng chi phí điều phối tăng khi số vòng quá nhiều. Giống như chia việc quá vụn thì tốn công giao nhận.",[968,16387,9167],{"id":9166},[973,16389,16390],{},"Thứ nhất: đo trên đầu vào thuận lợi rồi tưởng đó là thực tế. Ví dụ benchmark trên dữ liệu đã sắp xếp.",[973,16392,16393],{},"Thứ hai: chỉ phân tích giờ mà quên nhớ. Tới lúc triển khai mới phát hiện tràn nhớ và tràn đĩa.",[973,16395,16396],{},"Thứ ba: lẫn hai trục, cho rằng nhanh thì mặc nhiên ít tốn nhớ. Thực ra nhiều thuật toán nhanh chính nhờ dùng nhiều nhớ tạm.",[973,16398,16399],{},"Thứ tư: áp kết quả mẫu nhỏ cho dữ liệu lớn mà không xét lại mở rộng. Đúng điều bài này cảnh báo từ đầu.",[968,16401,9183],{"id":9182},[973,16403,16404],{},"Tư duy hai trục dùng ngay từ đặc tả yêu cầu phi chức năng. Ngưỡng giờ phản hồi và ngưỡng nhớ khả dụng sẽ loại nhiều thiết kế không hợp.",[973,16406,16407],{},"Trước khi tốn công cài đặt. Nó cũng định hướng chọn hạ tầng triển khai theo kiểu vòng lặp của thuật toán.",[973,16409,16410],{},"Hội tụ thì thuê co giãn, phẳng thì thuê cố định. Phân kỳ thì đặt giới hạn ngay từ đầu.",[968,16412,6789],{"id":6788},[973,16414,6792],{},[973,16416,16417,16419,16420,16448],{},[6796,16418,6798],{}," Tìm tuyến tính trong mảng ",[1000,16421,16423,16436],{"className":16422},[1003],[1000,16424,16426],{"className":16425},[1007],[1009,16427,16428],{"xmlns":1011},[1013,16429,16430,16434],{},[1016,16431,16432],{},[1019,16433,1029],{},[1034,16435,1029],{"encoding":1036},[1000,16437,16439],{"className":16438,"ariaHidden":1042},[1041],[1000,16440,16442,16445],{"className":16441},[1046],[1000,16443],{"className":16444,"style":1762},[1050],[1000,16446,1029],{"className":16447},[1055,1056]," phần tử: tốt nhất, tệ nhất, trung bình bao nhiêu phép so sánh?",[6974,16450,16451],{"close-text":6976,"name":6977,"open-text":6978},[973,16452,16453,16454,16482,16483,16518],{},"Tốt nhất 1, tệ nhất ",[1000,16455,16457,16470],{"className":16456},[1003],[1000,16458,16460],{"className":16459},[1007],[1009,16461,16462],{"xmlns":1011},[1013,16463,16464,16468],{},[1016,16465,16466],{},[1019,16467,1029],{},[1034,16469,1029],{"encoding":1036},[1000,16471,16473],{"className":16472,"ariaHidden":1042},[1041],[1000,16474,16476,16479],{"className":16475},[1046],[1000,16477],{"className":16478,"style":1762},[1050],[1000,16480,1029],{"className":16481},[1055,1056],", trung bình khoảng ",[1000,16484,16486,16503],{"className":16485},[1003],[1000,16487,16489],{"className":16488},[1007],[1009,16490,16491],{"xmlns":1011},[1013,16492,16493,16501],{},[1016,16494,16495,16497,16499],{},[1019,16496,1029],{},[1019,16498,1155],{"mathvariant":1154},[1320,16500,1330],{},[1034,16502,16225],{"encoding":1036},[1000,16504,16506],{"className":16505,"ariaHidden":1042},[1041],[1000,16507,16509,16512,16515],{"className":16508},[1046],[1000,16510],{"className":16511,"style":1051},[1050],[1000,16513,1029],{"className":16514},[1055,1056],[1000,16516,5270],{"className":16517},[1055]," khi phần tử có mặt ở vị trí ngẫu nhiên.",[973,16520,16521,16523],{},[6796,16522,7124],{}," Hàm đảo mảng tại chỗ bằng 2 con trỏ tốn bao nhiêu bộ nhớ phụ?",[6974,16525,16526],{"close-text":6976,"name":6977,"open-text":6978},[973,16527,16528,16571],{},[1000,16529,16531,16550],{"className":16530},[1003],[1000,16532,16534],{"className":16533},[1007],[1009,16535,16536],{"xmlns":1011},[1013,16537,16538,16548],{},[1016,16539,16540,16542,16544,16546],{},[1019,16541,1084],{},[1023,16543,1026],{"stretchy":1025},[1320,16545,4017],{},[1023,16547,1032],{"stretchy":1025},[1034,16549,4844],{"encoding":1036},[1000,16551,16553],{"className":16552,"ariaHidden":1042},[1041],[1000,16554,16556,16559,16562,16565,16568],{"className":16555},[1046],[1000,16557],{"className":16558,"style":1051},[1050],[1000,16560,1084],{"className":16561,"style":1113},[1055,1056],[1000,16563,1026],{"className":16564},[1061],[1000,16566,4017],{"className":16567},[1055],[1000,16569,1032],{"className":16570},[1068],": chỉ vài biến chỉ số và 1 biến tạm để đổi chỗ.",[973,16573,16574,16576],{},[6796,16575,7655],{}," Merge sort tốn bao nhiêu bộ nhớ phụ?",[6974,16578,16579],{"close-text":6976,"name":6977,"open-text":6978},[973,16580,16581,16624,16625,16680],{},[1000,16582,16584,16603],{"className":16583},[1003],[1000,16585,16587],{"className":16586},[1007],[1009,16588,16589],{"xmlns":1011},[1013,16590,16591,16601],{},[1016,16592,16593,16595,16597,16599],{},[1019,16594,1084],{},[1023,16596,1026],{"stretchy":1025},[1019,16598,1029],{},[1023,16600,1032],{"stretchy":1025},[1034,16602,2784],{"encoding":1036},[1000,16604,16606],{"className":16605,"ariaHidden":1042},[1041],[1000,16607,16609,16612,16615,16618,16621],{"className":16608},[1046],[1000,16610],{"className":16611,"style":1051},[1050],[1000,16613,1084],{"className":16614,"style":1113},[1055,1056],[1000,16616,1026],{"className":16617},[1061],[1000,16619,1029],{"className":16620},[1055,1056],[1000,16622,1032],{"className":16623},[1068]," cho mảng tạm khi trộn, cộng ",[1000,16626,16628,16651],{"className":16627},[1003],[1000,16629,16631],{"className":16630},[1007],[1009,16632,16633],{"xmlns":1011},[1013,16634,16635,16649],{},[1016,16636,16637,16639,16641,16643,16645,16647],{},[1019,16638,1084],{},[1023,16640,1026],{"stretchy":1025},[1019,16642,4891],{},[1023,16644,4894],{},[1019,16646,1029],{},[1023,16648,1032],{"stretchy":1025},[1034,16650,4901],{"encoding":1036},[1000,16652,16654],{"className":16653,"ariaHidden":1042},[1041],[1000,16655,16657,16660,16663,16666,16671,16674,16677],{"className":16656},[1046],[1000,16658],{"className":16659,"style":1051},[1050],[1000,16661,1084],{"className":16662,"style":1113},[1055,1056],[1000,16664,1026],{"className":16665},[1061],[1000,16667,4921,16669],{"className":16668},[4920],[1000,16670,1089],{"style":4924},[1000,16672],{"className":16673,"style":4928},[1371],[1000,16675,1029],{"className":16676},[1055,1056],[1000,16678,1032],{"className":16679},[1068]," cho stack đệ quy.",[973,16682,16683,16685],{},[6796,16684,8027],{}," Vì sao thiết kế theo trường hợp tệ nhất lại an toàn?",[6974,16687,16688],{"close-text":6976,"name":6977,"open-text":6978},[973,16689,16690],{},"Vì nó là đảm bảo: mọi đầu vào đều không chậm hơn con số đó, kể cả đầu vào xấu cố tình.",[973,16692,16693,16695],{},[6796,16694,8212],{}," Cho 1 ví dụ đánh đổi dùng thêm bộ nhớ để giảm thời gian.",[6974,16697,16698],{"close-text":6976,"name":6977,"open-text":6978},[973,16699,16700,16701,16744,16745,9594,16818,16861,16862,2958],{},"Ghi nhớ kết quả (memo) cho Fibonacci: thêm ",[1000,16702,16704,16723],{"className":16703},[1003],[1000,16705,16707],{"className":16706},[1007],[1009,16708,16709],{"xmlns":1011},[1013,16710,16711,16721],{},[1016,16712,16713,16715,16717,16719],{},[1019,16714,1084],{},[1023,16716,1026],{"stretchy":1025},[1019,16718,1029],{},[1023,16720,1032],{"stretchy":1025},[1034,16722,2784],{"encoding":1036},[1000,16724,16726],{"className":16725,"ariaHidden":1042},[1041],[1000,16727,16729,16732,16735,16738,16741],{"className":16728},[1046],[1000,16730],{"className":16731,"style":1051},[1050],[1000,16733,1084],{"className":16734,"style":1113},[1055,1056],[1000,16736,1026],{"className":16737},[1061],[1000,16739,1029],{"className":16740},[1055,1056],[1000,16742,1032],{"className":16743},[1068]," bộ nhớ, giảm thời gian từ ",[1000,16746,16748,16771],{"className":16747},[1003],[1000,16749,16751],{"className":16750},[1007],[1009,16752,16753],{"xmlns":1011},[1013,16754,16755,16769],{},[1016,16756,16757,16759,16761,16767],{},[1019,16758,1084],{},[1023,16760,1026],{"stretchy":1025},[1324,16762,16763,16765],{},[1320,16764,1330],{},[1019,16766,1029],{},[1023,16768,1032],{"stretchy":1025},[1034,16770,5719],{"encoding":1036},[1000,16772,16774],{"className":16773,"ariaHidden":1042},[1041],[1000,16775,16777,16780,16783,16786,16815],{"className":16776},[1046],[1000,16778],{"className":16779,"style":1051},[1050],[1000,16781,1084],{"className":16782,"style":1113},[1055,1056],[1000,16784,1026],{"className":16785},[1061],[1000,16787,16789,16792],{"className":16788},[1055],[1000,16790,1330],{"className":16791},[1055],[1000,16793,16795],{"className":16794},[1399],[1000,16796,16798],{"className":16797},[1403],[1000,16799,16801],{"className":16800},[1407],[1000,16802,16804],{"className":16803,"style":5753},[1411],[1000,16805,16806,16809],{"style":1415},[1000,16807],{"className":16808,"style":1420},[1419],[1000,16810,16812],{"className":16811},[1424,1425,1426,1427],[1000,16813,1029],{"className":16814},[1055,1056,1427],[1000,16816,1032],{"className":16817},[1068],[1000,16819,16821,16840],{"className":16820},[1003],[1000,16822,16824],{"className":16823},[1007],[1009,16825,16826],{"xmlns":1011},[1013,16827,16828,16838],{},[1016,16829,16830,16832,16834,16836],{},[1019,16831,1084],{},[1023,16833,1026],{"stretchy":1025},[1019,16835,1029],{},[1023,16837,1032],{"stretchy":1025},[1034,16839,2784],{"encoding":1036},[1000,16841,16843],{"className":16842,"ariaHidden":1042},[1041],[1000,16844,16846,16849,16852,16855,16858],{"className":16845},[1046],[1000,16847],{"className":16848,"style":1051},[1050],[1000,16850,1084],{"className":16851,"style":1113},[1055,1056],[1000,16853,1026],{"className":16854},[1061],[1000,16856,1029],{"className":16857},[1055,1056],[1000,16859,1032],{"className":16860},[1068],". Hoặc bảng băm để tra ",[1000,16863,16865,16884],{"className":16864},[1003],[1000,16866,16868],{"className":16867},[1007],[1009,16869,16870],{"xmlns":1011},[1013,16871,16872,16882],{},[1016,16873,16874,16876,16878,16880],{},[1019,16875,1084],{},[1023,16877,1026],{"stretchy":1025},[1320,16879,4017],{},[1023,16881,1032],{"stretchy":1025},[1034,16883,4844],{"encoding":1036},[1000,16885,16887],{"className":16886,"ariaHidden":1042},[1041],[1000,16888,16890,16893,16896,16899,16902],{"className":16889},[1046],[1000,16891],{"className":16892,"style":1051},[1050],[1000,16894,1084],{"className":16895,"style":1113},[1055,1056],[1000,16897,1026],{"className":16898},[1061],[1000,16900,4017],{"className":16901},[1055],[1000,16903,1032],{"className":16904},[1068],[968,16906,8450],{"id":8449},[5504,16908,16909,16912,16915,16918,16921],{},[5507,16910,16911],{},"Giờ đo tốc độ tăng của bước chạy, độc lập phần cứng; nhớ đo bộ nhớ cho đầu vào, cấu trúc tạm và thực thi.",[5507,16913,16914],{},"Ba kịch bản tốt nhất, tệ nhất, trung bình cho ba góc nhìn bổ sung nhau.",[5507,16916,16917],{},"Ba kiểu vòng lặp hội tụ, phân kỳ, phẳng quyết định chiến lược cấp nhớ và hạ tầng.",[5507,16919,16920],{},"Tiết kiệm nhớ bằng lặp mịn, chỉ giữ thứ đang cần, tái dùng mảng cũ.",[5507,16922,16923],{},"Nhanh thường đổi bằng nhớ; thiết kế theo tệ nhất để an toàn, theo trung bình để dự báo.",[10286,16925,10288],{},{"title":9007,"searchDepth":68,"depth":68,"links":16927},[16928,16929,16930,16931,16934,16935,16936,16937,16938,16939],{"id":970,"depth":68,"text":971},{"id":16098,"depth":68,"text":16099},{"id":16123,"depth":68,"text":16124},{"id":16253,"depth":68,"text":16254,"children":16932},[16933],{"id":16278,"depth":73,"text":16279},{"id":16349,"depth":68,"text":16350},{"id":9147,"depth":68,"text":9148},{"id":9166,"depth":68,"text":9167},{"id":9182,"depth":68,"text":9183},{"id":6788,"depth":68,"text":6789},{"id":8449,"depth":68,"text":8450},"Hai trục phân tích độ phức tạp, ba kịch bản best-worst-average, ba kiểu vòng lặp hội tụ-phân kỳ-phẳng và nguyên tắc ước lượng chi phí.",{},{"title":50,"description":16940},[16944,16945,7],"time-complexity","space-complexity","-M0cgv8059TJiPj08sMWMzDmJxu3nXvblY89O66MJGY",1790133038964]