1. 程式人生 > >計算機專業面試題集(一)

計算機專業面試題集(一)

1、線形表a、b為兩個有序升序的線形表,編寫一程式,使兩個有序線形表合併成一個有序升序線形表h;SimWer個人空間#f|,^*Gm9rCr*N
2、運用四色定理,為N個局域舉行配色,顏色為1、2、3、4四種,另有陣列adj[][N],如adj[i][j]=1則表示i區域與j區域相鄰,陣列color[N],如color[i]=1,表示i區域的顏色為1號顏色。
%?8ty'~V7R,kKP03、用遞迴演算法判斷陣列a[N]是否為一個遞增陣列。
4R/{{K5K7^04、編寫演算法,從10億個浮點數當中,選出其中最大的10000個。
/wBPe:~05、編寫一unix程式,防止殭屍程序的出現.
#[,/_9Z6}N(~jC0SimWer個人空間/&CCbiR2M:[
同學的4道面試題,應聘的職位是搜尋引擎工程師,後兩道超級難,(希望大家多給一些算髮)SimWer個人空間1y:x;t4^Ov

1.給兩個陣列和他們的大小,還有一動態開闢的記憶體,求交集,把交集放到動態記憶體dongtai,並且返回交集個數SimWer個人空間/tXRQ�y0hWm
long jiaoji(long* a[],long b[],long* alength,long blength,long* dongtai[])SimWer個人空間GC4`#^l~
2.單連表的建立,把'a'--'z'26個字母插入到連表中,並且倒敘,還要列印!SimWer個人空間OM:|5IX`
3.可怕的題目終於來了
Y+[Y"L'HUV?[8G0象搜尋的輸入資訊是一個字串,統計300萬輸入資訊中的最熱門的前十條,我們每次輸入的一個字串為不超過255byte,記憶體使用只有1G,SimWer個人空間v:k;N&tD dyI

請描述思想,寫出算髮(c語言),空間和時間複雜度,
8^/ N'x:W;J2o.o6O04.國內的一些帖吧,如baidu,有幾十萬個主題,假設每一個主題都有上億的跟帖子,怎麼樣設計這個系統速度最好,請描述思想,寫出算髮(c語言),空間和時間複雜度,SimWer個人空間HqL.B1Y Na
SimWer個人空間*T,[email protected]

U V*_nG/SaI[0SimWer個人空間lQ-|drG
SimWer個人空間e1V5rQ NE e
SimWer個人空間;O,nd1qI
時間問題,我不發程式碼了,但這些問題書上都有,我給你說一下書名SimWer個人空間$`[email protected]
:O3_

SimWer個人空間V7}%N*i$Z/ES;Q%S%W
1、線形表a、b為兩個有序升序的線形表,編寫一程式,使兩個有序線形表合併成一個有序升序線形表h;SimWer個人空間A3v5`&Clm.t
答案在 請化大學 嚴銳敏《資料結構第二版》第二章例題(有錯字不好意思 下同)SimWer個人空間:P,X,UG:[m1t$?,n
SimWer個人空間9n4px%g0J
2、運用四色定理,為N個局域舉行配色,顏色為1、2、3、4四種,另有陣列adj[][N],如adj[i][j]=1則表示i區域與j區域相鄰,陣列color[N],如color[i]=1,表示i區域的顏色為1號顏色。SimWer個人空間 yu"h|8?Q/z8w
答案在 中國水利出版社 引進的一套國外《資料結構》教材上,單蘭色的封皮(這套書包括作業系統(利用的minux),多媒體都有,估計有年歲了)SimWer個人空間it QF1hv$Q7j

E|V W|"_9B03、用遞迴演算法判斷陣列a[N]是否為一個遞增陣列。
^)f.C iX q1G:}0這個我沒在教才上看到過 但不難!!
-f/.|gk6^0?:j0一會貼程式碼SimWer個人空間1J5R }~w2Y

_+nFb)] |Z_^04、編寫演算法,從10億個浮點數當中,選出其中最大的10000個。SimWer個人空間&C-I([Q9yi4i!T#nv
用外部排序,在《資料結構》書上有!!!
m I(N5JH _6Jr.TA0SimWer個人空間sq wO4l|,s
5、編寫一unix程式,防止殭屍程序的出現.
&L.pa'}E|7U0你說的 殭屍程序 是死鎖嗎?unix程式我不會
9B6b0P MO Nce0
f#TrK*S[01.給兩個陣列和他們的大小,還有一動態開闢的記憶體,求交集,把交集放到動態記憶體dongtai,並且返回交集個數
`/{.J1r XG"d+DEz[ J�G0long jiaoji(long* a[],long b[],long* alength,long blength,long* dongtai[])
'RB&BPf7xO A0SimWer個人空間:m,^,W"FHo(_ g!q1|+Q
這個我沒在教才上看到過 但不難!!
,X;s;VE-J1j _%~0一會貼程式碼SimWer個人空間 E0Q.UZQ+s[8?0aH

/[email protected]:Q|m&w02.單連表的建立,把'a'--'z'26個字母插入到連表中,並且倒敘,還要列印!
&}N pA2U E#z$L0這個有點讀不懂
7?%n0J!^O�/*lp0`K1n0SimWer個人空間Woa-A ^)V,SJ#|
3.可怕的題目終於來了SimWer個人空間|%T&OpW)`#?5w5j
象搜尋的輸入資訊是一個字串,統計300萬輸入資訊中的最熱門的前十條,我們每次輸入的一個字串為不超過255byte,記憶體使用只有1G,SimWer個人空間h*l�g.U,g"n&U+V
請描述思想,寫出算髮(c語言),空間和時間複雜度,SimWer個人空間(]9Y!n&X7x'/
的確可怕,
m4hw&Ev k!W([email protected])x yB6U0
eY0A4ok3zM9eF(U)j04.國內的一些帖吧,如baidu,有幾十萬個主題,假設每一個主題都有上億的跟帖子,怎麼樣設計這個系統速度最好,請描述思想,寫出算髮(c語言),空間和時間複雜度.SimWer個人空間_G d6ZiC k
的確可怕,
o_%Sl�m'DU j5W-] n0SimWer個人空間;/&u V:c4K:E#C#vO
SimWer個人空間z/oj3V7vBB?7T
SimWer個人空間yDR~#N*IJ[-c*g
SimWer個人空間"}PE Nv
1、線形表a、b為兩個有序升序的線形表,編寫一程式,使兩個有序線形表合併成一個有序升序
(t3P[6bORgm/,@0
+w9ZYIy;R6[6x0二路歸併,不難SimWer個人空間 Qt'R.XuC,Z
2、運用四色定理,為N個局域舉行配色,顏色為1、2、3、4四種,另有陣列adj[][N],如adj[i][j]=1則表示i區域與j區域相鄰,陣列color[N],如color[i]=1,表示i區域的顏色為1號顏色。
/Ef{A,v0可轉化點陣圖論問題,將各個區域視為圖上的點,相鄰的點之間連上一條線,構成一個無向圖,可得其鄰接矩陣,根據鄰接矩陣得色數.
zS6T-|'i+F03、用遞迴演算法判斷陣列a[N]是否為一個遞增陣列。SimWer個人空間-wEGh4Y:rx)c m
樓上有正解SimWer個人空間h9W"dO"y:J

5p$lw|v X_0
!Hc w3J!MHL04、編寫演算法,從10億個浮點數當中,選出其中最大的10000個。
.E:erd4W%v"Q0用快排.可先從10億個浮點數當中選出第10000大的數,設位M,在選M位基值,利用一趟快速排序,M
!Z.cWZ0YXi0之後的數即為所求.
@/|*Vj0
c8G*KG7t/L.{0
Q;hK!n]&S0
2PW3cX7~^r G01.給兩個陣列和他們的大小,還有一動態開闢的記憶體,求交集,把交集放到動態記憶體dongtai,並且返回交集個數
~x [)ph0long jiaoji(long* a[],long b[],long* alength,long blength,long* dongtai[])
:T4/2i'QV8r0我想到的是蠻力法,時間複雜度位O(alength*blength);想必大家都知道了!SimWer個人空間`rrD/P`P z$o ]
SimWer個人空間Qr(ck!x.v,?$e
SimWer個人空間 P4[c9AkmdE-F!D'X,a
2.單連表的建立,把'a'--'z'26個字母插入到連表中,並且倒敘,還要列印!SimWer個人空間4R3z2jKS7^7^UB4F
在建立單鏈表的時候使之逆序,不難.SimWer個人空間.ei2w)c;j)]g#EU i_^3f
SimWer個人空間-SK}oFmGwgC z
3.可怕的題目終於來了
PE�W%K&m3N0象搜尋的輸入資訊是一個字串,統計300萬輸入資訊中的最熱門的前十條,我們每次輸入的一個字串為不超過255byte,記憶體使用只有1G,
[email protected]!u ]? XfV0請描述思想,寫出算髮(c語言),空間和時間複雜度,SimWer個人空間-?}$B0fqzM
255byte*300萬<1G;也就是說可全部調進輸入資訊,利用PAGERANK演算法實行頻率統計,排序即可.
~i p,wwF0注:PAGERANK演算法受google專利保護,看不到原始碼.SimWer個人空間7]1a p i,S Tn8U

!j/x2m*OW1w H|01、線形表a、b為兩個有序升序的線形表,編寫一程式,使兩個有序線形表合併成一個有序升序線形表h;
0?v r"~ X$BZ%Mm[0   已知:a[0]<a[1]  ...a[n-1]<a[n];SimWer個人空間d%V5/2Vdm
            b[0]<b[1]  ...b[n-1]<b[n];
_n+JmF([U*d0   SimWer個人空間4NN1y6Kd
    一、a[n]<b[0]SimWer個人空間nk,{/]6aD(S*H
    二、b[n]<a[0]
h3C"b'BI?H t,l2x0    三、插入排序&&二分排序
;n$o!F�?6lp:hE!kWJ0   #include "stdio.h"
aI:QL5w0#include "conio.h"SimWer個人空間-AfN;b!a+g3]
SimWer個人空間iFzg2l:Yq

5H_"uF#T2G0main()SimWer個人空間nE&`j,e
{
2N;C�R0C]0    int i,j,k;
[9g%zx7C-rA0    int h[20];
;q.[vsKlmj0    int a[10]={2,5,6,9,11,24,56,78,80,81};
}F$uO3ky0    int b[10]={1,3,8,7,10,21,32,45,65,79};SimWer個人空間4US^8c2//*j n
    i=0;
q6J)E]l2dL_u0    j=0;SimWer個人空間:R5Wb5p;[email protected]
    for(k=0;k<20;k++)SimWer個人空間:t3T^?Qb0C
       if(a[i]>b[j])
