博文

目前显示的是 四月, 2024的博文

抽象概念一定要被具象化才能被理解吗?

转载自 https://www.yueyao1982.com/phil_faq/faq_abstraction.html 若侵犯了内容创作者的权益,请联系删除 正文: 恰恰相反,具体的问题一定要抽象化之后才能理解,虽然这乍听起来比较奇怪。我们不妨想一想中学物理中最简单的问题,比如斜面上物体的运动。我们是先把物体和斜面都作了抽象化——物体和斜面都有很多细节,即“象”,而这些“象”被我们忽略了,或者说是抽离了,亦即“抽象”。所以,我们通过牛顿力学来理解机械运动,只是在理解抽象物体的相互关系,比如它们之间的作用,即力,比如它们之间的相对运动:简而言之,我们是在研究一个抽象模型,并试图理解这个模型。我们能做到最好的,就是我们的抽象化很合理,亦即被抽掉的“象”都是次要的;相应的,我们能得到最好的结果就是:模型的预测结果和实际的观测结果之间误差很小,一般来说不能没有误差,除非被观测值的可能性是离散甚至是有限的——比如电子的自旋只有两种可能。即使我们真的把主要因素抽掉,我们仍然可以理解那个被抽象出来的模型,只是那个模型和经验世界已经不能很好的对应了。 稍微深入一些来说,并非所有的抽象概念都能具象化,或者说概念的世界至少从规则和可能性这些方面来讲,并不受制于经验的世界,虽然没有经验概念就无从产生。比如我们观察过很多“经验中的马”,忽略了彼此不同的“象”,比如颜色、大小、公母等因素,就产生了“马的概念”;同样,我们观察过很多“经验世界中的鸟”,忽略了彼此不同的“象”,就产生了“鸟的概念”。“马的概念”和“鸟的概念”都可以被具象化到自然界中真实的动物。然而,我们的思维还可以对概念进行加工,比如我们对“鸟”概念进行切分,得到了“翅膀的概念”(当然它还是可以被具象化的)。然后我们把“翅膀的概念”和“马的概念”进行组合,得到了“天马”的概念——这个概念虽然可以具象化为具体的玩具或模型,但不再能具象化为自然界中的动物了。与此相似,我们还可以进行更复杂的概念建构,比如用更多的翅膀构建出“六翼天使”,比如用多种动物的不同部分构建出了“龙”和“麒麟”等神兽。当然,到此为止,这些概念至少还是可以被在一定程度上具象化,比如画成图画,比如做成雕刻。但是,更进一步的概念建构使这点也不可能了。如果我们把自然数的计数泛化到空间的维度上,我们就构建出了N维空间——1维空间、2维空间和3维空间是可以被具象化的,4维...

leetcode——16.3 sum clsest题解

