python里面啥是贪婪?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python里面啥是贪婪?相关的知识,希望对你有一定的参考价值。

Python里面的贪婪算法(又称贪心算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,/不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

基本思路

思想

贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,他的选取应该满足局部优化的条件。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止 。贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

基本思路

思想

贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,他的选取应该满足局部优化的条件。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止 。贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

基本思路

思想

贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,他的选取应该满足局部优化的条件。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止 。

参考技术A

题主你好,

 你说的应该是python中正则表达式里的贪婪匹配, 存在这种叫法是因为加号,问号,星号等符号它们通常表示的并不是字面意思.

拿加号来说,  +号在正则里表示匹配它前面那个字符一次或多次:

-----例子-----

a+ 即可以匹配aa, 也可以匹配aaaaa...无数个a //从这个例子理解一下+号可以匹配前面字符一次或多次

-----

正是因为有像加号这样的可以用来动态匹配的字符存在于正则中, 才引出了贪婪匹配和非贪婪匹配的概念.

所以最终在面对一道题目时,如给你一个正则a+,然后再给你一个字符串aaaa,让你找出正则a+的贪婪匹配和非贪婪匹配结果分别是多少时, 根据+号的定义找到它的两个极限, 1到尽可能多, 所以在本例中非贪婪匹配+号匹配的就是1个a, 而贪婪匹配+号匹配的就是3个a.

=====

写在最后: 上面只是用+号来引出贪婪匹配与非贪婪匹配, 可能你现在去用我上面说的a+去匹配aaaa这个例子去看是理解了, 但正则这个东西有的时候确实需要题主多练几道题, 然后去思考一下.我在学的时候也是, 某些情况怎么也转不过来弯. 自己根据实际结果使用相应的概念去套一下看看能不能理解, 如果实在不能理解就去网上找相关的话题, 不同的人描述时举的例子以及思路不同, 可能某个人说的就对你路了.

希望可以帮到题主, 欢迎追问.


python基础:re模块匹配时贪婪和非贪婪模式

python贪婪和非贪婪

  正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪则相反,总是尝试匹配尽可能少的字符。在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。
 
>>> s="This is a number 234-235-22-423"
>>> r=re.match(".+(d+-d+-d+-d+)",s)
>>> r.group(1)
‘4-235-22-423‘
>>> r=re.match(".+?(d+-d+-d+-d+)",s)
>>> r.group(1)
‘234-235-22-423‘
>>>

  

 正则表达式模式中使用到通配字,那它在从左到右的顺序求值时,会尽量“抓取”满足匹配最长字符串,在我们上面的例子里面,“.+”会从字符 串的启始处抓取满足模式的最长字符,其中包括我们想得到的第一个整型字段的中的大部分,“d+”只需一位字符就可以匹配,所以它匹配了数字“4”,而“.+”则匹配了从字符串起始到这个第一位数字4之前的所有字符。
  解决方式:非贪婪操作符“?”,这个操作符可以用在"*","+","?"的后面,要求正则匹配的越少越好。
 
  下面这个例子仔细体会下
 
>>> re.match(r"aa(d+)","aa2343ddd").group(1)
‘2343‘
>>> re.match(r"aa(d+?)","aa2343ddd").group(1)
‘2‘
>>> re.match(r"aa(d+)ddd","aa2343ddd").group(1) 
‘2343‘
>>> re.match(r"aa(d+?)ddd","aa2343ddd").group(1)
‘2343‘
>>>

  

以上是关于python里面啥是贪婪?的主要内容,如果未能解决你的问题,请参考以下文章

python贪婪和非贪婪

python基础:re模块匹配时贪婪和非贪婪模式

python基础:re模块匹配时贪婪和非贪婪模式

python正则表达式贪婪与非贪婪模式

Python连载50-贪婪匹配XPath介绍

python 正则贪婪模式和非贪婪模式