awsj;Y3U;m$L0             { h[k]=b[j];j++;}SimWer個人空間]2g&@.W./1g[8t P}%@,M2k
          elseSimWer個人空間~$E$L|"G5/
             { h[k]=a[i];i++;}SimWer個人空間8CARU2O1m
SimWer個人空間Y;^E,GC1c

zh {[email protected] Q @0    for(i=0;i<20;i++)
!}6f-CJ_M$N(N/L3yb0        printf("%d ",h[i]);
Da2?fNMr-^]0SimWer個人空間b1N9a7S v|UZ
SimWer個人空間5Kn+q C*|1o7S*V
    getch();
I$YfC C,x`1R M0
-sf6K n:Xfp0}SimWer個人空間"pJ0Z"Rz2z0v

d/I4t3D/dBV0//單連表的建立,把'a'--'z'26個字母插入到連表中,並且倒敘,還要列印!SimWer個人空間8i ]P0`-OqCT
SimWer個人空間l#gZ RO//U
node *p = NULL;
~3?4zB1Lj5ZmX0node *q = NULL;SimWer個人空間9?0u!PN0UeX

%I7] z,c'Sx,Nd0node *head = (node*)malloc(sizeof(node));SimWer個人空間2`8G^G~Z2_5g?
head->data = ' ';head->next=NULL;SimWer個人空間9SW�v5Vn? QW/Z

