• Accelerated Computer Science‘da bu hafta yeni derste biraz daha ileri seviye Tree structure’lara gectik. Bu asamada bunlarin hepsini oturup bastan asagi ogrenmeye niyetim olmasa da, kulak asinaligi olmasinin faydali olacagini dusundugum birkac yeni kavram ogrendim:

    • AVL Tree: Elimizdeki Tree’nin her ekleme, cikarmada “dengeli” kalabilmesi icin her bir Node’a bir “yukseklik” verisi ve dengeyi saglamak icin olusturulan ek metodlar ekleniyor. Her yeni Node eklenme ve cikariminda, bu yukseklik bilgisine bakarak 2 veya -2 olma durumunda Tree tekrar duzenleniyor. Saga veya sola yatik Tree’ler olusturmamak adina epey etkili bir yontem.

    • B-Tree: Bu biraz daha karmasik fakat muhtemelen modern uygulamalara daha yakin olsa gerek. Bu sefer m order’a sahip her bir Node’da, m-1‘e kadar veri tutulabiliyor. Bu veriler Node’da sirali olarak tutuluyor. Ustelik her bir Node’dan yeni Node’lara dogru m tane de pointer bulunuyor. Yeni bir veri eklenecegi zaman eger Node dolu degilse, siraya gore yerlestiriliyor. Fakat eger dolu ise isler biraz karisiyor. Veriyi Node’a ekliyoruz fakat Node’u ikiye bolup, ortadaki degeri ust Node’a gonderiyoruz. Bunu recursive olarak yapip gerekirse bu ortadaki veriyi tutan yeni bir Node olusturup diger Node’lari buna bagliyoruz. Bu veri yapisi, ozellikle yeni veriyi ararken diske yada network’e cagri sayisini azaltmasi nedeniyle tercih ediliyormus. Cunku BST ya da AVL Tree’ye gore cok daha az sayida cagri ile bir veri aranabiliyor.

  • LeetCode’un bugunku challange’i benim gibi rookie’ler icindi. Ben de buna yarasir bir brute-force rookie cozumu ile tek denemede cozdum. Cozum Binary Search ile de yapilabilir, fakat acikcasi usendim.

# LeedCode June Challange Day 10
# Search Insert Position Problem

# Given a sorted array and a target value, return the index
# if the target is found. If not, return the index 
# where it would be if it were inserted in order.
# You may assume no duplicates in the array.

# Example 1:
# Input: [1,3,5,6], 5
# Output: 2

# Example 2:
# Input: [1,3,5,6], 2
# Output: 1

def tests():
	assert searchInsert([1,3,5,6], 5) == 2
	assert searchInsert([1,3,5,6], 2) == 1
	assert searchInsert([1,3,5,6], 7) == 4
	assert searchInsert([1,3,5,6], 0) == 0

	print("All Tests passed!")

def searchInsert(nums, target):
	# Brute-force solution
	# Check the target is smaller or equal to all elements - 
	# then insert it to the beginnig
	if(all(target <= k for k in nums)): return 0

	idx = 0

	while(idx != len(nums)-1):
		# loope through the array checking every number in between
		if(nums[idx]<= target <= nums[idx+1]):
			return idx+1
		idx += 1
	return idx + 1
  • Bugun Twitter’dan takip ettigim Emre Sevinc (@EmreSevinc)‘in attigi bir Tweet’te, Turkiye’den bir lise ogrencisinin Python’un ilk gelistiricisi G. von Rossum ile birlikte ortaklasa bir katki yaptiklarini ogrendim ve helal olsun dedim! Bahsi gecen kisi, Batuhan Taskaya. Kendisi epey aktif bir gelistirici anladigim kadariyla. Gecen sene de FOSSDEM’da Python Memory Management uzerine bir konusma vermis! E. Sevinc’in tweet’te dedigi gibi boylesi bir katki sanirim gunumuzde ancak Open Source ortaminda bu kadar dogal olabilir.

  • PyCon 2020’nin tum videolarini izleyecegim gibi duruyor bu gidisle! Bir suredir, Python ile sifirdan dogru durust proje gelistirmenin guzel yonlendirilmis bir anlatimini ararken fark ettim ki bu yilki PyCon’da dogrudan bunun 2.5 saatlik workshopunu vermisler: Modern Python Developer’s Toolkit En temelden baslayip VS Code kurulumu, kullanisli extensionlarin eklenmesi, kisayollar vs, ardindan Python enviroment’lari yonetmek icin pyenv modulunun kullanimi, sonrasinda da cookiecutter ile project template olusturup sifirdan bir Python projesi gelistirmek icin tum detaylar adim adim anlatiliyor. Tutorial’i destekleyen bir de web sitesi mevcut. Bugun yarisini bitirdim, gerisi yarina!