All posts by dotte

借钱打欠条时,应该注意哪些问题?

温州这边民间借贷诉讼多发,主要教训有:
1、一定要签书面合同!很多老板几十万几百万借出去,字据都不打一个,就因为对方是熟人,最后…..

2、有无利息,利息多少,一定要用百分比写清楚,没签书面合同的就算了,很多人签了书面协议也是“一分”“两分”说惯了,这个究竟是月利还是年利?很多时候就在法官的一念之间。
3、交付方式,现金还是转账,如果是大额的现金借款,请一定要通过银行、支付宝转账等方式交付,并留下书面材料,实在不行就把那一堆钱拍个照吧!我知道很多老板一口气借出去几十万都是给的现金,但是很多法官听说借出去50万付的是现金后,一脸“你骗我吧”的表情,最后不予认可,我也是替你们捉急啊!很多时候是通过第三人付款,这个时候一定要说清楚是通过哪个人支付这笔款项,总之一切欠款的动向都要用书面的形式固定下来。
3、有无担保,人保还是物保,质押还是抵押,如果是质押一定要把东西拿到手或者去办理质押登记,如果是抵押一定要去办理抵押登记,而且一定要注意抵押顺位。温州这边银行通常是有抵押且登记了,但民间借贷通常没有抵押,或者只是纸上写写,没有登记,最后企业破产的时候就坑爹了。至于保证人这个东西一定要小心,温州企业形成“互保链”,一死死一片,一定要了解一下这个保证人是什么情况,从事什么职业,住在哪里,有没有帮其他人做保证,等等。
4、还款日期,还款方式,同样的,建议通过银行转账的方式还款。
提供借款范本三份:
1、
一万元以下请用这个
————————借条本人张三(身份证号:320XXXXXXXX)今收到李四(身份证号:310XXXXXXXX)出借款项人民币XXXX元(大写:XXXX元),本人保证于2016年1月1日归还,立此为据。

借款人:张三(手写)

出借人:李四(手写)

XX年XX月XX日

2、

几万块钱用这个:

—————————

借条

本人张三(身份证号:320XXXXXXXX)为做生意(也可以是买房,买车什么的)之故,今收到李四(身份证号:310XXXXXXXX0808)以现金出借的人民币5万元整(大写:伍万元整),月利率1%(佰分之壹),本人承诺贰零壹伍年拾贰月壹日到期时本息一并还清。如到期未还清,愿按月利率2%(佰分之贰)计付逾期利息。如本人到期无法偿还,王五(身份证号:310XXXXXXXX)愿意代为偿还。立此为据。

借款人:张三(手写签名,摁手印)

出借人:李四(手写签名,摁手印)

保证人:王五(手写签名,摁手印)

XX年XX月XX日

3、

十万元以上,尤其是百万元以上强烈建议用这个

—————————

借款合同

甲方:张三,现住上海市徐汇区XX路XX弄XX室,身份证号:310XXXXXXXX,联系方式:150XXXXXXXX

乙方:李四,现住上海市普陀区XX路XX弄XX室,身份证号:310XXXXXXXX,联系方式:150XXXXXXXX

丙方:王五,现住上海市杨浦区XX路XX弄XX室,身份证号:310XXXXXXXX,联系方式:150XXXXXXXX

1、甲方因资金周转需要,向乙方借款人民币50万元整(大写:伍拾万元整),月利率2%(佰分之贰),借款期2年。

2、甲方今已收到乙方出借款项:

(1)2015年9月15日收到以现金方式交付的人民币10万元整(大写:人民币拾万元整);

(2)2015年9月16日收到以银行转账方式交付的人民币40万元整(大写:人民币肆拾万元整,甲方账号:XXXXXXXXXXXXX,乙方账号:XXXXXXXXXXXXX)。

3、甲方承诺将于2017年9月20日一次性将还款打到乙方账户(账号:XXXXXXXXXXXXX),如甲方到期未还款,甲方以3%(佰分之叁)的月利率支付逾期利息。

4、如甲方到期未还款,丙方愿作为连带保证人代为清偿。

5、甲方有汽车一辆(牌照:沪AXXXXXX),从2015年9月20日起交由由乙方保管,如甲方到期未还款,乙方有权将该汽车交由XX拍卖行拍卖,以所得价款充抵甲方应付本息。

