THINK JAVA: CÁCH SUY NGHĨ NHƯ NHÀ KHOA HỌC MÁY TÍNH - Trang 119

Bài t p 9

Nhi u d ng m u đ duy t m ng mà ta đã g p cũng có th đ

c vi t theo cách đ quy. Đó

ể ượ

ế

không ph i là cách th

ng dùng, nh ng là m t bài t p h u ích.

ườ

ư

1.

Hãy vi t m t ph

ng th c có tên

ế

ươ

maxInRange, nh n vào m t m ng s nguyên mà m t kho ng ch s

ỉ ố

(lowIndex và highIndex), r i tìm giá tr l n nh t trong m ng, nh ng ch xét nh ng ph n t

ị ớ

ư

ầ ử

gi a

ữ lowIndex và highIndex, k c hai đ u này. Ph ng th c ph i đ c vi t theo cách đ quy. N u chi u

ể ả

ươ

ả ượ

ế

ế

dài c a kho ng b ng 1, nghĩa là n u

ế lowIndex == highIndex, thì ta bi t ngay r ng ph n t duy nh t

ế

ầ ử

trong kho ng ph i là giá tr l n nh t. Do đó đây là tr

ng h p c s . N u có nhi u ph n t trong

ị ớ

ườ

ợ ơ ở ế

ầ ử

kho ng, thì ta có th chia m ng làm đôi, tìm c c đ i trên m i ph n, r i sau đó l y giá tr l n h n trong

ự ạ

ị ớ

ơ

s hai c c đ i tìm đ

c.

ự ạ

ượ

2.

Các ph

ng th c nh

ươ

ư maxInRange có th gây lúng túng khi dùng. Đ tìm ph n t l n nh t trong m ng,

ầ ử ớ

ta ph i cung c p m t kho ng bao g m toàn b m ng đó.

ộ ả

double

max = maxInRange(array, 0, a.length-1);

Hãy vi t m t ph

ng th c có tên

ế

ươ

max nh n tham s là m t m ng r i dùng

maxInRange đ tìm và tr

l i giá tr l n nh t. Các ph

ng th c nh

ị ớ

ươ

ư max đôi khi còn đ c g i là

ượ ọ

ph

ng th c gói b c

ươ

vì chúng

cung c p m t l p khái ni m xung quanh m t ph

ng th c l ng c ng và giúp nó d dùng. Ph

ng th c

ộ ớ

ươ

ứ ủ

ươ

mà th c s th c hi n tính toán đ

c g i là

ự ự ự

ượ ọ

ph

ng th c tr giúp

ươ

.

3.

Hãy vi t m t phiên b n

ế

ả find theo cách đ quy và dùng đ n d ng m u gói b c-tr giúp.

ế

find c n ph i

nh n m t m ng các s nguyên và m t s nguyên m c tiêu. Nó c n ph i tr l i ch s c a v trí đ u tiên

ộ ố

ả ả ạ

ỉ ố ủ ị

t i đó xu t hi n s nguyên m c tiêu, ho c tr l i -1 n u không xu t hi n.

ệ ố

ả ạ

ế

Bài t p 10

M t cách không hi u qu l m đ s p x p các ph n t trong m ng là tìm ph n t l n nh t

ả ắ

ể ắ

ế

ầ ử

ầ ử ớ

r i đ i ch nó cho ph n t th nh t, sau đó tìm ph n t l n th hai r i đ i ch v i ph n t th hai, và

ồ ổ

ầ ử ứ

ầ ử ớ

ồ ổ

ỗ ớ

ầ ử ứ

c nh v y. Cách này g i là

ư ậ

s p x p ch n

ế

(xem http://vi.wikipedia.org/wiki/S p_x p_ch n

ế

ọ ).

1.

Hãy vi t m t ph

ng th c mang tên

ế

ươ

indexOfMaxInRange nh n vào m t m ng s nguyên, tìm ph n t

ầ ử

l n nh t trong kho ng cho tr

c, r i tr l i ch s c a nó. B n có th s a l i phiên b n

ướ

ả ạ

ỉ ố ủ

ể ử ạ

ả maxInRange hay

b n có th vi t t đ u m t phiên b n t

ng tác v i máy.

ể ế ừ ầ

ả ươ

2.

Vi t m t ph

ng th c có tên

ế

ươ

swapElement nh n m t m ng s nguyên cùng hai ch s , r i đ i ch hai

ỉ ố ồ ổ

ph n t t i các ch s đó.

ầ ử ạ

ỉ ố

3.

Vi t m t ph

ng th c có tên

ế

ươ

selectionSort nh n vào m t m ng các s nguyên và trong đó

dùngindexOfMaxInRange cùng swapElement đ x p m ng t nh đ n l n.

ể ế

ỏ ế ớ

Bài t p 11

Vi t m t ph

ng th c có tên

ế

ươ

letterHist nh n m t chu i làm tham s r i tr l i histogram

ố ồ ả ạ

c a các ch cái trong chu i. Ph n t th không c a histogram c n ph i ch a s ch a trong chu i (c

ầ ử ứ

ứ ố ữ

ch in và th

ng); ph n t th 25 c n ph i ch a s ch z. L i gi i c a b n ch đ

c duy t chu i này

ườ

ầ ử ứ

ứ ố ữ

ả ủ

ỉ ượ

đúng m t l n.

ộ ầ

Bài t p 12

M t t đ

c g i là “doubloon” n u trong t đó, m i ch cái xu t hi n đúng hai l n. Ch ng

ộ ừ ượ ọ

ế

h n, các t sau đây là doubloon mà tôi đã tìm th y trong cu n t đi n.

ố ừ ể

Abba, Anna, appall, appearer, appeases, arraigning, beriberi, bilabial, boob, Caucasus, coco,
Dada, deed, Emmett, Hannah, horseshoer, intestines, Isis, mama, Mimi, murmur, noon,
Otto, papa, peep, reappear, redder, sees, Shanghaiings, Toto

Hãy vi t m t ph

ng th c có tên

ế

ươ

isDoubloon đ tr l i

ể ả ạ true n u t đã cho là m t doubloon và

ế ừ

false n u

ế

không ph i.

Bài t p 13

Hai t là t đ o (anagram) n u nh chúng có ch a cùng nh ng ch cái (đ ng th i cùng s

ừ ả

ế

ư