演算法 常見演算法題

2021-06-25 14:28:52 字數 1037 閱讀 8486

演算法題:假如有100個不相同的數,比如從1到100,怎樣使用10次取出其中的10個不同的數字,要求每個數取出的概率一樣(一開始沒有說10次,所以我說,使用乙個random函式,以時間為種子來取,當取出乙個時,做標記,下次再取到這個數時,重新取一次;然後他就說了如果只能夠取10次怎麼辦?一開始我想到了如果取到重複的就取下乙個沒有被取到的相鄰元素,但是我在計算概率時搞錯了,覺得這樣的方案概率不相同,所以放棄了,一直陷在怎麼讓每個數被取到的概率一樣;實際上「取到重複的就取下乙個沒有被取到的相鄰元素」使得每個元素取到的概率是一樣的。好吧!我又一次敗給了數學);

1)如果當成不放回抽樣,很好理解;

2)如果不是的,那麼就聯絡hash函式線性探測衝突解決方法。

發現這個和《程式設計之美》上的金剛搶座是一樣的。

快速求冪演算法

快速模取冪演算法(

背景:在miller rabbin測試素數,就用到了快速冪取模的思想。求a^b%c(這就是著名的rsa公鑰的加密方法),當a,b很大時,直接求解這個問題不太可能

上面講解的已經很好了,我把它改寫一下;

#include using namespace std;

//計算a^b mod n

unsigned modexp(unsigned a,unsigned b,unsigned n)

return ret;

}int main(){

cout

跟「字尾陣列有關」(

它需要從右到左插入,所以不實用

重點是字尾陣列的掌握就可以很好的解決了

(1)許智磊,ioi2004 國家集訓隊**《字尾陣列》

(2)羅穗騫,ioi2004 國家集訓隊**《字尾陣列—處理字串的有力工具》

常見演算法題

一 維護o 1 時間查詢最大元素的棧 問題描述 乙個棧stack,具有push和pop操作,其時間複雜度皆為o 1 設計演算法max操作,求棧中的最大值,該操作的時間複雜度也要求為o 1 可以修改棧的儲存方式,push,pop的操作,但是要保證o 1 的時間複雜度,空間時間複雜 度無要求。可以建立乙...

常見演算法題

1.用簡單素數篩選法求n以內的素數。void printprime 2.使用位操作壓縮後的篩素數方法 include include int getprime int primes,int max 4.給定乙個包含n個整數的陣列,除了乙個數出現一次外,所有整數均出現三次,找出這個只出現一次的整數.思...

常見js演算法題

author laifeipeng date 2019 02 21 17 50 13 last modified by laifeipeng last modified time 2019 02 21 18 12 27 1 判斷回文字串 法一 function palindrome str retu...