6、如有纠纷,各方应本着友好互利的精神协商,协商不成的,应当向徐汇区(或者杨浦区,但必须只能填写明确的一个,如果写多个就无效了!)法院提起诉讼解决争议。

甲方:张三(手写签名,摁手印)

乙方:李四(手写签名,摁手印)

丙方:王五(手写签名,摁手印)

PS:

1、抵押合同需要另外签订,在公证处办理公证后,到相应部门办理抵押登记。

2、对借款合同的安全性有较高要求的,请询问当地公证处是否支持办理“强制执行公证”业务,如支持可以去办一个,比如杭州地区许多民间借贷公司在借款的时候都要去钱塘公证处办,无需起诉,直接执行,屌得飞起。

3、现行法律对于超过36%的年利率不予保护,对于24%~36%之间的利息不支持,如果实际利率很高,比较常见的就是采用虚构本金的方式,但是银行转账又体现不了,so….(请参考@周昱江的评论,但也适可而止,有风险)

4、强制执行公证的公证费只有诉讼费的一半,但是很多人抱有侥幸心理,觉得“我这个肯定没问题”,或者“万一发生纠纷再起诉好了”,所以全国来看选择公证的人还是少数,现在我了解到的只有杭州地区做的比较好,同时强制执行的效率的确取决于法院执行局,但起码把打官司的时间省下来,这里就差了起码一年的时间呢!

from:https://www.zhihu.com/question/19773323

法律常识

知乎法律常识

1、普通人应该知道哪些法律常识?

  • 法律没有禁止的就是允许的行为。
  • 在证明一个人有罪之前,这个人就是无辜的。
  • 说某个人有罪是刑法上的说法,说某个人对某件事情承担法律责任则往往指民事责任。
  • 宪法是用来约束政府的,即约束政府不能践踏个人的基本权利,没有公民要遵守宪法一说
  • 贡献一条很实际也很重要的:任何时候签合同之前都要先仔细看清合同。合同一旦签字,就具有法律效力,“签字的时候没看合同”在任何情况下不能作为抗辩的理由。
  • 要在一切你觉得可能出问题的时候保留证据,太重要了。
  • 记得有诉讼时效这东西,大部分是两年,两年后不受法律保护。记得及时维权

作者:Raymond Wang
链接:https://www.zhihu.com/question/19844498/answer/13138020
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

梁慧星 关于我国民事法律制度的几个问题npc.gov.cn/npc/xinwen/1

王保树 中国的商事法律制度npc.gov.cn/npc/xinwen/1

王胜明 我国的侵权责任法律制度npc.gov.cn/npc/xinwen/2

王胜明 我国的物权法律制度 npc.gov.cn/npc/xinwen/2

刘剑文 我国的税收法律制度npc.gov.cn/npc/xinwen/2

郑成思 知识产权法律制度npc.gov.cn/npc/xinwen/2

林嘉 我国的劳动法律制度 npc.gov.cn/npc/xinwen/2

胡康生 我国的婚姻家庭法律制度npc.gov.cn/npc/xinwen/2

2、一个普通人突然遭遇法律问题时,他应该如何做才不至于很被动?

一、“当事实对你有利时,多强调事实”——你需要一个“发现事实的人”

二、“当法律对你有利时,多强调法律”——你需要一个“解释法律的人”

三、“当事实和法律都对你不利时,敲桌子把事情搅浑”——你需要一个“会敲桌子的人”

作者:Sisley
链接:https://www.zhihu.com/question/20398031/answer/15916533
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