Nam.dMP&}0node *first = (node*)malloc(sizeof(node));SimWer個人空間%Zl,/8S7E
first->data = 'a';first->next=NULL;head->next = first;
k#l4d1XR.t0p = first;
)X?K"q�[ ^0
m�~ D?*rX0int longth = 'z' - 'b';
xiD1i;o#o1A0int i=0;
E o'? i]duUE0while ( i<=longth )
geS'~t7r3cg0{SimWer個人空間I%X+C-w} ^V}4m"z
node *temp = (node*)malloc(sizeof(node));SimWer個人空間Mb"}%GD&T7vg['yt;b
temp->data = 'b'+i;temp->next=NULL;q=temp;
.z8z.Uc}/%[0
[email protected]+N8Q0head->next = temp; temp->next=p;p=q;SimWer個人空間;eN�U#lX-[
i++;
1|`1`'A7A1p${D0}SimWer個人空間F!}]+p%a&B4C"H

X't {N7?4p0print(head);
[email protected])gr+m0SimWer個人空間Z.t*qd'a2B;bD,|s
SimWer個人空間!JC1E6C/
SimWer個人空間7oSbh&vj

2k*T+C]LR0其實第四題這樣的題目樓上沒有人說對。
e�` w6J5y7}`{&{2T4L0說是從10億個數中選,實際上是說數很多。當然用外部排序是一個方法。SimWer個人空間I9W1C#d{:L!Z
估計想考的是看你會不會二叉排序樹。SimWer個人空間[email protected]#L'C
10000個最大的數,就是10000個結點,這個記憶體是可以裝下的。SimWer個人空間/[email protected]
但10億個數就要從外部檔案讀出來了。每讀入一個/組,就試圖將之放入排序樹中。等10億個數全讀完了,10000個結點按中序輸出就行了。
Ky*_m8zuum$g$D{6z0我還在CSDN中見過類似的題目,答案也是二叉排序樹,好像沒人回答出來。SimWer個人空間3kz4N w/?~:Z0~;I

}O{0Bmm|0SimWer個人空間0IG:D6Nhc;q

S&Y)t)fG Tk7J0SimWer個人空間2rc5Eo+Yy`
象搜尋的輸入資訊是一個字串,統計300萬輸入資訊中的最熱門的前十條,我們每次輸入的一個字串為不超過255byte,記憶體使用只有1G,
sW2b1g(tw{ qC0請描述思想,寫出算髮(c語言),空間和時間複雜度,
C�y?^1G{P3H$[w0這道題不是很難吧,用雜湊的方法,將這些字串雜湊到不同的桶中,然後判斷那個最多就行了
!r$de`F8Q0SimWer個人空間o2aC4rjl

D+[ x(r"{�^[]m0SimWer個人空間4M1~^U;x

1~0S4DvPL+vg0
3E.k9oJ4TZ2n0關於第4題的我寫的程式
[email protected]({A#JD0SimWer個人空間's7R1h0l$lkE
#include <stdio.h>
X;J9Y"h#} /0#include <iostream>SimWer個人空間yv|N6zt.q`j
#define MAX 1000000  //設定總數,我這裡設定了一百萬,也可以到一千萬,一億的話記憶體受不了,但是我的程式是序列讀出資料的,所以也是可以處理更大的資料的,這裡全部放在資料裡是為了方便SimWer個人空間+?FT/Z5O3i+{S
#define TOP 1000SimWer個人空間Ts"_e8~#`

!L{Nt(r'T0void quicksort(int array[ ],int left,int right)SimWer個人空間8kFT*K2p/GmL
{SimWer個人空間O+f7~0Myx ANR![U
if(left < right)SimWer個人空間@4Z0E+N_;uZ1?S
{SimWer個人空間E[�h(DM
        int div = array[right];
k{C!t2]*rbu0int i = left;SimWer個人空間 R)[email protected] i(z�K?)r
int j = right-1;
O+a+f|'}|0int temp;SimWer個人空間1q BH$T"[email protected]
if(i==j){//只有兩個資料,直接處理完了事SimWer個人空間F(c-U}7]a
if(array[i] < div)SimWer個人空間,KTj/L$U1h.wV6NG'e
{SimWer個人空間;u"?w([d{/0A
                array[i+1] = array[i] ;SimWer個人空間YOr'~K_.j!h9oF
                array[i] = div;
G,s,k"clgZB3ns0return;
S+l~8HDG_{1a0}SimWer個人空間-U| t] }^o%G0qC
}
FoI8IDyU0else
l�uf,q4q4y0{
4oO5pk]5E/0while(i< j)
d5z1lq_)@1{0{
} u%c I3d9y0for( ; array[i] > div ; i++);
G5QW!S[/h0for( ; array[j] <= div ; j--);SimWer個人空間BEf'FuD8} {
if(i>=j)break;SimWer個人空間]4L7z6G#Gap�dA

"]i~8`p.[8/a'M0temp = array[i];
v2O&Qi-Fi2wM0array[i] = array[j];
[email protected]"i Z @ U @0array[j] = temp;
]x/| I'_+U-[Yl0SimWer個人空間^$r A ?ECz&E rE
}
d9p-p/"N2Mv0SimWer個人空間)Id&c/G3jD8i-c
if(i!=right)SimWer個人空間2B0d�D�H I,PE%B
{      SimWer個人空間)]cHIl7Sd1}
array[right] = array[i];SimWer個人空間Ar*zLQ
array[i] = div;
d�Us&O4|"D&Y*_sd0}SimWer個人空間2J7ch g1H(J%B#k
            quicksort(array,left,i-1);SimWer個人空間Rz"P8{ `.O*b8r:^C_
quicksort(array,i+1,right);
(d'n4vc ?$e.R[0SimWer個人空間@ p ^,j"X
}SimWer個人空間l+n&E s3NPni[
}SimWer個人空間@�`y-X_(v'kC`)R
}
#[email protected]SimWer個人空間l{-a2F~7{

0T,o!J%fF'cVP vYF0
o%N/L[H0int main()
0]I8T./i0{
RJ:P){R)Q2wd0SimWer個人空間)_"E.z WpYX[
  int *Big = new int[MAX];
Q&o1F{Q0  int * pSort = new int[TOP*4];//最好pSort[0]-pSort[Top-1]為結果SimWer個人空間8Um_h&N(v6^
  int i=0, j=TOP, k=0;
j)ig+W�DQA#^f.~iz0  int h=0;
|4g0B8P)ms0  int all = 0;//Big資料計數器
D$n&L0] rt:Kx]&z4z0  srand(time(NULL));SimWer個人空間`5u9O.A._8]H7i
  for( i =0; i< MAX; i++)SimWer個人空間"n&_o#wT:~O.N
  {
gv8C,v4s�lRSb0//int jj= rand( )%77 + 1;SimWer個人空間8D8Ya-M o(x!B5Qn
//int nn = rand( )%jj;
j4Q3d}.Io q0        Big[i] = rand( );SimWer個人空間4h;SK4j8mhk |z
//cout<<Big[i]<<" ";SimWer個人空間Oq0S+o!wZ
  }SimWer個人空間MoI `,TN.r7b

