<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Germanknight的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Germanknight</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Germanknight]]></copyright><item><title><![CDATA[PHP自动加载]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/114921439</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/114921439</guid><author>Germanknight</author><pubDate>Fri, 19 Mar 2021 16:22:24 +0800</pubDate><description><![CDATA[本文将介绍PHP自动加载这块基础中的基础，鄙人造化不深，技术浅薄，所写均为个人学习过程与体会的记录。以后通过理论与实践结合，得到更扎实更深入更有含量的收获，鄙人也会及时梳理出来。

回到标题，我们写代码的时候，无论用什么语言，都会涉及到要加载很多原生的或第三方的各种库/包/文件等等，毕竟，我们总需要用到很多别人造好的轮子，这些轮子没有必要自己重复劳动搞一遍（除非是算法笔试题），PHP也不例外。

接下来，咱赶紧进入正文。



手动加载

在讨论自动加载之前，先看看PHP最原始的加载方式：通过includ.]]></description><category></category></item><item><title><![CDATA[PHP命名空间]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/114832755</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/114832755</guid><author>Germanknight</author><pubDate>Tue, 16 Mar 2021 17:38:57 +0800</pubDate><description><![CDATA[简介

为了避免代码中自定义的类、函数、常量等标识符，与PHP内置或第三方库中的已有标识符重名导致冲突，PHP从5.3版本开始支持命名空间，旨在给原本同名的标识符加上命名空间前缀，从而在代码中区分它们。

命名空间实际上是解决上述问题的一种思想和方案，许多高级语言都提供了不同形式的支持。接下来，本文从简入手，介绍PHP命名空间的基础。



定义命名空间

定义命名空间的最简单形式，是在PHP代码开头，通过namespace关键字声明，指定该文件中自定义的类、函数、常量标识符均属于声明的命名空间之下。例如.]]></description><category></category></item><item><title><![CDATA[在C#的Web项目中调用Matlab代码的方法]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/45084631</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/45084631</guid><author>Germanknight</author><pubDate>Fri, 17 Apr 2015 00:34:57 +0800</pubDate><description><![CDATA[为了毕设的图形检索方向的研究，本人需要在信科的师兄师姐们已经完成的C#界面中，调用现在研究的算法的Matlab代码，以便看到实验的效果。前段时间已经拖延了1个多月，一方面因为实习越来越多事情，时间减少了很多；但更重要在于C#调用Matlab的方法真心麻烦，C#的Web项目中进行这个操作貌似会碰到更多细节上的问题。而且总是很不稳定，操作系统、Matlab或VS的版本、遗漏一些文件或步骤都会造成失败！]]></description><category></category></item><item><title><![CDATA[关于precision-recall曲线下降特性的探讨]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/45068535</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/45068535</guid><author>Germanknight</author><pubDate>Thu, 16 Apr 2015 01:13:38 +0800</pubDate><description><![CDATA[本人的毕设由于涉及到检索，需要使用准确率与召回率（precision-recall）指标衡量检索算法的有效性。众所周知，precision-recall曲线通常呈下降趋势，也即使用同一检索方法对不同检索用例进行检索，若检索结果的准确率越高，召回率总会反而越低。本人对这一现象表示好奇，一直想搞明白其中的道理，也在网上查过相关资料。但暂时未发现有人系统地讨论过原因，大多数都是炒冷饭式的描述：两者并无必]]></description><category></category></item><item><title><![CDATA[排序11：计数排序]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/39700633</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/39700633</guid><author>Germanknight</author><pubDate>Tue, 30 Sep 2014 23:10:37 +0800</pubDate><description><![CDATA[这里再介绍一种排序算法，该方法也是不需要进行元素间的bij]]></description><category></category></item><item><title><![CDATA[排序10：基数排序]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/39644693</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/39644693</guid><author>Germanknight</author><pubDate>Sun, 28 Sep 2014 18:06:23 +0800</pubDate><description><![CDATA[基数排序是一种与之前所介绍的排序算法截然不同的排序方法。前面所介绍的排序方法中，都有着共同的一种操作：元素间的比较。而基数排序则不是基于元素间的比较来驱动整个排序过程的，后文将会详细展开介绍。另外，基数排序需要做一些准备工作，以序列中最大者为准，我们需要让其它元素的位数与最大者的位数一致，比它少的则要在数值前补0。这步的目的在于让序列全体元素的位数一致。我们很快会发现，基数排序过程需要操作元素的数]]></description><category></category></item><item><title><![CDATA[排序9：归并排序]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/39641809</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/39641809</guid><author>Germanknight</author><pubDate>Sun, 28 Sep 2014 15:53:02 +0800</pubDate><description><![CDATA[归并排序正如其名，它是通过归并操作来达到排序的目的的，最经典的归并操作当然是2路归并了，任意多路归并实际上也是同理推广而已。因此，归并排序也相应有2路归并排序和任意多路归并排序。简单起见，本文只介绍2路归并排序。另外，本文假定读者已经了解线性表的归并操作，如果读者未接触过归并的知识点，可以先自行了解一下。本人认为归并操作非常基础也非常简单，相信读者完全能很快掌握。
       以序列：49、3]]></description><category></category></item><item><title><![CDATA[排序8：选择排序（堆排序）]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/39578673</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/39578673</guid><author>Germanknight</author><pubDate>Fri, 26 Sep 2014 12:03:17 +0800</pubDate><description><![CDATA[堆排序是选择排序中能对元素个数较多的序列进行相对高效排序的算法。排序过程中，要用到一种叫堆的数据结构，这种堆实际上可看作是完全二叉树的数组实现，只是加多个限制：父结点存储的元素值必须同时不小于两个子结点所存储的元素值（此为大顶堆，用于产生从小到大序列的堆排序。若要求父结点存储的元素值必须同时不大于两个子结点所存储的元素值，便产生小顶堆，此可用于产生从大到小序列的堆排序）。要进行堆排序，首先要对初始]]></description><category></category></item><item><title><![CDATA[排序7：选择排序（简单选择排序）]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/39578435</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/39578435</guid><author>Germanknight</author><pubDate>Fri, 26 Sep 2014 11:41:11 +0800</pubDate><description><![CDATA[选择排序顾名思义，就是从序列中依次选择最小的、次小的、第3小的、……，让这些元素分别作为结果序列的第1个、第2个、第3个、……，或者，从序列中依次选择最大的、次大的、第3大的、……，让这些元素分别作为结果序列的最后、次后、倒数第3个、……。由此达到排序的目的。当然，这种描述只是大体的思想，不同的选择排序会在实现细节上体现出不同的做法。下面，我们先看看简单选择排序。
       以序列：49、3]]></description><category></category></item><item><title><![CDATA[排序6：交换排序（快速排序）]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/39576633</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/39576633</guid><author>Germanknight</author><pubDate>Fri, 26 Sep 2014 09:56:13 +0800</pubDate><description><![CDATA[本文要介绍的快速排序是交换排序的高级算法，同时，它也是C++的STL算法库里头，排序函数所实现的算法。由此可见，快速排序是比较重要而高效的排序方法，对于元素个数比较多的序列而言，可以适时使用该算法进行高效排序。
       以序列：49、38、65、97、76、13、27、49为例。开始时，设置i、j
 分别指向序列的头49、尾49。先随意固定其中一者，并开始平移另一者，此处以先固定
 i]]></description><category></category></item><item><title><![CDATA[排序5：交换排序（冒泡排序）]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/39576155</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/39576155</guid><author>Germanknight</author><pubDate>Fri, 26 Sep 2014 09:38:05 +0800</pubDate><description><![CDATA[插入排序概括起来，就是把序列分为有序与无序两部分，每趟排序从无序部分选取元素，并通过各种手段在有序部分寻找合适的插入位置，把该元素放进该位置，从而达到排序的目的。而接下来介绍的交换排序，则是通过元素间的比较与交换操作来完成排序的。下面让我们看看最简单也是最经典的交换排序——冒泡排序。
       以序列：49、38、65、97、76、13、27、49为例。第1趟排序时，要处理整个序列。从第1个]]></description><category></category></item><item><title><![CDATA[排序4：插入排序（希尔排序）]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/39565455</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/39565455</guid><author>Germanknight</author><pubDate>Fri, 26 Sep 2014 01:29:10 +0800</pubDate><description><![CDATA[从前面的介绍可以看到，一般情况下，对于同一序列的排序，尽管在实际的操作次数上我们进行了不断的改进，但是，仍然无法改变其时间复杂度为O（n2）的事实，因此，当序列元素个数n变得越来越大时，之前所介绍的排序算法在性能上的改进也将显得无力。在插入排序中，有种排序或许能在n比较大的时候，在性能上有较好的表现，这就是接下来要介绍的希尔排序。
       我们知道，直接插入排序的最好情况是序列完全顺序，初]]></description><category></category></item><item><title><![CDATA[排序3：插入排序（2路插入排序）]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/39565387</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/39565387</guid><author>Germanknight</author><pubDate>Fri, 26 Sep 2014 00:56:51 +0800</pubDate><description><![CDATA[折半插入排序的优点在于利用折半查找的思想大大减少排序过程中产生的元素比较次数。然而，确定了元素插入位置后，移动元素次数却丝毫没有比直接插入排序的有所减少。有没有一种办法，不但能减少元素的比较次数，还能减少元素的移动次数呢？答案是肯定的，接下来让我们看看2路插入排序。
         仍以49、38、65、97、76、13、27、49为例，并且假设该序列存放到list数组中。我们需要1个结果数组]]></description><category></category></item><item><title><![CDATA[排序2：插入排序（折半插入排序）]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/39558543</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/39558543</guid><author>Germanknight</author><pubDate>Thu, 25 Sep 2014 21:32:07 +0800</pubDate><description><![CDATA[直接插入排序把原始序列分成两部分，已有序和仍无序部分。每趟排序，从仍无序的部分中选取头个元素，在已有序的部分中寻找插入位置来插入。寻找插入位置的过程显然是个顺序查找的过程。这里，读者或许会提出个问题：已有序部分既然有序了，寻找插入位置实际上是个查找过程，为何不使用折半查找的思想而仍然用顺序查找的思想呢？说的没错，接下来要介绍的折半插入排序正是读者们想看到的。
       继续以序列49、38、]]></description><category></category></item><item><title><![CDATA[排序1：插入排序（直接插入排序）]]></title><link>https://blog.youkuaiyun.com/Germanknight/article/details/39557999</link><guid>https://blog.youkuaiyun.com/Germanknight/article/details/39557999</guid><author>Germanknight</author><pubDate>Thu, 25 Sep 2014 21:08:42 +0800</pubDate><description><![CDATA[本人这两天复习了数据结构与算法，恰好看完了排序部分，觉得挺有趣，想在这里整理整理，跟有兴趣的读者分享分享。我将会对不同的排序算法分别用1篇日志来描述，以尽量做到思路清晰和描述详尽。对每个算法，我将会直接用1个例子来描述算法的基本思想，然后给出实现的代码，这些代码都经过了简单的测试。不过，代码可能还不能完全保证正确性，毕竟还是有待更多测试用例的考验，如果有读者发现代码有问题请及时通过评论提出来或者直]]></description><category></category></item></channel></rss>