怎么做才不至于被动,更多的争取自己应有的权利,我觉得大致可以这么做:
1、带着问题直接到法院进行咨询,弄清楚遇到的问题性质、请哪方面的律师、立案程序、在哪儿立案
一线城市的法院一般会提供法律咨询(二三线的我不知道有没有,其他人可以帮忙补充)。这种咨询的好处是:(1)他们可以清晰的帮你分析遇到的问题属于什么性质,比如民事、经济纠纷、劳动纠纷或者刑事;(2)哪些是立案必须的证据,你有没有掌握;简单的告诉你问题中关键因素的利害关系;(3)如果需要立案,走哪些程序(比如劳动纠纷,需要先走仲裁程序,然后才是立案);(4)如果立案,需要请的律师应该是哪个领域的律师;(5)以及需要在哪儿立案(哪个市的哪个区),因为立案会涉及到事发地的属地原则(大概是这个意思,说错了的话,请帮我纠正)。
2、法院咨询结束后,开始律师咨询(咨询是不收费的),多咨询几家,然后决定请什么样的律师
一般情况下,法院附近有很多律师事务所。事务所的宣传介绍上面会有主要从事的业务领域。选择与你遇到的问题同一类型的律所,进去进行咨询。如果不知道咨询时问什么,就把自己的问题简单如实的介绍一下,然后听律师怎么说,并如实回答律师的提问。
我的原则是:对律师说的内容一定要真实,不一定要深入,但是要真实,哪怕是对你不利的诉讼材料。这样有助于律师帮你分析,官司值不值得打,胜诉的可能性有多大。不用担心对律师说出真相——这是律师的价值体现。
咨询完一家律所的律师还不够,再咨询第二家、第三家。咨询的方法是:带着第一家律师的问题,再问第二家的律师、带着第一、二家律师的问题再问第三家,要不耻下问。然后分析总结这三家律师说的,这时候差不多自己能够梳理出条理来。
作者:大姐姐
链接:https://www.zhihu.com/question/27486818/answer/37267873
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3、知道哪些法律上的小常识可以保护自己?

一、合同借款类
1、写合同或让他人打欠条,务必在对方落款名字后面让写上身份证号码,否则,后果你懂的;
2、给人借钱:如果给现金,务必当日从银行取现而后保留取现的银行票据,ATM机取现则打印票据并保留、银行柜台取现则保留底单;如果转帐,同上,亦务必保留转帐凭证,同时不要注销掉该帐号。否则日后发生纠纷诉至法院,对方不认可,你亦没有提供资金来源,很可能败诉哦;
3、借人高息的,在给人借款同时,不要马上就拿回当月或当年的利息,不然被拿回来的这部分不视为借款本金,你可以一起喝茶,喝完茶出来再拿嘛 何必急于一时呢;
4、借人高息的,借条上千万不要不好意思写上利息哦,君知道,月息2分及以下都是可以支持的,写多了,大不了超过部分法院不支持。可系,如果你不写,对方法庭上不认可有利息,你就亏大发了哦,法院很有可能无证据不支持利息呢;
5、关于诉讼时效,我看了下其他人答案,明显没有实践经验哦。如果你是借款方,可以和对方口头约定还款时间,但不要写在借条上哦,这样,你的借条有效期20年不会超诉讼时效。什么?那你担心对方无限期不还款?没关系,按你们约好的还款日子催一下,不还?不还直接法院见,没关系,法院会认可滴,而且再也不用担心对方突然找不到人过了两年诉讼时效哦。
二、交通事故类
1、事故发生后,务必记得拍一张对方交强险以及商业险的保单,一点都不费神,不然万一双方协商不好,你得到处查询或复印,比较麻烦;
2、如果撞伤了对方,自己需要承担责任,但购买了交强险和商业险,记住,交警让你预付医药费什么的,推说自己最近买股票亏钱了,没有钱,不要垫付,让找保险公司。作为法官,机动车交通事故案子一般会调解,但调解便有利益让步,调解方案出来往往损害的是之前垫付了医药费方车主利益,便宜了保险公司,我很痛心却无能为力。记住,如果购买了保险,对方损失不大,你是除了鉴定费与诉讼法无需多出一分钱的;
3、作为事故受损方,事故发生后走到诉讼阶段,如果伤残严重,不着急用钱,在法院组织调解时,可以不接受保险公司的调解方案,因为,因为,保险公司至少会在有可能判决赔偿的数目上打折10%以上。但如果本来标的不大,还是建议接受调解吧,早点拿钱,少走程序;
4、在事故发生后,保留好一切票据,包括交通费发票、医药费发票、自己在小药店买药等等一切;
5、众所周知,残疾赔偿金农村与城市相差巨大,所以,如果你是农村户口,只要你租住在城镇,或者在城镇务工,均可以按照城镇标准计算,如果务工地在发达地区,只是回老家发生交通事故,还可以按照务工地城镇标准起诉残疾赔偿金,那又是一大比银子。
三、劳动合同类
1、未签劳动合同:实名反对前面有人所说未签劳动合同可以一直要求双倍工资至劳动者离职。我在评论区给他留言指出错误,居然把我留言都删了,太过分!哦 扯远了,绕回来。没有签劳动合同,请保留好工作证,餐票,评先评优等一切证明你工作的证据,双倍工资从你入职第二个月开始计算,直至满一年,即一共赔你11个月双倍工资,超出一年只是视为与你签订无限期劳动合同,其实这个没什么实际效益;
2、每周未休息2天或上班超过40小时,加班工资:周六、日 双倍,法定节假日比如五一十一等,三倍工资,货真价实;
3、单位无故辞退,经济补偿金,工作几年算几月,计算标准为月平均工资,超6个月算1年,未满6个月算半年;
4、未购买社保:你只能在职期间与公司协商要求其缴纳,否则你去劳动部门告发,劳动部门可以对其罚款。真闹到法院,法院对这一块是不予处理的。