aS/Bo,B}-o0  //可加入一些測試資料,看看大的能否排到前面
#x�}4`.ge0b[0  Big[0] = 100000;SimWer個人空間~&aVl8j4LV0g
  Big[10] =300002;
|�f7i2L*N+Fo#F0  Big[11] =200002;SimWer個人空間b/@8E G /^u
  Big[MAX-2] =200007;SimWer個人空間.Q~5ja$|&l5o
SimWer個人空間/jn+^C9o
  int temp = Big[0];SimWer個人空間0h7YD�v,G$zJdzO
SimWer個人空間7a'k6[M4R{#@z%[_
  for( all = 0; all < TOP; all++)
&}Lv3xU4l6|A5]({0  {
S?jJe&j$l0  pSort[all] = Big[all];SimWer個人空間&{L*K-Z$I O:e
 SimWer個人空間b:P*{4F tk6fEu;f
  } 
3}%~w#hr`(N!w0  quicksort(pSort,0,TOP-1); 
)T[&@o�I0 SimWer個人空間!~z/g&D!?*ew2z
  //for( k =0;k<TOP-1;k++) cout<<pSort[k]<<"";SimWer個人空間*a8ii.NIF]
  //cout<<endl;SimWer個人空間/s8P:eN2/F
  temp = pSort[TOP-1];
aZ-^)]Mq1W0  i = TOP-1;
BA5bf.v0  j = TOP*2;
4`U%NRdH5V_Z0
]%B yts~{9M%_ K0  int sum = 0;
z`*Wj%i&H0 SimWer個人空間 ZTbQgi1S
  for( all= TOP; all<MAX; all++)
/w k u D*m(i0  { 
$_e[RD#{s6c0    sum++;SimWer個人空間6oKpsoy`c4u
if( Big[all]>temp )
h&sQ} B6d-}0{
7Z-W6Zc)A/A.]4n'M*n0     
M#tgd]sR$abg|-M0sum++;SimWer個人空間9[ r"Kd*m"/ [email protected]
SimWer個人空間#u$jz l}+_:~ { i
pSort[i++] = Big[all];SimWer個人空間M*P-H9]] }!o4J
     SimWer個人空間{u#{%q:{4d
if(i==TOP*2) // i滿TOP*2了
;M9];g7f8G"lJ:~0{
_]J-S4Q;j]Mq0sum += 3;SimWer個人空間 LA G7w1F)v
i = 0;SimWer個人空間$M./ao8Q1B,aIi
j = TOP*2;SimWer個人空間r!q-ux[8I}
int temp2 = pSort[TOP*2-1];SimWer個人空間Vl3YR2M

