有效的算法设计

有效的算法设计

贪心法。Dijkstra的最短路径(时间复杂度O(n2));Prim求最小生成树邻接表存储时是O(n+e),图O(n2);关键路径及关键活动的求法。

回溯法

分支限界法

分治法。分割、求解、合并。二分查找、归并排序、快速排序。

动态规划。Floyd-Warshall算法求解图中所有点对之间最短路径时间复杂度为O(n3)

动态规划解题的方法是一种高效率的方法,其时间复杂度通常为O(n2),O(n3)等,可以解决相当大的信息量。(数塔在n<=100层时,可以在很短的时间内得到问题解)

适用的原则:原则为优化原则,即整体优化可以分解为若干个局部优化。

动态规划比穷举法具有较少的计算次数

递归算法需要很大的栈空间,而动态规划不需要栈空间

贪心和动态规划的差别:

所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。

在动态规划算法中,每步所作的选择往往依赖于相关子问题的解。因而只有在解出相关子问题后,才能作出选择。而在贪心算法中,仅在当前状态下作出最好选择,即局部最优选择。然后再去解作出这个选择后产生的相应的子问题。

贪心算法所作的贪心选择可以依赖于以往所作过的选择,但决不依赖于将来所作的选择,也不依赖于子问题的解。正是由于这种差别,动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为一个规模更小的子问题。

P问题

P问题,如果它可以通过运行多项式次(即运行时间至多是输入量大小的多项式函数的一种算法获得解决),可以找到一个能在多项式的时间里解决它的算法。—-确定性问题

NP问题,虽然可以用计算机求解,但是对于任意常数k,它们不能在O(nk)时间内得到解答,可以在多项式的时间里验证一个解的问题。所有的P类问题都是NP问题。