如何看待民生银行30亿“假理财”事件

新闻背景:独家∣民生银行30亿理财“飞单”案发 竟涉票据“萝卜章”

事件的过程:

作者:空瓶
链接:https://www.zhihu.com/question/58655200/answer/158020689
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

事件经过大概是。
支行行长及其他该行工作人员向私银客户推荐产品时称,该产品保本保息,由于“原投资人急于回款,愿意放弃利息,一年期产品原本年化收益率4.2%,还有半年到期,相当于年化8.4%的回报,这些私银客户购买的产品,在形式上,属于从其他投资者处受让民生银行发行的尚未到期的理财产品,这些理财多数以“非凡”系列XX期命名(也包含其他名称,比如一位投资者购买的产品名称为“结构性存款H-1”)。
为获得投资者的信任,除产品转让协议,该行还以付款方为甲方、收款方为乙方、民生银行为丙方的方式,签订了一份《交易资金监管协议》。约定民生银行对产品转让方,即收款方的账户进行监管冻结,确保该产品到期后本金及收益划转给付款方。该转让协议正是构成此事件的关键。根据协议,转让款由“新投资者”直接打给“原投资者”的个人账户。转让协议中,除了转让方、受让方分别签字外,还盖有“中国民生银行航天桥支行储蓄业务”的公章。但未知公章真假。

事件的暴露纯属偶然。一位民生银行私人银行客户拍了一张该理财产品的照片,发给他在民生银行北京分行的熟人,询问这款又保本收益又高的理财产品,为什么只有航天桥支行在卖,其他支行或渠道能否买到。于是引起民生银行重视。
以上是事件大概过程。

事件的过程2:

应该是承兑汇票上的萝卜章导致的巨额资金缺口,没办法了,想个招弄钱,继续把承兑汇票这个东西玩下去,如果不被发现的话,应该能赚不少钱。

而且这个事件也不是因为无法兑付被爆出来的,说明目前为止这个方法玩的还行。

票据一向是很赚钱的生意,简单来说,就是企业或银行打的白条。例如张三卖给李四一批货,李四说我现在没钱,我给你打个白条,一年以后给你100万。

张三又着急拿钱,怎么办?就把这个白条90万卖给王五,王五可以继续把白条卖给下一个人,也可以等一年以后到李四那里拿100万,这样他就赚了10万。那么这个利率就是100/90-1=11.11% ,称为贴现率。

票据分商业票据和银行票据,也就是公司开出来的,或者银行开出来的,那么银行相对来说肯定信用更高,那么贴现率就更低;公司开出来的,贴现率也就更高,说白了就是谁打的白条更值钱;

那么民生银行这事,就是公司开的票,银行违规做了背书担保,还用了假章,目的就是为了让这个白条更值钱。多卖的钱嘛……就各自分了呗。

等到最后一个买白条的人要去兑现的时候咋办?就搞了这个假理财填窟窿。其实也有可能只是救急,最开始开出商票的那个企业未必不能兑付,只是资金链趋紧,所以才想了这么个招。

飞单:

这次事件已经基本可以被确定为“飞单”,以下为“飞单”的介绍:
飞单简单来说就是销售业务员拿到订单后,不将订单交由自己公司做,却将订单放在别的公司做。
就银行的“飞单”简单说,就是银行工作人员利用投资者对银行的信任,卖不属于银行自己的理财产品,从中获得高额的佣金提成。对于客户来说,资金失去了银行严格风控的保护就很容易“打水漂”。
举个例子来说,客户来银行存钱,理财经理为客户推荐理财产品,然而这个产品并不是自己银行系统推出的,而是其他金融机构推出的,客户是因为相信银行才购买这款理财产品,然而这款理财产品的盈亏却不由银行负责。