2ZI G&P5`[email protected]&O0for(int n=0; n< TOP*2-1; n++)
t4r'`M{ ZW+W0{
2q'in^0`Q#F0sum += 2;SimWer個人空間3qG~1m9A+Sgv/hs

bjjy ^{0if(pSort[n]> temp2)SimWer個人空間+U,eo%`s^0r3i)n)S y
{
/ [email protected]'y'~4I0if(i!=n)pSort[i] = pSort[n]; //大的放到pSort前部分
.f*K6]/G N#XMg0i++;SimWer個人空間y}4jxC+Gr*F3T
}SimWer個人空間"c e�}@cQ
else
KuI:o7dzLx)P0{
!g-WF-x-|9C9x0pSort[j++] = pSort[n]; //小的放到pSort後部分
4S2V�uX]"Z0}SimWer個人空間GYy:[email protected]
SimWer個人空間uOx.w:bSW
}SimWer個人空間;^KH$ZB

&J5~Z.d0b'~h:k.D*Obl0if(i<TOP)//i<100,選的分割數比較大, 重新選擇排在100名後的作為分割數SimWer個人空間5/!hLy`l5q
{
WV-D7Vz}/hg#x0while(i<TOP)SimWer個人空間n2J$~A,m PT
{SimWer個人空間9?+EK,Tzpww|
sum += 5;
r e9d!FB)`|1h0
[email protected]@0O%`F1Mi%B0pSort[i++] = temp2;SimWer個人空間T O&|[email protected]~-d;KbX,o
j--;SimWer個人空間@KY*]7_,A8o4`�R
temp2 = pSort[j];
[7wu9g6Kzx9Wvi,[0k = TOP*2;
W8/&r+m[a o ^@0h = TOP*2;
E!Z nv(z9A0for( ;k<j;k++)SimWer個人空間Vq!jt6i f/eB
{
5K�[email protected] K5Q-ro0sum += 2;
-U2a-b)pL0SimWer個人空間jp+_+y,[email protected]&Yh]q1K
if(pSort[k]>temp2)SimWer個人空間fb a:C!p ^/7ew
{SimWer個人空間{F*v^;[email protected]
pSort[i++] = pSort[k];
Qr^$UZj;QsZ;l0}
oS&yf_ b.Pc9GA0else
P6RXP_'Fv ?(bM0{
Nc:buV Ff;f0if(h!=k) pSort[h] = pSort[k];
:YEjdQWWj*eo0h++;SimWer個人空間J*lnk]7FC1K
}SimWer個人空間:k0Knx1KV/G{
}SimWer個人空間3xXC ?)bS^bd
j = h;
Dk7s:a3?U1G0} //i>100了,選擇排在100名後的分割數的操作完畢
[email protected]�M2S/[email protected]}SimWer個人空間/�^}zTA
sum++;
RUQuG0temp = temp2;SimWer個人空間#S�tr1R P2V
}SimWer個人空間/]LB%/E!l&E!I3H
}SimWer個人空間4p9V`x0`#D]
  }
dw-UKF0
#s$kx zp0  cout<<endl<<sum<<""<<i<<" "<<j<<endl; 
A&M/M"u:G;`(S5Z+}0 SimWer個人空間 mesWb.j]#sP9?
///////這裡是全排序輸出前TOP個,看看後面的結果是否和這個相同,但必須在MAX值比較小才可以執行,否則堆疊溢位/////SimWer個人空間!MFY0JNN/W
/*
)m$^U-u(nm0  quicksort(Big,0,MAX-1);
w5U*N,GzwC O0SimWer個人空間J'^-//w wjgH
  for(k=0; k<TOP; k++)cout<<Big[k]<<"";SimWer個人空間�Li6}0x8T;g.nJo'g,oh3{
  cout<<endl;
tzz(W^,RD0  cout<<endl;SimWer個人空間8s2EIw8XR1N4gv
*/
K4Ebs,R-X0 //////////////////////////////////////////SimWer個人空間3x:v3w_a r[cdz

4oOZ"t D Pgf T0  //輸出前TOP個
N l,~0I![(O.j&A8V_0  quicksort(pSort,0,i-1);SimWer個人空間]+z/5es[
  for( k =0;k<TOP;k++) cout<<pSort[k]<<"";SimWer個人空間,qiR8A(Ts]IS
SimWer個人空間E*e^7y-LvI?'C W^;B
  getchar( );SimWer個人空間qnU.e:U
  delete[ ] Big;
r$bTR,z+s8x1r]*A0  delete[ ] pSort;
^[email protected]  return 0;SimWer個人空間L4Dyv%v~ A.iY
}SimWer個人空間y,Hm9f%m"`
SimWer個人空間Ff$aF%W(rtp!fW
SimWer個人空間sA/Mn rRY

r9ejhL:VQ^7Na0
$RH$G Hb%s0SimWer個人空間+{,Mk)dF%I~$C
演算法的題不難啊。
[email protected]+D4Y/s&zpQ$d0我說個思路吧:
:[7s C/|)?+C$R01、線形表a、b為兩個有序升序的線形表,編寫一程式,使兩個有序線形表合併成一個有序升序線形表h;
5?-B}[email protected]:I0    這個問題和下面那個第一題本質是一樣的,我==一起說。
-fw4e1D9P0SimWer個人空間7Qx0dhP+|9h
3、用遞迴演算法判斷陣列a[N]是否為一個遞增陣列。
5aqc]#}3?Gp0    這個就是每次拿最後一個和邊界上的比下縮小規模,沒難度。SimWer個人空間{.RDi7u

