4 tayangan

Diunggah oleh ravg10

- 4.4e (2)
- Ads working in a system
- ch21 duiut gggggggggggggggggft
- Data Structures and Algorithm Analysis in C++, Weiss, 3rd Edition. TABLE OF CONTENTS ONLY.
- ADA FILE
- CA_DS_2012-13_cseB
- DATA STRUCTURES A PROGRAMMING APPROACH WITH C, Second Edition - KUSHWAHA, DHARMENDER SINGH, MISRA, ARUN KUMAR
- c coding
- Bitonic Sort
- FS Lecture 9 Cosequential
- Viva 1
- interview.docx
- Interview Questions
- Reinforcement Learning Framework for Opportunistic Routing in WSNs
- heaps
- Heap
- 5 Computer_Final.pdf
- 05-22Mergesort
- Brief Summary of Insertion Sort
- 14-P0157

Anda di halaman 1dari 5

Dept. of Computer Science Dept. of Computer Science

Johns Hopkins University Brown University

Baltimore, MD 21218 Providence, RI 02912

goodrichQcs.jhu.edu rtQcs.brown.edu

We describe an approach for incorporating randomiza- ten have good time bounds that hold even for worst-case

tion in the teaching of data structures and algorithms. inputs. But as soon as an algorithm is actually imple-

The proofs we include are quite simple and can easily mented in a program P, we must again deal with prob-

be made a part of a Freshman-Sophomore Introduction abilistic events, such as the following:

to Data Structures (CS2) course and a Junior-Senior l P contains a bug,

level course on the design and analysis of data structures l we provide an input to P in an unexpected form,

and algorithms (CS7/DS&A). The main idea of this ap- l our computer crashes for no apparent reason,

proach is to show that using randomization in data struc- l P's environment assumptions are no longer valid.

tures and algorithms is safe and can be used to signif-

icantly simplify efficient solutions to various computa- Since we are already living with bad computer events

tional problems. We illustrate this approach by giving such as these, whose probabilities are arguably much

examples of the use of randomization in some traditional higher than the bad “real-world” events listed in the pre-

topics from CS2 and DS&A. vious paragraph, we should be willing to accept proba-

bilistic algorithms as well. In fact, fast randomized al-

gorithms are typically easier to program than fast de-

1 Introduction

terministic algorithms. Thus, using a randomized algo-

We live with probabilities all the time, and we easily dis- rithm may actually be safer than using a deterministic

miss as “impossible” events with very low probabilities. algorithm, for it is likely to reduce the probability that

For example, the probability of a U.S. presidential elec- a program solving a given problem contains a bug.

tion being decided by a single vote is estimated at 1 in

10 million’. The probability of being killed by a bolt of 1.1 Teaching Randomization

lightning in any given year is estimated at 1 in 2.5 mil- In this paper we describe several places in the standard

lion2. And, in spite of Hollywood’s preoccupation with curriculum for CS2, Data Structures, and CS7/DS&A,

it, the probability that a large meteorite will impact the Data Structures and Algorithms, where randomized al-

earth in any given year is about 1 in 100 thousand3. Be- gorithms can be introduced. We argue that these solu-

cause the probabilities of these events are so low, we can tions are simple and fast. Moreover, we provide time

safely assume they will not occur in our lifetime. bound analyses for these data structures and algorithms

Why is it then that computer scientists have histori- that are arguably simpler than those that have previ-

cally preferred deterministic computations over random- ously appeared in the algorithms literature. In fact,

ized computations? Deterministic algorithms certainly our proofs use only the most elementary of probabilis-

*The work of this author is supported by the U.S. Army Re- tic facts. We contrast this approach with traditional

search Office under grant DAAH04-96-1-0013, and by the Na- “average-case” analyses by showing that the analyses for

tional Science Foundation under grant CCR-9625289. randomized algorithms need not make any restrictive as-

‘The work of this author is supported by the U.S. Army Re-

search Office under grant DAAH04-96-1-0013, and by the Na- sumptions about the forms of possible inputs. Specifi-

tional Science Foundation under grant CCR-9732327. cally, we describe how randomization can easily be incor-

Permissnon to make digital or hard copies of all 0r part Of this work for

porated into discussions of each of the following standard

personal or classroom use is granted without fee provided that algorithmic topics:

cpp,es are not made or distributed for profit or commercial advan-

tage and that copies bear this notice and the full citation 0” the flrSt Page. l dictionaries,

To copy otherwise, to republish, to post on Servers or to