图片
 题目要求: 给出一个整型数组,寻找其中的3个元素a,b,c使得a+b+c的值最接近另外一个给定的数字target    代码: class Solution { public: int threeSumClosest(vector & nums, int target) { int n = nums.size(); if (n < 3) return 0; // 处理数组长度不足三个的情况 sort(nums.begin(), nums.end()); int closestSum = nums[0] + nums[1] + nums[2]; // 初始化为前三个数的和 int minDiff = abs(closestSum - target); // 记录当前最小差值 for(int i = 0; i < n - 2; i++){ int left = i + 1; int right = n - 1; while(left < right){ int sum = nums[left] + nums[right] + nums[i]; int diff = abs(sum - target); if(diff < minDiff) { // 更新最小差值和最接近目标值的和 minDiff = diff; closestSum = sum; } if(sum < target) left++; // 和小于目标值,左指针右移 else right--; // 和大于目标值,右指针左移 } } return closestSum; } }; 复制 这道题使用了对撞指针...

leetcode——18.4sum题解

图片
 题目要求: 18.4sum     给出一个整型数组,寻找其中所有不同的子数组(a,b,c,d)使得a,b,c,d的和等于一个给定的数target     代码:      class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> result; if (nums.size() < 4) return result; // If there are less than 4 elements, return empty result sort(nums.begin(), nums.end()); int n = nums.size(); for (int i = 0; i < n - 3; ++i) { if (i > 0 && nums[i] == nums[i - 1]) // Skip duplicate elements continue; for (int j = i + 1; j < n - 2; ++j) { if (j > i + 1 && nums[j] == nums[j - 1]) // Skip duplicate elements continue; int left = j + 1; int right = n - 1; while (left < right) { long long sum = (long long)nums[i] + nums[j] + num...

如何在Blogger博客中插入展示代码

在接触Blogger之前我没有想到会接触Html代码,之前也几乎不会Html。所以这个教程完全是从网络上找来的教程并结合gpt完成的 首先,我们需要准备两个代码插入到html中 第一个代码是 <style> pre { font-size: 18px; color: #fff; border-radius: 8px; border: 2px solid #2E2E2E; background-color: #343434; padding: 5px 10px; position: relative; display: block; width: auto; max-height: 500px; font-family: "Lucida Console", Consolas, Monaco; word-break: break-all; overflow: auto; } pre code { overflow: auto; } .line-numbers { position: absolute; left: -40px; /* 调整行号位置 */ top: 0; /* 确保行号垂直居中 */ color: #ff0; /* 行号颜色 */ user-select: none; /* 防止行号被复制 */ } pre code::before { content: "c++ "; position: absolute; left: -2px; /* 调整行号位置 */ ...

记一次算法:leetcode中第15号题(3num)

图片
 题目要求:给出一个整型数组,寻找其中所有不同的三元组(a,b, c)使得a+b+c = 0;     因为刚学了map和set容器,所以还是用map来解决这个问题。     首先我们来看看题目给出的类的代码:      class Solution { public:     vector < vector < int >> threeSum ( vector < int > & nums ) {             } };     要求是输入一个vector<int> 型的元素,返回的是vector<vector<int>> 型的元素。 下面是我写的c++源码 using namespace std; class Solution { public: vector > threeSum(vector & nums) { multimap m; vector > a; for(int i = 0; i < nums.size(); i++){//map自动升序排列 m.insert(pair (nums[i], i)); } vector > vec_2int(m.begin(), m.end()); // sort(vec_2int.begin(), vec_2int.end(), CompareFirst()); int i = 0, j = nums.size() - 1; while(j - i > 2){ int c = -vec_2int[i].first - vec_2int[j].first; if(c >= vec_2int[j].first){ i ++; ...

深度优先搜索&&广度优先搜索

图片
      深度优先搜索(Depth-First Search)和广度优先搜索(Breadth-First Search)都是对图进行搜索的算法,两者都是从起点开始顺着边搜索,直到找到结果为止,区别在于两者的搜索方式略有差别。     深度优先搜索:              暂时先空着,我到目前还不清楚深度优先搜索和广度优先搜索。

初认识算法

图片
算法复杂度     复杂度的概念(时间复杂度): 在 计算机科学 中, 算法 的 时间复杂度 (time complexity)是一个 函数 ,它定性描述该算法的运行时间。这是一个代表算法输入值的 字符串 的长度的函数。时间复杂度常用 大O符号 表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是 渐近 的,亦即考察输入值大小趋近无穷时的情况。例如,如果一个算法对于任何大小为  n  (必须比  n 0  大)的输入,它至多需要  5 n 3  + 3 n  的时间运行完毕,那么它的渐近时间复杂度是 O( n 3 )。 为了计算时间复杂度,我们通常会估计算法的操作单元数量,每个单元执行的时间都是相同的。因此,总运行时间和算法的操作单元数量最多相差一个常量系数。 相同大小的不同输入值仍可能造成算法的执行时间不同,因此我们通常使用算法的 最坏情况复杂度 ,记为  T ( n )  ,定义为任何大小的输入  n  所需的最大执行时间。另一种较少使用的方法是 平均情况复杂度 ,通常有特别指定才会使用。时间复杂度可以用函数  T ( n ) 的自然特性加以分类,举例来说,有着  T ( n ) =  O ( n ) 的算法被称作“线性时间算法”;而  T ( n ) =  O ( M n ) 和  M n = O( T ( n )) ,其中  M  ≥  n  > 1 的算法被称作“指数时间算法”。(摘自Wiki百科)     空间复杂度: 在 计算机科学 中,一个 算法 或 程序 的 空间复杂度 定性地描述该算法或程序运行所需要的存储空间大小。空间复杂度是相应 计算问题 的 输入值 的长度的函数,它表示一个算法完全执行所需要的存储空间大小。 [1] 和 时间复杂度 类似,空间复杂度通常也使用 大O记号 来 渐进 地表示,例如 {\displaystyle O(n)} 、 {\displaystyle O(n\log n)} 、 {\displaystyle O(n^{\alpha })} 、 {\di...