比如说你现在有20万现金,想去做个投资,股市风险太高你不敢投,基金涨跌不定你也不想投,你看上了银行推出的人民币理财产品,年化收益率5%,这时你去找之前服务过你的那位理财经理。

这位理财经理告诉你,我们这里现在推出了一款新的理财产品,年收益10%以上,你一听收益这么高,就放心地购买了,因为有银行信用做担保,所以你也没多想。

然而这款理财产品并没有在该银行系统里备案,是其他金融机构推出的,这是理财经理假借银行名义销售给你的,出了事后,责任方只在金融机构和理财经理,银行完全不知情。

这款产品如果一直都能保持盈利,那么别人也很难发现其中的蹊跷,然而天有不测风云,这款理财产品出现了兑付危机,客户来找银行要钱,调查之后才发现,这是理财经理私自代售的。

以上就是“飞单”的操作过程,我朋友他们银行也有搞“飞单”赚钱的,那人被发现之后直接开除了。

就民生银行这次“飞单”事件来看,一个支行行长就能搞这么大金额的“飞单”操作,说明民生银行的风控工作是很不到位的,这属于操作风险。

这么大金额的“飞单”事件,竟然在之前都没人发现,还是客户不经意间询问别人时才暴漏的,说明该支行有多人串联操作,一两个人是干不了这么一大票“飞单”操作的。

民生银行去年有“潜规则门”,今年又有“飞单门”,昨天民生银行副行长也被带走调查了,看来这段时间真是民生银行的多事之秋,民生银行真该好好搞搞内控了,要不还会有更大的危机。

 

作者:王土豆
链接:https://www.zhihu.com/question/58683502/answer/158081922
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

kaggle攻略

kaggle

大数据竞赛平台——Kaggle 入门篇

[Kaggle] 数据建模分析与竞赛平台介绍

用python参加Kaggle的些许经验总结

技术面试要了解的算法和数据结构知识

目录

  • 在线练习
  • 在线编程面试
  • 数据结构
  • 算法
  • 贪心算法
  • 位运算
  • 复杂度分析
  • 视频教程
  • 面试宝典
  • 计算机科学资讯
  • 文件结构

在线练习

在线编程面试

数据结构

链表

  • 链表是一种由节点(Node)组成的线性数据集合,每个节点通过指针指向下一个节点。它是一种由节点组成,并能用于表示序列的数据结构。
  • 单链表 :每个节点仅指向下一个节点,最后一个节点指向空(null)。
  • 双链表 :每个节点有两个指针p,n。p指向前一个节点,n指向下一个节点;最后一个节点指向空。
  • 循环链表 :每个节点指向下一个节点,最后一个节点指向第一个节点。
  • 时间复杂度:
    • 索引:O(n)
    • 查找:O(n)
    • 插入:O(1)
    • 删除:O(1)

  • 栈是一个元素集合,支持两个基本操作:push用于将元素压入栈,pop用于删除栈顶元素。
  • 后进先出的数据结构(Last In First Out, LIFO)
  • 时间复杂度
    • 索引:O(n)
    • 查找:O(n)
    • 插入:O(1)
    • 删除:O(1)

队列

  • 队列是一个元素集合,支持两种基本操作:enqueue 用于添加一个元素到队列,dequeue 用于删除队列中的一个元素。
  • 先进先出的数据结构(First In First Out, FIFO)。
  • 时间复杂度
    • 索引:O(n)
    • 查找:O(n)
    • 插入:O(1)
    • 删除:O(1)

  • 树是无向、联通的无环图。

二叉树

  • 二叉树是一个树形数据结构,每个节点最多可以有两个子节点,称为左子节点和右子节点。
  • 满二叉树(Full Tree) :二叉树中的每个节点有 0 或者 2 个子节点。

大数据

  • 完美二叉树(Perfect Binary) :二叉树中的每个节点有两个子节点,并且所有的叶子节点的深度是一样的。
  • 完全二叉树 :二叉树中除最后一层外其他各层的节点数均达到最大值,最后一层的节点都连续集中在最左边。

二叉查找树

  • 二叉查找树(BST)是一种二叉树。其任何节点的值都大于等于左子树中的值,小于等于右子树中的值。
  • 时间复杂度
    • 索引:O(log(n))
    • 查找:O(log(n))
    • 插入:O(log(n))
    • 删除:O(log(n))