redistribute to Iwts, requires prior specific permlSSl0” and/or a fee. 0 sorting,

SIGCSE ‘99 3/99 New Orleans.

Q ,999 ACM l-581 13.085.6/99/0003...$5.00

LA, USA 0 selection.

We discuss each of these topics in the following sections.

‘wizard.ucr.edu/polmeth/workingpapers97/gelma97b.html

2www.nassauredcross.org/sumstorm/thunder2.htm

3newton.dep.anl.gov/newton/askasci/l995/tronfAST63.HTM

53

2 Dictionaries “heads.” Thus, we expect S1 to have about n/2 items,

An interesting alternative to balanced binary search 5’2 to have about n/4 items, and, in general, Si to have

trees for efficiently realizing the ordered dictionary ab- about n/2” items. In other words, we expect the height

stract data type (ADT) is the skip list [3-71. This struc- h of S to be about logn.

ture makes random choices in arranging items in such Using the position abstraction used previously by the

a way that searches and updates take O(logn) time on authors [2] for nodes in sequences and trees, we view a

average, where n is the number of items in the dictio- skip list as a two-dimensional collection of positions ar-

nary. Interestingly, the notion of average time used here ranged horizontally into levels and vertically into tow-

does not depend on any probability distribution defined ers. Each level corresponds to a sequence Si and each

on the keys in the input. Instead, the running time is tower contains positions storing the same item across

averaged over all possible outcomes of random choices consecutive sequences. The positions in a skip list can

used when inserting items in the dictionary. be traversed using the following operations:

2.1 Skip Lists

before(p): the position preceding p on the same level.

A skip list 5’ for dictionary D consists of a series of

below(p): the position below p in the same tower.

sequences {So, S1, . . . , Sh}. Each sequence Si stores a

subset of the items of D sorted by nondecreasing key above(p): the position above p in the same tower.

plus items with two special keys, denoted --oo and +oo,

where -XI is smaller than every possible key that can be Without going into the details, we note that we can eas-

inserted in D and $00 is larger than every possible key ily implement a skip list by means of a linked structure

such that the above traversal methods each take O(1)

that can be inserted in D. In addition, the sequences in

time, given a skip-list position p.

S satisfy the following:

(plus the special items with keys --oo and +co). The skip list structure allows for simple dictionary search

l For i = 1, . . . , h - 1, sequence Si contains (in addi- algorithms. In fact, all of the skip list search algorithms

tion to --oo and +co) a randomly generated subset are based on an elegant SkipSearch method that takes a

of the items in sequence Si-1. key k and finds the item in a skip list S with the largest

l Sequence Sh contains only -co and i-00. key (which is possibly -oo) that is less than or equal

to k . Suppose we are given such a key k. We begin the

An example of a skip list is shown in Figure 1. It is SkipSearch method by setting a position variable p to the

customary to visualize a skip list S with sequence So at top-most, left position in the skip list S. That is, p is set

the bottom and sequences S1, . . ., Sh-1 above it. Also, to the position of the special item with key -oo in Sh.

we refer to h as the height of skip list S. We give a pseudo-code description of the skip-list search

algorithm in Code Fragment 1 (see also Figure 1).

Algorithm SkipSearch(

Output: Position p in S such that the item at p has the

largest key less than or equal to k

have at least 2 levels).

Figure 1: Example of a skip list. The dashed lines show while below(p) # null do

the traversal of the structure performed when searching for p t below(p) {drop down}

key 50. while key(after(p)) 5 k do

Let p t after(p) {scan forward)

Intuitively, the sequences are set up so that Si+l con- end while

tains more or less every other item in Si. As we shall see end while

in the details of the insertion method, the items in Si+l return p.

are chosen at random from the items in Si by picking

each item from Si to also be in Si+l with probability Code Fragment 1: A generic search in a skip list s.

l/2. That is, in essence, we “flip a coin9 for each item

in 5’; and place that item in Si+l if the coin comes up

2.3 Update Operations Removal

Another feature of the skip list data structure is that, be- Like the search and insertion algorithms, the removal

sides having an elegant search algorithm, it also provides algorithm for a skip list S is quite simple. In fact, it

simple algorithms for dictionary updates. is even easier than the insertion algorithm. Namely, to

perform a remove(k) operation, we begin by performing

Insertion a search for the given key k. If a position p with key k is

The insertion algorithm for skip lists uses randomization not found, then we indicate an error condition. Other-

to decide how many references to the new item (k,e) wise, if a position p with key k is found (on the bottom

should be added to the skip list. We begin the inser- level), then we remove all the positions above p, which

tion of a new item (k,e) into a skip list by performing are easily accessed by using above operations to climb

a SkipSearch operation. This gives us the position p up the tower of this item in S starting at position p (see

of the bottom-level item with the largest key less than Figure 2).

or equal to k (note that p may be the position of the

special item with key -oo). We then insert (k, e) in this

bottom-level list immediately after position p. After in-

serting the new item at this level we “flip” a coin. That

is, we call a method random0 that returns a number be-

tween 0 and 1, and if that number is less than l/2, then

we consider the flip to have come up “heads;” otherwise,

we consider the flip to have come up “tails.” If the flip

comes up tails, then we stop here. If the flip comes up

heads, on the other hand, then we backtrack to the pre- Figure 2: Removal of the item with key 25 from a skip list.

vious (next higher) level and insert (k, e) in this level The positions visited are in the tower for key 25.

at the appropriate position. We again flip a coin; if it

comes up heads, we go to the next higher level and re-

peat. Thus, we continue to insert the new item (k, e) in 2.4 A Simple Analysis of Skip Lists

lists until we finally get a flip that comes up tails. We link Our probabilistic analysis of skip lists, which is a sim-

together all the references to the new item (k, e) created plified version of an analysis of Motwani and Ragha-

in this process to create the tower for (k,e). We give van [4], requires only elementary probability concepts,

the pseudo-code for this insertion algorithm for a skip and it does not need any assumptions about input dis-

list S in Code Fragment 2. Our insertion algorithm uses tributions. We begin this analysis by studying the height

an operation insertAfterAbove(p, q, (k, e)) that inserts a h of S.

position storing the item (k, e) after position p (on the The probability that a given item is stored in a po-

same level as p) and above position q, returning the po- sition at level i is equal to the probability of getting i

sition r of the new item (and setting internal references consecutive heads when flipping a coin, that is, this prob-

so that after, before, above, and below methods will work ability is l/2’. Thus, the probability Pi that level i has

correctly for p, q, and r). at least one item is at most

p t SkipSearch (k)

qt insertAfterAbove(p, null, (k, e))

for the probability that any one of n different events

while random0 < l/2 do occurs is at most the sum of the probabilities that each

while above(p) = nuEZ do occurs.

p t before(p) {scan backward} The probability that the height h of S is larger than

end while i is equal to the probability that level i has at least one

p C- above(p) {jump up to higher leveZ} item, that is, it is no more than Pi. This means that h

q t insertAfterAbove(p, q, (k, e)) is larger than, say, 3 log n with probability at most

end while n 1

P 3logn 5

-z--$--g

2310gn

Code Fragment 2: Insertion in a skip list, assuming More generally, given a constant c > 1, h is larger than

random0 returns a random number between 0 and 1, and clog n with probability at most l/n’-‘. Thus, with high

we never insert past the top level. probability, the height h of S is O(logn).

Consider the running time of a search in skip list S,

and recall that such a search involves two nested while

55

loops. The inner loop performs a scan forward on a level Algorithm quickSort(

of S as long as the next key is no greater than the search

key k, and the outer loop drops down to the next level Input: Sequence S of n comparable elements

and repeats the scan forward iteration. Since the height Output: A sorted copy of S

h of S is O(logn) with high probability, the number of

drop-down steps is O(log n) with high probability. if n = 1 then

So we have yet to bound the number of scan-forward return S.

steps we make. Let ni be the number of keys examined end if

while scanning forward at level i. Observe that, after pick a random integer r in the range [0, n - l]

the key at the starting position, each additional key ex- let 2 be the element of S at rank r.

amined in a scan-forward at level i cannot also belong put the elements of S into three sequences:

to level i + 1. If any of these items were on the previous

level, we would have encountered them in the previous l L, storing the elements in S less than 2:

scan-forward step. Thus, the probability that any key l E, storing the elements in S equal to x

l G, storing the elements in S greater than Z.

is counted in ni is l/2. Therefore, the expected value

of ni is exactly equal to the expected number of times let L’ t quickSort

we must flip a fair coin before it comes up heads. This let G’ t quickSort

expected value is 2. Hence, the expected amount of time return L’ + E + G’.

spent scanning forward at any level i is O(1). Since S

has O(logn) 1eve1s with high probability, a search in S Code Fragment 3: Randomized quick-sort algorithm.

takes the expected time O(logn). By a similar analy-

sis, we can show that the expected running time of an

insertion or a removal is O(log n). times that a fair coin must be flipped until it shows

Finally, let us turn to the space requirement of a skip “heads” k times is 2k. Consider now a single recursive

list S. As we observed above, the expected number of invocation of randomized quick-sort, and let m denote

items at level i is n/2”, which means that the expected the size of the input sequence for this invocation. Say

total number of items in S is that this invocation is “good” if the pivot chosen is such

that subsequences L and G have size at least m/4 and

h

at most 3m/4 each. Thus, since the pivot is chosen uni-

c formly at random and there are m/2 pivots for which this

i=o

invocation is good, the probability that an invocation is

Hence, the expected space requirement of S is O(n). good is l/2.

Consider now the recursion tree T associated with an

instance of the quick-sort algorithm. If a node v of T of

3 Sorting

size m is associated with a “good” recursive call, then

One of the most popular sorting algorithms is the quick- the input sizes of the children of v are each at most 3m/4

sort algorithm, which uses a pivot element to split a (which is the same as m/(4/3)). If we take any path in

sequence and then it recursively sorts the subsequences. T from the root to an external node, then the length

One common method for analyzing quick-sort is to as- of this path is at most the number of invocations that

sume that the pivot will always divide the sequence al- have to be made (at each node on this path) until achiev-

most equally. We feel such an assumption would pre- ing log,,, n good invocations. Applying the probabilistic

suppose knowledge about the input distribution that is fact reviewed above, the expected number of invocations

typically not available, however. Since the intuitive goal we must make until this occurs is at most 210&/s n.

of the partition step of the quick-sort method is to divide Thus, the expected length of any path from the root to

the sequence S almost equally, let us introduce random- an external node in T is O(logn). Observing that the

ization into the algorithm and pick as the pivot a random time spent at each level of T is O(n), the expected run-

element of the input sequence. This variation of quick- ning time of randomized quick-sort is O(n log n).

sort is called randomized quick-sort, and is provided in

Code Fragment 3.

4 Selection

There are several analyses showing that the expected

running time of randomized quicksort is O(n log n) (e.g., The selection problem we asks that we return the kth

see [1,4,8]), independent of any input distribution as- smallest element in an unordered sequence S. Again

sumptions. The analysis we give here simplifies these using randomization, we can design a simple algorithm

analyses considerably. for this problem. We describe in Code Fragment 4 a

Our analysis uses a simple fact from elementary prob- simple and practical method, called randomized quick-

ability theory: namely, that the expected number of select, for solving this problem.

56

Algorithm quickSelect(S, L): of its parent call being good, the expected value of g(n)

is the same as the expected number of times we must

Input: Sequence S of n comparable elements, and an flip a fair coin before it comes up “heads.” This implies

integer lc E [l, n] that E(g(n)) = 2. Thus, if we let T(n) be a shorthand

Output: The kth smallest element of S notation for E(t(n)) (the expected running time of the

randomized quick-select algorithm), then we can write

if n = 1 then the case for n > 1 as T(n) 5 T(3n/4) + 2bn. Converting

return the (first) element of 5’. this recurrence relation to a closed form, we get that

end if

P%/, nl

pick a random integer r in the range [0, n - l]

let z be the element of S at rank T. T(n) 5 2bn - C (3/4)i.

put the elements of S into three sequences: i=o

Thus, the expected running time of quick-select is O(n).

l L, storing the elements in S less than z

l E, storing the elements in S equal to z

5 Conclusion

l G, storing the elements in S greater than x.

We have discussed the use of randomization in teaching

if k 5 IL1 then several key concepts on data structures and algorithms.

quickSelect(L, lc) In particular, we have presented simplified analyses for

else if k 5 IL1 + IEl then skip lists and randomized quick-sort, suitable for a CS2

return 2 {each element in E is equal to x} course, and for randomized quick-select suitable for a

else DS&A course.

quickSelect(G, k - IL1 - IEI) These simplified analyses, as well as some additional

end if ones, can also be found in the recent book on data struc-

tures and algorithms by the authors [2]. The reader

Code Fragment 4: Randomized quick-select algorithm. interested in further study of randomization in data

structures and algorithms is also encouraged to examine

We note that randomized quick-select runs in O(n2) the excellent book on Randomized Algorithms by Mot-

worst-case time. Nevertheless, it runs in O(n) expected wani and Raghavan (41 or the interesting book chapter

time, and is much simpler than the well-known deter- by Seidel on “backwards analysis” of randomized algo-

ministic selection algorithm that runs in O(n) worst-case rithms [8].

time (e.g., see [l]). A s was the case with our quick-sort

analysis, our analysis of randomized quick-select is sim- References

pler than existing analyses, such as that in [l]. PI T. H. Cormen, C. E. Leiserson, and R. L. Rivest. In-

Let t(n) denote the running time of randomized troduction to Algorithms. MIT Press, Cambridge, MA,

quick-select on a sequence of size n. Since the random- 1990.

ized quick-select algorithm depends on the outcome of PI M. T. Goodrich and R. Tamassia. Data Structures and

random events, its running time, t(n), is a random vari- Algorithms in Java. John Wiley and Sons, New York,

able. We are interested in bounding E(t (n)), the ex- 1998.

pected value of t(n). Say that a recursive invocation of [31 P. Kirschenhofer and H. Prodinger. The path length of

randomized quick-select is “good” if it partitions S, so random skip lists. Acta Informatica, 31:775-792, 1994.

that the size of L and G is at most 3n/4. Clearly, a re- PI R. Motwani and P. Raghavan. Randomized Algorithms.

cursive call is good with probability l/2. Let g(n) denote Cambridge University Press, New York, NY, 1995.

the number of consecutive recursive invocations (includ- [51 T. Papadakis, J. I. Munro, and P. V. Poblete. Average

ing the present one) before getting a good invocation. search and update costs in skip lists. BIT, 32:316-332,

Then 1992.

t(n) 5 bn *g(n) + t(3n/4), PI P. V. Poblete, J. I. Munro, and T. Papadakis. The bi-

nomial transform and its application to the analysis of

where b 2 1 is a constant (to account for the overhead

skip lists. In Proceedings of the European Symposium on

of each call). We are, of course, focusing in on the case

Algorithms (ESA), pages 554-569, 1995.

where n is larger than I, for we can easily characterize

in a closed form that t( 1) = 6. Applying the linearity of [71 W. Pugh. Skip lists: a probabilistic alternative to baI-

expectation property to the general case, then, we get anced trees. Commun. ACM, 33(6):668-676, 1990.

PI R. Seidel. Backwards analysis of randomized geometric

algorithms. In J. Path, editor, New Trends in Discrete

and Computational Geometry, volume 10 of Algorithms

Since a recursive call is good with probability l/2, and

and Combinatorics, pages 37-68. Springer-Verlag, 1993.

whether a recursive call is good or not is independent

57

- 4.4e (2)Diunggah olehLinda Zhang
- Ads working in a systemDiunggah olehRanbeersa Abhishek
- ch21 duiut gggggggggggggggggftDiunggah olehHacralo
- Data Structures and Algorithm Analysis in C++, Weiss, 3rd Edition. TABLE OF CONTENTS ONLY.Diunggah olehelunicopericodelospalotes
- ADA FILEDiunggah olehmegha
- CA_DS_2012-13_cseBDiunggah olehSureshKumar550
- DATA STRUCTURES A PROGRAMMING APPROACH WITH C, Second Edition - KUSHWAHA, DHARMENDER SINGH, MISRA, ARUN KUMARDiunggah olehPHI Learning Pvt. Ltd.
- c codingDiunggah olehanurag_gdu
- Bitonic SortDiunggah olehIonutz Gabriel
- FS Lecture 9 CosequentialDiunggah olehMitesh Kumar
- Viva 1Diunggah oleharefk
- interview.docxDiunggah olehMukeshVerma
- Interview QuestionsDiunggah olehFranklin Anto
- Reinforcement Learning Framework for Opportunistic Routing in WSNsDiunggah olehijcsn
- heapsDiunggah olehren 76
- HeapDiunggah olehVishnu Sathyanesan
- 5 Computer_Final.pdfDiunggah olehDeepak Sharma
- 05-22MergesortDiunggah olehEmil Devantie Brockdorff
- Brief Summary of Insertion SortDiunggah olehYi Lin Lim
- 14-P0157Diunggah olehhanumantha12
- D&AofAlgorithmsCourseOutlineDiunggah olehfahad_101

- Indian+Hills+C+Style+GuideDiunggah olehZe Chen
- VariablesDiunggah olehravg10
- Transformation Strategies Between Block-Oriented and Graph-Oriented Process Modelling LanguagesDiunggah olehravg10
- Carta Inss - DouglasDiunggah olehravg10
- Level1 Training Guide PortugueseDiunggah olehMarcelo Silveira
- The RC5 Encryption AlgorithmDiunggah olehravg10
- To JNI or Not to JNIDiunggah olehravg10
- ThesisMelattiDiunggah olehravg10
- Vectorization of Insertion Sort Using AltivecDiunggah olehravg10
- TR SortingDiunggah olehravg10
- Structured ProgrammingDiunggah olehravg10
- White SpacesDiunggah olehravg10
- X3D Web Based Algorithm AnimationDiunggah olehravg10
- SymbolsDiunggah olehravg10
- DIÁLOGOS HUMANIZANTES 2Diunggah olehravg10
- Perfect Simulation From TheDiunggah olehravg10
- Recursive Algorithms in Computer Science CoursesDiunggah olehravg10
- SortingDiunggah olehravg10
- RaPiDS an Algorithm for Rapid Expression Profile Database SearchDiunggah olehravg10
- ReturnDiunggah olehravg10
- Simulation Optimization Using Balanced Explorative and Exploitative SearchDiunggah olehravg10
- Pseudo Code Structured ProgrammingDiunggah olehravg10
- On-Line Versus Off-Line AlgorithmsDiunggah olehravg10
- Parallel Quick Sort AlgorithmDiunggah olehravg10
- Scientific Methods in Computer ScienceDiunggah olehravg10
- Pseudo Code StandardDiunggah olehravg10
- Pseudo Code a LATEX Style File for DisplayingDiunggah olehravg10
- Phase Change of Limit Laws in the Quicksort RecurrenceDiunggah olehravg10
- Quick Sort ExplanationDiunggah olehTrishool Narayanasetty

- Site analysis formatDiunggah olehAnanthapadmanabhan Kizhakke Maliyeckal
- AggregateDiunggah olehMohammad Tawfiq Wara
- Search for better health - HSC courseDiunggah olehaj
- How to Measure SulphateDiunggah olehstormchaser01
- Ego MindDiunggah olehPatricia O'Brien Libutti
- Group Project of Environmental Engineering (BFC32403) (1)Diunggah olehRome Genta
- Journal ChemistryDiunggah olehhenianggraeni
- SD YZASD SL00018 JPN Order Management ReportDiunggah olehnguyencaohuy
- Lactose BrothDiunggah olehTopheng D. Samarita
- 7. Heirs of ContiDiunggah olehVictor Lawrence Magbujos Babida
- Miroslav Svirčević Balkanološki institut SANU THE LEGAL STRUCTURE OF HOUSEHOLDS IN SERBIA AND BULGARIA IN THE 19 TH CENTURY.pdfDiunggah olehÜntaç Güner
- Lawyersclubindia Article _ Evolution of Law - A Short History of Indian Legal TheoryDiunggah olehGauravSharma
- Credit Point SystemDiunggah olehMurali Krishnan
- arendt on politicsDiunggah olehGeorge Khris Debbarma
- 5 - Alkali-Activated Binders v2Diunggah olehcpessoasales
- 00364 Tef Cochlear Report 8-10-13 Next (2).PDFDiunggah olehBlack Tear Misery
- Theories of LoveDiunggah olehshasagail
- mDiunggah olehshefalirahul20
- Use Cases and Usage ScenariosDiunggah olehHarsh Mohan
- OPCDiunggah olehravi_ind
- hwch9Diunggah olehAnonymous hht06lypm1
- Muslim Leaders in Pre-Partition Sub-continent (Opinion by Naeem Baig)Diunggah olehNaeem Baig
- 163164624-220-Kv-Gss-Heerapura-1.pdfDiunggah olehRitesh Meena
- Topic-8-Class-Notes1.pdfDiunggah olehMuhammad Adnan Laghari
- The Importance of Knowledge Management for Your BusinessDiunggah olehAime Bacolod
- Early History of Archaeology in AmazoniaDiunggah olehCristiana Barreto
- NETWORK INTRUSION DETECTION AND COUNTERMEASURE SELECTION IN VIRTUAL NETWORK (NIDCS)Diunggah olehijsptm
- Brocade_200E_5000_swconfigDiunggah olehapi-26737619
- 18760782 J BremmerThe Early Greek Concept of the SoulDiunggah olehAnonymous R844Tz
- River in Planform and Variation in Sinuosity Index : A Study of Dhamni River, Kolhapur (Maharashtra), IndiaDiunggah olehJagdish Sapkale