1. 绠楁硶鍒嗘瀽锛氩备綍鍒嗘瀽涓涓绠楁硶镄勬晥鐜囧ソ鍧忥纻
褰撴垜浠璇寸畻娉曞垎鏋愮殑镞跺欐垜浠鍦ㄨ翠粈涔堬纻锛堢嫮涔夌殑鎶链灞傞溃镄勫畾涔夛级锛
绠楁硶鍒嗘瀽鎸囩殑鏄锛 瀵圭畻娉曞湪杩愯屾椂闂村拰瀛桦偍绌洪棿杩欎袱绉嶈祫婧愮殑鍒╃敤鏁堢巼杩涜岀爷绌 銆
鍗虫椂闂存晥鐜囧拰绌洪棿鏁堢巼銆
镞堕棿鏁堢巼鎸囩畻娉曡繍琛屾湁澶氩揩锛
绌洪棿鏁堢巼鎸囩畻娉曡繍琛屾椂闇瑕佸氩皯棰濆栫殑瀛桦偍绌洪棿銆
锛堟椂闂存晥鐜囦篃鍙镞堕棿澶嶆潅搴︼绂绌洪棿鏁堢巼涔熷彨绌洪棿澶嶆潅搴︺傦级
鍦ㄨ$畻链烘椂浠f棭链燂纴镞堕棿鍜岀┖闂磋繖涓ょ嶈祫婧愰兘鏄鍙婂叾鏄傝吹镄勚备絾缁忚繃鍗娄釜澶氢笘绾镄勫彂灞曪纴璁$畻链虹殑阃熷害鍜屽瓨鍌ㄥ归噺閮藉凡缁忔彁鍗囦简濂藉嚑涓鏁伴噺绾с
鐜板湪绌洪棿鏁堢巼宸茬粡涓嶆槸鎴戜滑鍏虫敞镄勯吨镣逛简锛屼絾镞堕棿鏁堢巼镄勯吨瑕佹у苟娌℃湁鍑忓急鍒拌繖绉嶅彲浠ュ拷鐣ョ殑绋嫔害銆
镓浠ワ纴褰撴垜浠鍒嗘瀽涓涓绠楁硶镄勭殑镞跺欙纴鎴戜滑鍙鍏虫敞瀹幂殑镞堕棿鏁堢巼 銆
褰撴垜浠阆囧埌涓涓绠楁硶镞讹纴鎴戜滑鍙浠ョ敤杩欐牱涓涓阃氱敤镄勬濊矾铡诲垎鏋愬畠锛
棣栧厛绗涓姝ヨ冭槛杩欎釜绠楁硶镄勮緭鍏ヨ勬ā鏄浠涔堬纻鍗宠緭鍏ュ弬鏁帮纴鍐嶆崲鍙ヨ瘽璇翠篃灏辨槸寰呰В鍐崇殑闂棰樻湁澶氩ぇ锛
浠庤繖閲屽叆镓嬫槸锲犱负涓涓鏄捐屾槗瑙佺殑瑙勫緥灏辨槸锛屼笉绠′娇鐢ㄤ粈涔堢畻娉曪纴 杈揿叆瑙勬ā瓒婂ぇ锛岃繍琛屾晥鐜囱偗瀹氢细镟撮暱 銆
杈揿叆瑙勬ā镄勭‘瀹氲佹牴鎹鍏蜂綋瑕佽В鍐崇殑瀹为檯闂棰樼殑缁呜妭𨱒ュ喅瀹氾纴鐩稿悓镄勯梾棰树笉钖岀殑缁呜妭锛岃緭鍏ヨ勬ā鏄涓崭竴镙风殑銆傛瘆濡傦细涓涓𨰾煎啓妫镆ョ殑绠楁硶锛
濡傛灉绠楁硶鍏虫敞镄勬槸鍗旷嫭镄勫瓧绗︽镆ワ纴闾d箞瀛楃︾殑鏁伴噺灏辨槸杈揿叆瑙勬ā镄勫ぇ灏忥绂
濡傛灉绠楁硶鍏虫敞镄勬槸璇岖粍鎼閰岖殑妫镆ワ纴闾d箞杩欎釜杈揿叆瑙勬ā灏辫佹瘆鍗旷嫭镄勫瓧绗︽镆ョ殑杈揿叆瑙勬ā瑕佸皬锛岃繖閲岃緭鍏ヨ勬ā灏辨槸璇岖殑鏁伴噺浜嗐
鎺ヤ笅𨱒ョ浜屾ヨ冭槛杩欎釜绠楁硶镄勮繍琛屾椂闂达纴鍗宠繖涓绠楁硶杩愯屽湴蹇鎱銆
鎴戜滑鍙浠ョ亩鍗曞湴鐢ㄨ℃椂镄勬柟娉曪纴鍗虫煇涓绠楁硶杩愯屼简澶氩皯姣绉掋
浣呜繖涓鏂瑰纺链変竴涓缂洪櫡灏辨槸鍦ㄤ笉钖岃$畻链轰笂锛岀浉钖岀畻娉旷殑杩愯屾椂闂存槸涓崭竴镙凤纴锲犱负链夌殑鐢佃剳蹇链夌殑鐢佃剳鎱銆
镓浠ユ湁娌℃湁涓绉嶅害閲忔柟娉曞彲浠ユ帓闄よ繖浜涙棤鍏冲洜绱狅纻
绛旀堟槸镶瀹氱殑锛屾垜浠鍙浠ュ叧娉ㄧ畻娉曟墽琛屼简澶氩皯姝ワ纴鍗 镎崭綔镄勮繍琛屾℃暟 銆傝屼笖涓轰简绠鍖栭梾棰樻垜浠鍙闇鍏虫敞链閲嶈佺殑镎崭綔姝ラわ纴鍗虫墍璋撶殑 锘烘湰镎崭綔 锛屽洜涓哄熀链镎崭綔宸茬粡瓒冲熷彲浠ュ喅瀹氲繖涓绠楁硶镄勫搧璐ㄣ
姣斿备竴涓绠楁硶阃氩父鏄链鍐呭眰镄勫惊鐜涓鏄链璐规椂镄勬搷浣滐纴闾f垜浠灏卞彧闇瑕佹妸瀹冨惊鐜浜嗗氩皯娆′綔涓哄熀链镎崭綔杩涜岀爷绌躲
杩欓噷闇瑕佸欢浼哥殑涓镣规槸鍦ㄥぇ瑙勬ā镄勮緭鍏ユ儏鍐典笅钥冭槛镓ц屾℃暟镄勫为暱娆℃暟銆傚洜涓洪拡瀵瑰皬瑙勬ā镄勮緭鍏ワ纴鍦ㄨ繍琛屾椂闂寸殑宸鍒涓娄笉澶鏄庢樉銆傛瘆濡傚彧瀵100涓鏁板瓧杩涜屾帓搴忥纴涓岖′綘鐢ㄤ粈涔堟帓搴忕畻娉曪纴镞堕棿鏁堢巼閮藉樊涓嶅氥傚彧链夊湪杈揿叆瑙勬ā鍙桦ぇ镄勬椂鍊欙纴绠楁硶镄勫樊寮傛墠鍙桦缑镞㈡槑鏄惧张閲嶈佷简璧锋潵銆
绠鍗曟潵璇达纴
濡傛灉涓涓绠楁硶鍦ㄨ緭鍏ヨ勬ā鍙桦ぇ镞讹纴浣呜繍琛屾椂闂村钩缂揿为暱锛岄偅涔堟垜浠灏卞彲浠ヨ村畠灏辨槸涓涓鏁堢巼楂樼殑绠楁硶锛
钥屽傛灉涓涓绠楁硶鍦ㄨ緭鍏ヨ勬ā鍙桦ぇ镞讹纴瀹幂殑杩愯屾椂闂存垚鎸囨暟绾у为暱锛岄偅灏卞彲浠ヨ磋繖涓绠楁硶镄勬晥鐜囧緢宸銆
镐昏岃█涔嫔氨鏄锛屽瑰熀链镎崭綔镄勫ぇ瑙勬ā杈揿叆𨱍呭喌涓嬬殑鍙桦寲镄勭爷绌舵墠镟村叿链夋繁杩沧剰涔夈
褰撴垜浠浜呜В浜呜緭鍏ヨ勬ā瀵圭畻娉曟椂闂存晥鐜囩殑浼氢骇鐢熷奖鍝嶏纴浣嗙畻娉旷殑镓ц屾晥鐜囧嵈涓崭粎浠呭彧鍙楄緭鍏ヨ勬ā镄勫奖鍝嶏纴镆愪簺𨱍呭喌涓嬶纴绠楁硶镄勬墽琛屾晥鐜囨洿鍙栧喅浜庤緭鍏ュ弬鏁扮殑缁呜妭銆
姣斿傦细涓涓绠鍗旷殑椤哄簭镆ユ垒镄勭畻娉曪纴鍦ㄦ暟缁勯噷镆ユ垒鏁板瓧 9锛
鍦ㄦ暟缁 l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9 ] 閲屾煡镓炬暟瀛 9 鍜屽湪鐩稿悓镄勮緭鍏ヨ勬ā镄勫彟涓涓鏁扮粍 l2 = [ 9 , 1, 2, 3, 4, 5, 6, 7, 8]閲屾煡镓炬暟瀛 9锛屽湪鏁扮粍 l2 镄勬墽琛屾晥鐜囱偗瀹氭洿楂樸
涓婇溃灏忎緥瀛愪腑镄勪袱涓鏁扮粍灏变綋鐜颁简涓や釜鏋佺锛 杈揿叆链浼樻儏鍐 鍜 杈揿叆链鍧忔儏鍐 銆
鐩稿瑰簲镄勶纴
鍦ㄨ緭鍏ユ渶浼樻儏鍐典笅镄勭畻娉曞氨鍙 链浼樻晥鐜 锛
鍦ㄨ緭鍏ユ渶鍧忔儏鍐典笅镄勭畻娉曞氨鍙 链宸鏁堢巼 锛
鍦ㄨ繖閲屾湁涓や釜缁忛獙镐х殑瑙勫垯锛
鍦ㄧ幇瀹炴儏鍐典笅锛岃緭鍏ユ槸钬滈殢链衡濈殑锛屾棦涓崭细鏄链浼樿緭鍏ヤ篃涓崭细鏄链鍧忚緭鍏ャ傛墍浠ヨ繖閲屽张瑕佸紩鍑轰竴涓姒傚康锛屽嵆锛 骞冲潎鏁堢巼 銆
棣栧厛鎸囧嚭锛屾垜浠缁濅笉鑳界敤钬沧渶浼樻晥鐜団濆拰钬沧渶宸鏁堢巼钬濈殑骞冲潎鏁版眰寰 骞冲潎鏁堢巼 锛屽嵆渚挎湁镞堕棿杩欎釜骞冲潎鏁板拰鐪熸g殑 骞冲潎鏁堢巼 宸у悎鍦颁竴镊淬
姝g‘镄勬ラゆ槸锛氭垜浠瑕佸硅緭鍏ヨ勬ā n 锅氢竴浜涘亣璁俱
瀵逛簬涓婇溃镄勯‘搴忔煡镓剧畻娉旷殑渚嫔瓙锛屾爣鍑嗙殑锅囱炬湁涓や釜锛
锘轰簬杩欎袱涓锅囱炬眰骞冲潎鏁堢巼鍙寰楋细
鐢辨わ纴骞冲潎鏁堢巼 C(n) = p(n+1) / 2 + n(1-p)
鐢辨ゅ彲鐭ワ纴
浠庤繖涓渚嫔瓙鍙浠ュ彂鐜帮纴骞冲潎鏁堢巼镄勭爷绌惰佹瘆链宸鏁堢巼鍜屾渶浼樻晥鐜囩殑镰旂┒锲伴毦寰埚氾细
鎴戜滑瑕佸皢杈揿叆瑙勬ā n 鍒掑垎涓哄嚑绉岖被鍨嬶纴瀵逛簬钖岀被鍨嬬殑杈揿叆锛屼娇寰楃畻娉旷殑镓ц屾℃暟鏄鐩稿悓镄勚
绠楁硶鏄璁$畻链虹戝︾殑锘虹锛屼互钖庝细缁х画镟存柊绠楁硶鐩稿叧镄勯殢绗旓纴瀵圭畻娉曟劅鍏磋叮镄勬湅鍙嬫㈣繋鍏虫敞链鍗氩锛屼篃娆㈣繋澶у剁暀瑷璁ㄨ恒
鎴戜滑姝e勪簬澶ф暟鎹镞朵唬锛屽规暟鎹澶勭悊镒熷叴瓒g殑链嫔弸娆㈣繋镆ョ湅鍙︿竴涓绯诲垪闅忕玛锛
鍒╃敤Python杩涜屾暟鎹鍒嗘瀽 锘虹绯诲垪闅忕玛姹囨
Introction to The Design and Analysis of Algorithms, Third Edition by Anany Leitin
2. 什么是最好、最坏、平均、均摊时间复杂度
在算法分析中,探讨“最好、最坏、平均、均摊时间复杂度”对于理解算法性能至关重要。
“最好时间复杂度”描述的是算法在最理想情况下运行的时间复杂度。在所有输入中,算法的执行所需时间达到最短。
“最坏时间复杂度”指的是算法在最差情况下的运行时间复杂度。在所有输入中,算法执行所需时间达到最长。
“平均时间复杂度”则是针对所有可能输入情况,算法执行的平均时间复杂度。
“均摊时间复杂度”关注的是在一系列操作中,大部分情况下操作的时间复杂度相对较低,但存在少数情况操作复杂度较高。均摊时间复杂度衡量的就是这一情况下的时间复杂度。
“最好、最坏、平均时间复杂度”通常针对同一算法在不同情况下的性能表现,而“均摊时间复杂度”则针对特定操作序列。因此,一个算法的“最好、最坏、平均时间复杂度”是固定的,而“均摊时间复杂度”取决于具体的操作流程。
3. 算法的通俗解释(2)算法的评估方法
算法评估方法
算法本质上是统计,预测数据贴近实际情况。残差是实际数据与理论数据的差值,以96分为例,满分100分与预测的96分差值为4分。
算法学习过程类似于人的学习,分为训练集和测试集。训练集用于训练算法,测试集用于检验结果,避免使用相同数据进行学习与检验。
算法学习中存在欠拟合和过拟合。欠拟合指预测数据与实际数据偏离较远,过拟合指算法过于复杂,难以适应新数据与场景。减少过拟合方法包括简化模型假设,减少参数。
准确率和召回率是评价算法性能的指标。准确率衡量预测为正类的样本中真正为正类的比例,召回率衡量真正为正类的样本中被正确预测为正类的比例。F值为调和平均数,平衡准确率与召回率。
完美基线指标用于评估算法性能。例如nDCG指标,根据实际与理想排序进行评估,计算理想与实际排序分数的比值。构建完美基线需要根据业务实际情况。
覆盖率、多样性和更新率是算法的其他评估指标。覆盖率衡量内容覆盖程度,多样性衡量用户体验和流量生态,更新率衡量内容更新频率对用户体验的影响。
算法解释性对于算法项目推进至关重要。解释性取决于使用算法的人群。对于管理层和技术背景的人,算法解释性可不那么强,但需要能够解释清楚算法的评估方法,以提高算法的接受度。
算法评估方法在实践中需根据业务目标构造合适指标。与非算法部门沟通时,应解释清楚算法评估方法,提高算法的接受度。