大数据

字典树

  • 字典树,又称为基数树或前缀树,是一种用于存储键值为字符串的动态集合或关联数组的查找树。树中的节点并不直接存储关联键值,而是该节点在树中的位置决定了其关联键值。一个节点的所有子节点都有相同的前缀,根节点则是空字符串。

大数据

树状数组

  • 树状数组,又称为二进制索引树(Binary Indexed Tree,BIT),其概念上是树,但以数组实现。数组中的下标代表树中的节点,每个节点的父节点或子节点的下标可以通过位运算获得。数组中的每个元素都包含了预计算的区间值之和,在整个树更新的过程中,这些计算的值也同样会被更新。
  • 时间复杂度
    • 区间求和:O(log(n))
    • 更新:O(log(n))

大数据

线段树

  • 线段树是用于存储区间和线段的树形数据结构。它允许查找一个节点在若干条线段中出现的次数。
  • 时间复杂度
    • 区间查找:O(log(n))
    • 更新:O(log(n))

大数据

  • 堆是一种基于树的满足某些特性的数据结构:整个堆中的所有父子节点的键值都满足相同的排序条件。堆分为最大堆和最小堆。在最大堆中,父节点的键值永远大于等于所有子节点的键值,根节点的键值是最大的。最小堆中,父节点的键值永远小于等于所有子节点的键值,根节点的键值是最小的。
  • 时间复杂度
    • 索引:O(log(n))
    • 查找:O(log(n))
    • 插入:O(log(n))
    • 删除:O(log(n))
    • 删除最大值/最小值:O(1)

大数据