NP完全问题,知道有效的非确定性算法,但是不知道是否存在有效的确定性算法,同时,不能证明这些问题中的任何一个不存在有效的确定性算法。这类问题称为NP完全问题。

  • 澶у鍏绋嬪簭鍛樺疄鐢绠楁硶鎺ㄨ崘
    绛旓細鍫嗘帓搴(Heapsort)鏄寚鍒╃敤鍫嗚繖绉嶆暟鎹粨鏋勬墍璁捐鐨勪竴绉嶆帓搴绠楁硶銆傚爢绉槸涓涓繎浼煎畬鍏ㄤ簩鍙夋爲鐨勭粨鏋,骞跺悓鏃舵弧瓒冲爢绉殑鎬ц川:鍗冲瓙缁撶偣鐨勯敭鍊兼垨绱㈠紩鎬绘槸灏忎簬(鎴栬呭ぇ浜)瀹冪殑鐖惰妭鐐广 鍫嗘帓搴忕殑骞冲潎鏃堕棿澶嶆潅搴︿负O(nlogn) 绠楁硶涓: 褰掑苟鎺掑簭 褰掑苟鎺掑簭(Merge sort,鍙版咕璇戜綔:鍚堝苟鎺掑簭)鏄缓绔嬪湪褰掓尽浣滀笂鐨勪竴绉鏈夋晥鐨鎺掑簭绠楁硶...
  • 濡備綍璁捐鏉冮噸绠楁硶?
    绛旓細鍩烘湰鏉冮噸璁$畻鏂规硶 鏉冮噸绠楁硶鐨勫熀鐭冲寘鎷珼elphi娉曪紙涓撳鎵撳垎娉曪級鍜孉HP娉曪紙灞傛鍒嗘瀽娉曪級銆傜劧鑰岋紝瀹為檯搴旂敤涓紝杩欎袱鑰呭線寰缁撳悎浣跨敤锛岄氳繃yaahp杞欢涓殑缇ゅ喅绛栧姛鑳斤紝鑳藉鏈夋晥鍦版暣鍚堝拰璁$畻鏉冮噸銆傝繖涓伐鍏峰皢娴佺▼绠鍖栦负鍑犱釜鍏抽敭姝ラ锛氬眰娆℃ā鍨嬫瀯寤猴細鏄庣‘鍐崇瓥鐩爣锛屽垝鍒嗕腑闂村眰瑕佺礌锛屼互鍙婅瘎浼板閫夋柟妗堛侫HP璋冩煡琛ㄨ瀹氾細璁捐...
  • 璁捐涓涓ソ鐨勭畻娉閫氬父瑕佽冭檻鍝簺瑕佹眰
    绛旓細鏁版嵁缁撴瀯涓瘎浠蜂竴涓ソ鐨勭畻娉锛屽簲璇ヤ粠鍥涗釜涓柟闈㈡潵鑰冭檻锛屽垎鍒槸锛氫竴銆佺畻娉曠殑姝g‘鎬с備簩銆佺畻娉曠殑鏄撹鎬с備笁銆佹槸绠楁硶鐨勫仴澹с傚洓銆佹槸绠楁硶鐨勬椂绌烘晥鐜囷紙杩愯锛夈绠楁硶鐨勮璁鍙栧喅浜庢暟鎹紙閫昏緫锛夌粨鏋勶紝绠楁硶鐨勫疄鐜板彇鍐充簬鎵閲囩敤鐨勫瓨鍌ㄧ粨鏋勩傛暟鎹殑瀛樺偍缁撴瀯鏈川涓婃槸鍏堕昏緫缁撴瀯鍦ㄨ绠楁満瀛樺偍鍣ㄤ腑鐨勫疄鐜般備负浜嗗叏闈㈠弽鏄...
  • 绠楁硶璁捐涓庡垎鏋愮殑閲嶈鎬
    绛旓細绠楁硶璁捐涓庡垎鏋愬湪璁$畻鏈虹瀛︿腑鏋佸叾閲嶈锛屽洜涓哄畠鏄В鍐抽棶棰樺拰浼樺寲璁$畻鏈虹▼搴忔ц兘鐨勫熀纭銆傝缁嗘潵璇达紝绠楁硶璁捐鏄绠楁満绉戝鐨勬牳蹇冿紝瀹冩秹鍙婂埌濡備綍绯荤粺鍦般鏈夋晥鍦拌В鍐抽棶棰樻垨瀹屾垚浠诲姟銆備竴涓紭绉鐨勭畻娉涓嶄粎鍙互鑺傜渷璁$畻璧勬簮锛屽鍐呭瓨鍜屾椂闂达紝杩樿兘淇濊瘉瑙e喅鏂规鐨勫噯纭у拰鍙潬鎬с傚湪杞欢寮鍙戜腑锛屾垜浠粡甯搁潰涓村悇绉嶅鏉傜殑闂...
  • 鎬庝箞璁捐涓涓鏈夋晥鐨勭畻娉?
    绛旓細鏈潵宸茬粡鎺掑ソ搴忕殑鐩存帴鐢ㄤ簩鍒嗗氨鍙互杈惧埌鏈鍧忔儏鍐典笅鐨勮绠楁椂闂翠负O(logn)鐨勮姹備簡 锛屽叿浣撳垎鏋愬涓嬶細int search(int *T, int start, int end){ if (start > end)return -1;if (T[start] == start)return start;if (T[end] == end)return end;int mid = (start + end) / 2;if (T[...
  • 璁捐绠楁硶鐨勫師鍒
    绛旓細璁捐绠楁硶鐨勫師鍒欙細1銆佹纭э細绠楁硶鐨勬纭ф槸鎸囩畻娉曡嚦灏戝簲璇ュ叿鏈夎緭鍏ャ佽緭鍑哄拰鍔犲伐澶勭悊鏃犳涔夋с佽兘姝g‘鍙嶆槧闂鐨勯渶瑕併佽兘澶熷緱鍒伴棶棰樼殑姝g‘绛旀銆2銆佸彲璇绘э細璁捐绠楁硶鐨勭洰鐨勶紝涓鏂归潰鏄负浜嗚璁$畻鏈烘墽琛岋紝浣嗚繕鏈変竴涓噸瑕佺殑鐩殑灏辨槸涓轰簡渚夸簬浠栦汉鐨勯槄璇伙紝璁╀汉鐞嗚В鍜屼氦娴侊紝鑷繁灏嗘潵涔熷彲闃呰銆傚鏋滃彲璇绘т笉濂斤紝鏃堕棿...
  • 鐢ㄥ垎鏀檺鐣屾硶璁捐绠楁硶鐨勬楠
    绛旓細鐢ㄥ垎鏀檺鐣屾硶璁捐绠楁硶鐨勬楠ゅ涓嬶細1. 瀹氫箟闂鍜岀洰鏍囷細闂鎻忚堪锛 纭畾闂鐨勮緭鍏ャ佺害鏉熸潯浠跺拰鐩爣鍑芥暟锛屼緥濡傝儗鍖呴棶棰樹腑鐨勭墿鍝侀噸閲忋佷环鍊煎拰鑳屽寘瀹归噺銆備紭鍖栫洰鏍囷細 纭畾闇瑕佷紭鍖栫殑鐩爣锛屼緥濡傛渶澶у寲浠峰笺佹渶灏忓寲鎴愭湰绛夈2. 鍒涘缓鍒濆鑺傜偣鍜岀晫闄愶細鍒濆鑺傜偣锛 鍒涘缓涓涓垵濮嬭妭鐐逛綔涓烘悳绱㈢殑璧风偣銆傝繖涓妭鐐瑰寘鍚簡...
  • 绠楁硶璁捐鍖呮嫭鏁版嵁缁撴瀯璁捐鍜屼粈涔堣璁
    绛旓細绠楁硶宸ョ▼甯堥渶瑕佹帉鎻′互涓嬫妧鑳斤細1銆佺畻娉曞垎鏋愬拰璁捐鑳藉姏锛氱畻娉曞伐绋嬪笀闇瑕佽兘澶熷垎鏋愰棶棰橈紝璁捐鏈夋晥鐨勭畻娉锛屽苟鑳藉瀵圭畻娉曠殑鎬ц兘杩涜鍒嗘瀽鍜屼紭鍖栥2銆佹暟鎹粨鏋勫拰鏁版嵁搴撶煡璇嗭細鏁版嵁缁撴瀯鍜屾暟鎹簱鏄畻娉曞伐绋嬪笀鐨勫繀澶囧熀纭鐭ヨ瘑锛岃兘澶熸湁鏁堝湴澶勭悊鏁版嵁缁撴瀯鍜屾暟鎹簱鐩稿叧鐨勭畻娉曢棶棰樸3銆佹矡閫氳兘鍔涳細绠楁硶宸ョ▼甯堥渶瑕佷笌鍥㈤槦鎴愬憳銆佸鎴峰拰...
  • 绠楁硶璁捐鐨勫熀纭鏄粈涔堟剰鎬
    绛旓細闄や簡鍩虹鐭ヨ瘑鍜屾暟鎹粨鏋勫锛鏈夋晥鐨勭畻娉曡璁杩橀渶瑕侀潰鍚戦棶棰樼殑鎬濊冨拰浼樺寲銆備笉鍚岀殑闂闇瑕佷笉鍚岀殑绠楁硶鏉ヨВ鍐筹紝鑰岀畻娉曠殑鏁堢巼鍜屼紭鍖栫▼搴︿篃浼氬奖鍝嶆渶缁堢殑鎵ц鏁堟灉銆傚洜姝わ紝鍦ㄧ畻娉曡璁¤繃绋嬩腑锛屾垜浠渶瑕佹繁鍏ュ垎鏋愰棶棰樼殑鐗规у拰闅剧偣锛屽鎵炬渶浣崇殑瑙e喅鏂规锛屽苟閫氳繃涓嶆柇鐨勫疄楠屽拰浼樺寲鏉ユ彁楂樼畻娉曠殑鏁堢巼鍜岀ǔ瀹氭с
  • 绠楁硶璁捐涓庡垎鏋:C++璇█鎻忚堪鐩綍
    绛旓細绗簩閮ㄥ垎锛屾垜浠皢杞悜绠楁硶璁捐绛栫暐锛氱鍥涚珷锛屾兜鐩栧熀鏈殑鎼滅储鍜岄亶鍘嗘柟娉曪紝濡傚箍搴︿紭鍏堟悳绱㈠拰娣卞害浼樺厛鎼滅储銆傜浜旂珷锛屾帰璁ㄥ垎娌绘硶锛岃繖鏄竴绉嶅皢澶嶆潅闂鍒嗚В涓烘洿灏忛儴鍒嗙殑绛栫暐銆傚悗缁珷鑺備緷娆¤瑙h椽蹇冩硶锛堢鍏珷锛夈佸姩鎬佽鍒掞紙绗竷绔狅級銆佸洖婧硶锛堢鍏珷锛夊拰鍒嗘灊闄愮晫娉曪紙绗節绔狅級锛岃繖浜涢兘鏄璁¢珮鏁绠楁硶鐨勬湁鏁...
  • 扩展阅读:免费平面设计 ... 算法设计一般步骤 ... 房屋设计一般多少钱 ... 有创意的表格设计 ... 房屋3d效果图设计软件 ... 算法设计的两个步骤 ... 算法如何设计 ... 平面设计图 ... 算法设计怎么写 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网