l _Tov#z9Z%i ]D04、編寫演算法,從10億個浮點數當中,選出其中最大的10000個。
3o/Z9j1`f"T0    外部排序SimWer個人空間i3yi ^%Q8_U+o

Z]F]pZ+fn,s i05、編寫一unix程式,防止殭屍程序的出現.SimWer個人空間2H*e]"Lt.|/f4c2y#^ _
    和演算法沒關係。我不會。
I.LY fZ|/h1/~4B0
h gE/Vf�YL?01.給兩個陣列和他們的大小,還有一動態開闢的記憶體,求交集,把交集放到動態記憶體dongtai,並且返回交集個數SimWer個人空間3A-T2e.N2U"?
    先排序O(N*LOG(N)),然後進行的步驟和第一題一樣就對了。對這題是:取小頭,比較,一樣進記憶體,不一樣小的扔O(N)內完成。加上排序O(N*LOG(N))搞定。SimWer個人空間/EjL/WW-U
對上面那題  不用講應該都知道了,就是比完合併就行了。 SimWer個人空間w%?,P-{A

@z`�Z^z02.單連表的建立,把'a'--'z'26個字母插入到連表中,並且倒敘,還要列印!
u;H;[ Gn)Y0    連結串列是基本功,沒什麼好說的。SimWer個人空間eb)L1K/@[email protected]"{
SimWer個人空間 L$|Pu'?h
象搜尋的輸入資訊是一個字串,統計300萬輸入資訊中的最熱門的前十條,我們每次輸入的一個字串為不超過255byte,記憶體使用只有1G,
F&V4O8W z)Z-M;~0請描述思想,寫出算髮(c語言),空間和時間複雜度,SimWer個人空間Mq_$F(tua
    我不知道。不過你算下就知道空間肯定是夠的:全部裝入都夠(當然我們不會這麼做)
6VCKxda04.國內的一些帖吧,如baidu,有幾十萬個主題,假設每一個主題都有上億的跟帖子,怎麼樣設計這個系統速度最好,請描述思想,寫出算髮(c語言),空間和時間複雜度,
-lm$j;N e�B!ry.T sJ0    我不知道。沒學過著方面知識
[D-QjR6Fm0SimWer個人空間[email protected][6Mg
SimWer個人空間7PR8_(NAC6t!mC
SimWer個人空間p$Ab*]f%fsw;x1k{
SimWer個人空間j|XZSE
樓上幾個朋友回排序的,我們一起來討論一個問題。
-w r3wZQ tc0結果要求的是10000個排好順序的數而已,並沒有要求你把10億個數都拿出來排序。SimWer個人空間5OqeNap0?:v
所以更有效率的思路應當是SimWer個人空間cEN!D:Ak#z
1、讀入的頭10000個數,直接建立二叉排序樹。O(1)
]zv%Z'|Xom�~02、對以後每個讀入的數,比較是否比前10000個數中最小的大。(N次比較)如果小的話接著讀下面的數。O(N)
'w^D$M[-c03、如果大,查詢二叉排序樹,找到應當插入的位置。SimWer個人空間aB6r!S i/`!/H
4、刪除當前最小的結點。SimWer個人空間Lek Xmx]@
5、重複步驟2,直到10億個數全都讀完。SimWer個人空間 b {F$d"o,f c D)R
6、按照中序遍歷輸出當前二叉排序樹中的所有10000個數字。SimWer個人空間 {R&@` ac6gR
基本上演算法的時間複雜度是O(N)次比較SimWer個人空間+CrZ$z.d
演算法的空間複雜度是10000(常數)SimWer個人空間2W T-DOx9hh
SimWer個人空間aU'XV^%]�} U/?y
SimWer個人空間{s_}!U/A W:U*@B
SimWer個人空間'X B}[email protected]/[
SimWer個人空間,`!XZ'WDe(B,G
我來回答後面兩道“難題”吧:SimWer個人空間"i*F n"cj[ xJ
1. 最近時有公司出這種從幾百萬詞條中找出頻率最大的前幾條或者重複的條目的問題。SimWer個人空間C5R*{Q]a2N
對於這種問題實際上並不需要太多所謂的搜尋專業知識,想想資料庫是怎麼實現或者資料結構中關於詞典索引的章節就不難知道,這些題目的解決辦法不外乎,採用二種資料結構:
il!M ADlM0樹(二叉樹,Trie樹和B樹)和雜湊表。對於300萬詞條來說,構建一個開地址雜湊肯定用不了1G記憶體,如果還不放心,就構建一棵Trie樹,如果還怕記憶體不夠就構建B+樹進行多級索引。至於複雜度分析,稍微回憶一下你的資料結構書吧。SimWer個人空間+u.t h'D&fNu+f
2.類似貼吧的設計無非是個多級索引,查詢與更新問題。
I yb+Y _CDX0一級是個主題,10多萬主題為了效率直接雜湊就成,查詢時候這些主題肯定是要全部載入記憶體的;SimWer個人空間.i6u*~.wl9y
二 級索引是上億資料,查詢或者更新時記憶體肯定不能放呀,自然就要用B+樹。稍微補充一下,為啥要用B+樹就是為了解決記憶體中不能載入全部資料的時候用來分級 載入資料,這樣可以充分利用記憶體的換入換出來解決海量資料操作的問題。這和作業系統的檔案系統設計以及資料庫實現原理是相似的。SimWer個人空間!Eb*SSWbb Ne#Q

f0y {8z4lvv0SimWer個人空間Im(i"vYv2|Hf

's4Q'VqK]'F4Sv04、編寫演算法,從10億個浮點數當中,選出其中最大的10000個。
j;Oq?"x3A.V0SimWer個人空間3{&]Q7q0VaOLr z$p
記得, 排序演算法的時間複雜度是O(N*log N), 這個是最快了SimWer個人空間M/MO%|J&_ t(@
但是這個地方時間複雜度是 O(N*log n),
[email protected]%bzCb0其中N 是 1G, n 是 10K 大概是: 30/13
Fi$F!s,vJjku0除此之外, 這個地方還不需要使用耗時巨大的外排序SimWer個人空間Wdu'CS0w
像對於磁碟訪問遠遠慢於記憶體訪問的常規系統來說, 效率不在一個數量級。SimWer個人空間@-Do,b6J9yvDE

5w"xLr Ad#`6l0class CSearchSimWer個人空間;j)Au*M)]"[
{SimWer個人空間l)D2r7H9Q-L
public:
b6|OO.}#[9O�FW0    void Input(float f)SimWer個人空間SV B-pk$?t{_
    {
5pP3z+bS"R&EA0        if ( m_vBuf.size() < 10000 || f > *m_vBuf.begin() )
n5uQ#lav0        {
#~tBK(R:j0            m_vBuf.insert(f);       // log(2, n) 時間複雜度SimWer個人空間X&`:Tk$IT7A.U
            if ( m_vBuf.size() > 10000 )SimWer個人空間$X-i].T5}[email protected] Y)U
                m_vBuf.erase(m_vBuf.begin());
.fb$[[email protected]{'c%E0        }SimWer個人空間A4}g?!`)H
     }
4J;r zrB m%aOr0
X8A;P.p,L8c0T4~ k0    std::set<float> m_vBuf;
'cFZzM C'|(z0};SimWer個人空間eC$|[email protected](u*v

ZL3y(W/ oM|5_0剩下的, 就是把所有資料過一遍這邊就OK了。SimWer個人空間[email protected]
SimWer個人空間[email protected])Z8Z3aih#aI^?

vv�r7OW0x0
.Dk2c+dM%[email protected]

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1688647