哈希

  • 哈希用于将任意长度的数据映射到固定长度的数据。哈希函数的返回值被称为哈希值、哈希码或者哈希。如果不同的主键得到相同的哈希值,则发生了冲突。
  • Hash Maphash map  是一个存储键值间关系的数据结构。HashMap 通过哈希函数将键转化为桶或者槽中的下标,从而便于指定值的查找。
  • 冲突解决
    • 链地址法( Separate Chaining :在链地址法中,每个桶(bucket)是相互独立的,每一个索引对应一个元素列表。处理HashMap 的时间就是查找桶的时间(常量)与遍历列表元素的时间之和。
    • 开放地址法( Open Addressing :在开放地址方法中,当插入新值时,会判断该值对应的哈希桶是否存在,如果存在则根据某种算法依次选择下一个可能的位置,直到找到一个未被占用的地址。开放地址即某个元素的位置并不永远由其哈希值决定。

大数据

  • 图是G =(V,E)的有序对,其包括顶点或节点的集合 V 以及边或弧的集合E,其中E包括了两个来自V的元素(即边与两个顶点相关联 ,并且该关联为这两个顶点的无序对)。
  • 无向图 :图的邻接矩阵是对称的,因此如果存在节点 u 到节点 v 的边,那节点 v 到节点 u 的边也一定存在。
  • 有向图 :图的邻接矩阵不是对称的。因此如果存在节点 u 到节点 v 的边并不意味着一定存在节点 v 到节点 u 的边。

大数据

算法

排序

快速排序

  • 稳定:否
  • 时间复杂度
    • 最优:O(nlog(n))
    • 最差:O(n^2)
    • 平均:O(nlog(n))

大数据

合并排序

  • 合并排序是一种分治算法。这个算法不断地将一个数组分为两部分,分别对左子数组和右子数组排序,然后将两个数组合并为新的有序数组。
  • 稳定:是
  • 时间复杂度:
    • 最优:O(nlog(n))
    • 最差:O(nlog(n))
    • 平均:O(nlog(n))

桶排序

  • 桶排序是一种将元素分到一定数量的桶中的排序算法。每个桶内部采用其他算法排序,或递归调用桶排序。
  • 时间复杂度
    • 最优:Ω(n + k)
    • 最差: O(n^2)
    • 平均:Θ(n + k)

大数据

基数排序

  • 基数排序类似于桶排序,将元素分发到一定数目的桶中。不同的是,基数排序在分割元素之后没有让每个桶单独进行排序,而是直接做了合并操作。
  • 时间复杂度
    • 最优:Ω(nk)
    • 最差: O(nk)
    • 平均:Θ(nk)

图算法

深度优先 搜索

  • 深度优先搜索是一种先遍历子节点而不回溯的图遍历算法。
  • 时间复杂度:O(|V| + |E|)

大数据

广度优先 搜索

  • 广度优先搜索是一种先遍历邻居节点而不是子节点的图遍历算法。
  • 时间复杂度:O(|V| + |E|)

大数据

拓扑排序

  • 拓扑排序是有向图节点的线性排序。对于任何一条节点 u 到节点 v 的边,u 的下标先于 v。
  • 时间复杂度:O(|V| + |E|)

Dijkstra算法

  • Dijkstra 算法是一种在有向图中查找单源最短路径的算法。
  • 时间复杂度:O(|V|^2)

大数据

Bellman-Ford算法

  • Bellman-Ford  是一种在带权图中查找单一源点到其他节点最短路径的算法。
  • 虽然时间复杂度大于 Dijkstra 算法,但它可以处理包含了负值边的图。
  • 时间复杂度:
    • 最优:O(|E|)
    • 最差:O(|V||E|)

大数据

Floyd-Warshall 算法

  • Floyd-Warshall  算法是一种在无环带权图中寻找任意节点间最短路径的算法。
  • 该算法执行一次即可找到所有节点间的最短路径(路径权重和)。
  • 时间复杂度:
    • 最优:O(|V|^3)
    • 最差:O(|V|^3)
    • 平均:O(|V|^3)

最小生成树算法

  • 最小生成树算法是一种在无向带权图中查找最小生成树的贪心算法。换言之,最小生成树算法能在一个图中找到连接所有节点的边的最小子集。
  • 时间复杂度:O(|V|^2)

Kruskal 算法

  • Kruskal  算法也是一个计算最小生成树的贪心算法,但在 Kruskal 算法中,图不一定是连通的。
  • 时间复杂度:O(|E|log|V|)

贪心算法

  • 贪心算法总是做出在当前看来最优的选择,并希望最后整体也是最优的。
  • 使用贪心算法可以解决的问题必须具有如下两种特性:
    • 最优子结构
      • 问题的最优解包含其子问题的最优解。
    • 贪心选择
      • 每一步的贪心选择可以得到问题的整体最优解。
  • 实例-硬币选择问题
  • 给定期望的硬币总和为 V 分,以及 n 种硬币,即类型是 i 的硬币共有 coinValue[i] 分,i的范围是 [0…n – 1]。假设每种类型的硬币都有无限个,求解为使和为 V 分最少需要多少硬币?
  • 硬币:便士(1美分),镍(5美分),一角(10美分),四分之一(25美分)。
  • 假设总和 V 为41,。我们可以使用贪心算法查找小于或者等于 V 的面值最大的硬币,然后从 V 中减掉该硬币的值,如此重复进行。
    • V = 41 | 使用了0个硬币
    • V = 16 | 使用了1个硬币(41 – 25 = 16)
    • V = 6 | 使用了2个硬币(16 – 10 = 6)
    • V = 1 | 使用了3个硬币(6 – 5 = 1)
    • V = 0 | 使用了4个硬币(1 – 1 = 0)

运算

  • 位运算即在比特级别进行操作的技术。使用位运算技术可以带来更快的运行速度与更小的内存使用。
  • 测试第 k 位:s & (1 << k);
  • 设置第k位:s |= (1 << k);
  • 关闭第k位:s &= ~(1 << k);
  • 切换第k位:s ^= (1 << k);
  • 乘以2n:s << n;
  • 除以2n:s >> n;
  • 交集:s & t;
  • 并集:s | t;
  • 减法:s & ~t;
  • 提取最小非0位:s & (-s);
  • 提取最小0位:~s & (s + 1);
  • 交换值:x ^= y; y ^= x; x ^= y;

运行时分析

大 O 表示

  • 大 O 表示用于表示某个算法的上界,用于描述最坏的情况。

大数据

小 O 表示

  • 小 O 表示用于描述某个算法的渐进上界,二者逐渐趋近。

大 Ω 表示

  • 大 Ω 表示用于描述某个算法的渐进下界。

大数据

小 ω 表示

  • 小 ω 表示用于描述某个算法的渐进下界,二者逐渐趋近。

Theta Θ 表示

  • Theta Θ 表示用于描述某个算法的确界,包括最小上界和最大下界。

大数据

视频教程

面试宝典

 

技术面试要了解的算法和数据结构知识