蛮力法(brute force method),也称穷举法,是一种简单而直接地解决问题的方法,常常直接基于问题的描述,因此,也是最容易应用的方法。 蛮力法的设计思想 满立法所依赖的技术是扫描技术,即采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解。依次处理所有元素是蛮力法的关键,为了…
[TOC] 下界 对于任何待求解的问题,如果能找到一个尽可能大的函数g(n)(n为问题规模),使得求解该问题的所有算法都可以在$\Omega(g(n))$的时间内完成,则称函数g(n)为该问题计算复杂性的下界(lower bound)。如果已经知道一个和下界的效率类型相同的算法,则称该下界是紧密(close)的。 平凡下界 …
基础概念 算法定义 算法(algorithm)是解决问题的方法。严格地说,算法是对特定问题求解步骤的一种描述,是指令的有限序列,此外算法还必须满足下列5个重要特性: (1)输入:一个算法有另个或多个输入。算法的输入有两种方式:一种是从外界获得数据,另一种是由算法自己产生并被处理的数据。 (2)输出:一个算法有一个或多个输出。…
Vector 概述 Vector 是一个能够存放任意型别的动态数组 Vector 的数据结构和操作与数组 (array) 类似,在内存中的表现形式是一段地址连续的空间 Vector 与数组的区别在于,数组大小往往是定义时就固定的 (比如:char buffer [256]);Vector 支持动态空间大小调整,随着元素的加入,vector 内部会自…
1. 字符串初始化和基本属性 1.1 C++ 字符串操作介绍 C++ 标准库的 std::string 提供了灵活的字符串初始化方式,包括默认初始化(空字符串)和带初始值的初始化。字符串的基本属性包括是否为空、长度(字符数量)和容量(已分配的存储空间)。size() 和 length() 方法返回字符串的字符数,empty() 方法检查字符串是否为…
一、题目详解 问题描述 给定一个由 '1'(陆地)和 '0'(水)组成的二维网格,计算岛屿的数量。岛屿由相邻的陆地连接形成,相邻指水平方向或垂直方向(斜向相邻的陆地不视为同一岛屿)。网格的边界和边缘均被水包围。 示例 输入: grid = [ ["1","1",&quo…
条款 32:确定你的 public 继承塑模出 is - a 关系。 以C++进行面向对象编程,最重要的一个规则是:public inheritance(公开继承)意味“is-a"(是一种)的关系。 如果你令class D("Derived")以public形式继承class B("Base"),你…
继承作为 C++ 面向对象编程的三大核心支柱之一,为代码复用与功能扩展提供了强大支持。然而,继承体系中的访问控制机制、多态实现逻辑以及不同继承方式的适用场景,始终是开发者理解的难点。本文将系统梳理 public/protected/private 三种继承方式的特性差异,深入剖析虚函数与访问权限的交互规则,详解多重继承的常见陷阱及解决方案,帮助读者…
引言 在面向对象编程体系中,类与类之间的关系构建起程序架构的骨架。本文将以 C++ 语言为实践载体,采用 plantUML 绘制 UML 类图,通过将 plantUML 代码与其渲染图对照展示,结合可视化结果,深度剖析继承(is-a)、聚合 / 组合(has-a)、依赖(dependence)、关联等核心关系模型。同时穿插接口实现机制、重载与重写的…
在 Java 编程领域,反射机制如同赋予开发者一把 “万能钥匙”,能在运行时动态操作类与对象。本文将结合实际代码示例,深入剖析反射的核心概念、操作方法及其在代理模式中的应用,帮助读者全面掌握这一高级特性。 一、反射核心概念与作用 1. 什么是反射? 反射(Reflection)是 Java 的一项强大特性,允许程序在运行时动态获取类的信息(如类的属…